Answers:
有13个多州美国人口普查的邮政编码制表区(ZCTA):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
真的没有办法告诉这个。因为没有USPS定义的 ZipCode边界形状。邮递区号由运营商从特定配送中心交付给街道的边界框定义。
因此,您将需要获取USPS AIS数据并通过ZipCodes提取给定邮局提供的街道,然后将它们加入街道网格。这就是所有商业供应商(诺基亚/ TomTom)所做的,以创建他们用来显示邮政边界的伪形状。
这种不精确的过程是USPS不提供空间数据的原因。
需要特别注意的是,ZCTA数据不是USPS邮政编码。这是一个近似值。美国邮政(USPS)邮递区号真的很恐怖,除了近似值外没有用。每个人,包括除USPS以外的每个政府实体,以及(制定ZCTA的人口普查)都完全忽略了它们。如果USPS想要长大一点,他们将转换为最新的ZCTA并提供权威的GIS多边形。
然后...在这里,我们查询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中进行所有检查。但是,谷歌地图也不是权威。
1994年6月,根据以下美国人口普查局的网站,共有153个邮政编码跨州边界。
如前所述,有一些邮政编码跨州界传递,并且有一些邮政编码/部门跨越县界。有153个邮政编码处于一种以上的状态。一个以上的县有9000个邮政编码。按县划分的ZIP /行业共有11,331个(总数857,400个)。所有州都有一些部门划分,弗吉尼亚州,密歇根州和俄亥俄州的剂量特别大。如预期的那样,农村公路部门占(相对)大部分部门的份额。其他大多数情况属于较低的部门范围(保留用于邮政信箱)和处于99部门(保留用于邮政局长和商业邮件退回)。对于这些选定的案例,必须存在一些非标准的县代码分配。我们将不得不在以后进一步调查。
使用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/zh-CN/arcgisdesktop/10.0/help/index.html#/Spatial_Join/00080000000q000000/
“两个新字段Join_Count和TARGET_FID始终添加到输出要素类。Join_Count指示有多少个联接功能与每个目标功能(TARGET_FID)匹配。当在Join Operation参数中指定JOIN_ONE_TO_MANY时,另一个新字段JOIN_FID将添加到输出中。”
您可以在PostGIS中进行空间相交,并获取与之相交的每个州或城市及其邮政编码的列表,这将返回多个州相交的多个邮政编码,对于与同一邮政编码相交的每个城市,您将看到结果也是如此。
在宾夕法尼亚州,邮局界限与市政界限不符。一些乡镇可能有几个邮局派递给他们。当我们使用911寻址时,一些乡镇要求邮政局将其名称更改为乡镇名称,邮政局允许他们在继续使用旧邮局邮政编码的情况下执行此操作。许多这样做。您可以从这些链接中看到几个镇使用了相同的邮政编码。https://suburbanstats.org/zip-codes/pennsylvania/thornhurst https://suburbanstats.org/zip-codes/pennsylvania/scott-twp基本上可以使用带有正确邮政编码的“ Anytown”,因为他们的分类计算机读取邮政编码。
您可能还会遇到仅具有PO框且不进行本地传递的PO,因此地图上没有多边形。这些PO通常很小。