我正在使用一个邮政编码列表,但我想知道有多少个(或哪个)邮政编码映射到一个以上的美国州或美国城市?例如,我知道邮政编码42223决心穿越坎特伯林(KY-TN)州际线的美军坎贝尔堡。奇怪的是,google API仅针对与该zip对应的状态返回TN

评论

您如何定义“城市”和“邮政编码”?

#1 楼

美国共有13个多州人口普查的邮政编码制表区(ZCTAs):02861、42223、59221、63773、71749、73949、81137、84536、86044、86515、88063、89439和97635。

正如其他人所提到的,有几种不同的方法可以计算出邮政编码所覆盖的区域,但是ZCTA是最简单,也是我所知道的唯一正式版本。

因此,您的42223示例确实跨越了州边界,但看起来实际上是在马里兰州和弗吉尼亚州之间。在肯塔基州和田纳西州之间。

以下是各州的完整列表:

 02861  Massachusetts
 02861   Rhode Island
 42223       Kentucky
 42223      Tennessee
 59221        Montana
 59221   North Dakota
 63673       Illinois
 63673       Missouri
 71749       Arkansas
 71749      Louisiana
 73949       Oklahoma
 73949          Texas
 81137       Colorado
 81137     New Mexico
 84536        Arizona
 84536           Utah
 86044        Arizona
 86044           Utah
 86515        Arizona
 86515     New Mexico
 88063     New Mexico
 88063          Texas
 89439     California
 89439         Nevada
 97635     California
 97635         Oregon


这是我生成它的方式(使用Python中的Pandas):

import pandas as pd

zcta_to_place_url = 'http://www2.census.gov/geo/docs/maps-data/data/rel/zcta_place_rel_10.txt'

# load relevant data
df = pd.read_csv(
  zcta_to_place_url,
  dtype={'ZCTA5': str},
  usecols=['ZCTA5', 'STATE'])

# the data often repeats the same (ZCTA, state) pair. Remove these
df = df.drop_duplicates()

# get number of times each ZCTA appears (most are only 1)
counts = df['ZCTA5'].value_counts()

# get those listed more than once
multi_state_zips = df[df.ZCTA5.isin(counts[counts > 1].index)]


# the census uses numeric state codes
# replace these with state names

census_codes_to_names_url = 'http://www2.census.gov/geo/docs/reference/state.txt'

states = pd.read_csv(census_codes_to_names_url, sep='|')
merged = pd.merge(
  multi_state_zips, states,
  on='STATE'
  )[['ZCTA5', 'STATE_NAME']]
print merged.sort(['ZCTA5', 'STATE_NAME']).to_string(index=False)


编辑:看来人口普查对状态有两种不同的两位数编码。两者都是根据州的字母顺序分配的数字,但其中一个似乎直接应用了1-51(50个州+ DC)中的数字,而另一个跳过了一些数字。我使用的是第一个,而我应该使用的是第二个,所以我列出的状态名称是错误的。我已使用正确的列表更新了代码和结果。

编辑:由OpenCongress API确认的新状态映射:https://gist.github.com/gabrielgrant/89f883d093e2abf129ad

评论


非常感谢您捕捉到@JesseCrocker-人口普查(令人困惑)似乎有两种不同的州两位数字编码。两者都是根据州的字母顺序分配的数字,但是一个似乎直接应用了1-51(50个州+ DC)中的数字,而另一个跳过了一些数字。我使用的是第一个,但是我应该使用的是第二个,所以我列出的州名是错误的(尽管ZCTA很好)。我已经用正确的清单修复了代码和结果。

–加百列·格兰特(Gabriel Grant)
15-10-22在10:42



关于FIPS代码中的空白,被跳过的数字在1970年代是为边远地区(美属萨摩亚,运河区,关岛,波多黎各和维尔京群岛)保留的,但后来并没有被使用。 en.wikipedia.org/wiki/…

– Neuhausr
16年1月7日在14:41

不要忘了邮政编码71717,它横跨六个州,县和多个城市的三个州:57717奥罗拉(Aurora),SD 57717巴特,SD 57717卡特(Carter),MT 57717克鲁克,怀俄明州57717哈丁,SD 57717劳伦斯(SD)

–杰弗里
16年4月22日在21:58

此列表尚不完整。查看我的答案以获得更好的近似值。 gis.stackexchange.com/a/223445/6052

–埃文·卡洛尔(Evan Carroll)
17年1月5日在19:08

真奇怪Google Maps显示02861实际上是MA和RI之间边界的一部分,而整个邮政编码则牢固地位于RIgoogle.com/maps/place/Pawtucket,+RI+02861/…

–科迪·布格斯坦(CodyBugstein)
19/12/25在1:13

#2 楼

真的没有办法告诉这个。因为没有USPS定义的ZipCode边界形状。邮递区号由运营商从特定配送中心交付给街道的边界框定义。因此,您将需要获取USPS AIS数据并通过ZipCodes提取给定邮局提供的街道,然后将这些街道加入街道网格。这是所有商业供应商(Nokia / TomTom)制作的Psuedo形状,用于显示邮政边界。这种不精确的过程是USPS不提供空间数据的原因。

评论


准确吗?什么是真相?已经创建了许多zip边界层,鉴于其未知的要求,这可能会或可能不会满足此特定分析的目的。 Esri免费zip边界--arcgis.com/home/item.html?id=8d2012a2016e484dafaac0451f9aea24另请参见gis.stackexchange.com/questions/2682/…

–awesomo
13年8月8日在22:30

给定了,但是您还需要了解所做的任何事情,这些都会影响所使用的数据。

–D.E. Wright
13年3月9日,0:08

#3 楼

美国人口普查局根据其中包含的地址(称为邮政编码列表区域(ZCTAs))得出邮政编码的近似边界。

他们发布关系文件,描述其ZCTAs如何映射到其他地理区域。如果检查“ ZCTA到地方”关系文件,则可以看到它们如何映射到城镇。您可以推断出它们是如何映射到ZCTA到县的关系文件的。

关系文件使用人口普查的地理ID,因此您需要获取一个地名词典文件,以帮助您将数字ID转换为

正如其他答案所述,邮政编码到位置的任何映射都可能是近似的,但是我对人口普查数据文件感到很幸运。

#4 楼

带有PostGIS的2016 TIGER数据

作为特殊说明,ZCTA数据不是USPS邮政编码。这是一个近似值。美国邮政(USPS)邮递区号真的很可怕,除了近似之外没有用。每个人,包括除USPS以外的每个政府实体,以及(制定ZCTA的人口普查)都完全忽略了它们。如果USPS想要长大一点,他们会转换为最新的ZCTA并提供权威的GIS多边形。




2016 TIGER ZCTA 877 MB表数据。 br />

33,144 ZCTAs
52,669,641点,



2016 TIGER状态15 MB表数据。 br />
56个“州”总数


然后...在这里,我们查询TIGER State和TIGER ZCTA之间的交点数据集。请注意,我们通过ZCTA总面积的1%来确定州。如果ZCTA区域的1%不在状态中,则我们认为这是四舍五入错误,或者有人在人口普查中发指。请查看56168或什至83832,以获得我们正在通过这种增加的选择性进行修剪的邮政编码。

SELECT zcta5ce10, array_agg(state.name ORDER BY state.name) AS states
FROM census.state AS state
JOIN census.zcta AS zcta ON (
  ST_Intersects(state.geog::geometry, zcta.geog::geometry)
  AND NOT ST_Touches(state.geog::geometry, zcta.geog::geometry)
  AND ST_Area(ST_Intersection(state.geog, zcta.geog)) > (ST_Area(zcta.geog)*0.01)
)
GROUP BY zcta.zcta5ce10
HAVING count(*) > 1
ORDER BY zcta5ce10;


这里是结果集

 zcta5ce10 |            states            
-----------+---------------------------------
 03579     | {Maine,"New Hampshire"}
 20135     | {Virginia,"West Virginia"}
 24604     | {Virginia,"West Virginia"}
 31905     | {Alabama,Georgia}
 38079     | {Kentucky,Tennessee}
 38769     | {Arkansas,Mississippi}
 38852     | {Alabama,Mississippi}
 42223     | {Kentucky,Tennessee}
 51001     | {Iowa,"South Dakota"}
 51023     | {Iowa,"South Dakota"}
 51360     | {Iowa,Minnesota}
 51557     | {Iowa,Nebraska}
 51640     | {Iowa,Missouri}
 52542     | {Iowa,Missouri}
 52573     | {Iowa,Missouri}
 52626     | {Iowa,Missouri}
 54554     | {Michigan,Wisconsin}
 56027     | {Iowa,Minnesota}
 56144     | {Minnesota,"South Dakota"}
 56164     | {Minnesota,"South Dakota"}
 56219     | {Minnesota,"South Dakota"}
 56744     | {Minnesota,"North Dakota"}
 57026     | {Minnesota,"South Dakota"}
 57030     | {Minnesota,"South Dakota"}
 57068     | {Minnesota,"South Dakota"}
 57078     | {Nebraska,"South Dakota"}
 57638     | {"North Dakota","South Dakota"}
 57641     | {"North Dakota","South Dakota"}
 57642     | {"North Dakota","South Dakota"}
 57645     | {"North Dakota","South Dakota"}
 57648     | {"North Dakota","South Dakota"}
 57660     | {"North Dakota","South Dakota"}
 57717     | {"South Dakota",Wyoming}
 57724     | {Montana,"South Dakota"}
 58225     | {Minnesota,"North Dakota"}
 58439     | {"North Dakota","South Dakota"}
 58623     | {"North Dakota","South Dakota"}
 58649     | {"North Dakota","South Dakota"}
 58653     | {"North Dakota","South Dakota"}
 59221     | {Montana,"North Dakota"}
 59270     | {Montana,"North Dakota"}
 59275     | {Montana,"North Dakota"}
 59847     | {Idaho,Montana}
 63673     | {Illinois,Missouri}
 65729     | {Arkansas,Missouri}
 65733     | {Arkansas,Missouri}
 65761     | {Arkansas,Missouri}
 66541     | {Kansas,Nebraska}
 67950     | {Kansas,Oklahoma}
 68325     | {Kansas,Nebraska}
 68719     | {Nebraska,"South Dakota"}
 68978     | {Kansas,Nebraska}
 69201     | {Nebraska,"South Dakota"}
 69212     | {Nebraska,"South Dakota"}
 69216     | {Nebraska,"South Dakota"}
 71749     | {Arkansas,Louisiana}
 72338     | {Arkansas,Tennessee}
 72644     | {Arkansas,Missouri}
 73949     | {Oklahoma,Texas}
 75556     | {Arkansas,Texas}
 79837     | {"New Mexico",Texas}
 80758     | {Colorado,Nebraska}
 81137     | {Colorado,"New Mexico"}
 81324     | {Colorado,Utah}
 82063     | {Colorado,Wyoming}
 82082     | {Nebraska,Wyoming}
 82701     | {"South Dakota",Wyoming}
 82801     | {Montana,Wyoming}
 82930     | {Utah,Wyoming}
 83111     | {Idaho,Wyoming}
 83120     | {Idaho,Wyoming}
 83312     | {Idaho,Utah}
 83342     | {Idaho,Utah}
 84034     | {Nevada,Utah}
 84531     | {Arizona,Utah}
 84536     | {Arizona,Utah}
 86044     | {Arizona,Utah}
 86504     | {Arizona,"New Mexico"}
 86514     | {Arizona,Utah}
 86515     | {Arizona,"New Mexico"}
 87328     | {Arizona,"New Mexico"}
 88220     | {"New Mexico",Texas}
 88430     | {"New Mexico",Texas}
 89010     | {California,Nevada}
 89019     | {California,Nevada}
 89060     | {California,Nevada}
 89421     | {Nevada,Oregon}
 89439     | {California,Nevada}
 89832     | {Idaho,Nevada}
 97635     | {California,Oregon}
 97910     | {Idaho,Oregon}
 99128     | {Idaho,Washington}
 99362     | {Oregon,Washington}
(93 rows)


您应该能够在Google Maps中进行所有检查。但是,Google地图也不具有权威性。

#5 楼

1994年人口普查文档中提到的国家重叠

1994年6月,根据以下美国人口普查局网站,共有153个邮政编码跨越了国家边界。前面提到过,有一些邮政编码会跨州界传递,并且有一些邮政编码/部门会跨越县界。有153个邮递区号处于一种以上的状态。一个以上的县有9000个邮政编码。按县划分的ZIP /行业共有11,331个(总数857,400个)。所有州都有一些部门分开,弗吉尼亚州,密歇根州和俄亥俄州的剂量特别大。如预期的那样,农村公路部门(相对)包含了大部分拆分部门。其他大多数情况属于较低的部门范围(保留给邮政信箱)和99部门(保留给邮政局长和商业邮件退回)。对于这些选定的案例,必须有一些非标准的县代码分配发生。我们将不得不在以后进行进一步调查。


#6 楼

借助ArcGIS,您可以使用空间连接工具(或在脚本中)查找哪些邮政编码多边形与多个状态多边形相交。在输出要素类中,将存在一个Join_Count字段,该字段指示多个状态。您可以对邮编和城市做类似的事情。由于边框的不正确/缺失或分辨率,拉链可能会无意中重叠多个,因此可能会产生误报。您可以在空间连接之前对拉链进行负的-100m缓冲,然后查看其效果。

import arcpy

target_features = "C:/data/usa.gdb/states"
join_features = "C:/data/usa.gdb/zips"
out_feature_class = "C:/data/usa.gdb/states_zips"

arcpy.SpatialJoin_analysis(target_features, join_features, out_feature_class, "JOIN_ONE_TO_MANY")


http://help.arcgis.com/en /arcgisdesktop/10.0/help/index.html#/Spatial_Join/00080000000q000000/
“两个新字段Join_Count和TARGET_FID始终添加到输出要素类。Join_Count指示与每个目标要素匹配的联接要素数(TARGET_FID )。
在“连接操作”参数中指定JOIN_ONE_TO_MANY时,另一个新字段JOIN_FID将添加到输出中。“

#7 楼

您可以在PostGIS中进行空间相交,并获取每个州或城市及其相交的邮政编码的列表,这将返回多个州相交的多个邮政编码,对于每个相交相同邮政编码的城市,您将看到结果也一样。

评论


有关详细信息,请参见我的答案。

–埃文·卡洛尔(Evan Carroll)
17年1月6日在3:00

#8 楼

在宾夕法尼亚州,邮局界限与市政界限不符。一些乡镇可能有几个邮局派递给他们。当我们使用911寻址时,一些乡镇要求邮政局将其名称更改为乡镇名称,邮政局允许他们在继续使用旧邮局邮政编码的情况下执行此操作。许多这样做。您可以从这些链接中看到几个镇使用了相同的邮政编码。 https://suburbanstats.org/zip-codes/pennsylvania/thornhurst
https://suburbanstats.org/zip-codes/pennsylvania/scott-twp由于以下原因,基本上可以使用带有正确邮政编码的“ Anytown”他们的排序计算机会先阅读邮政编码。

您可能还会遇到仅具有PO框且不进行本地传递的PO,因此地图上没有多边形。这些PO通常很小。