美国城市所属的县最佳查询方式是什么?

13

我正在寻找以编程方式获取给定美国城市所属的美国县名的最佳/最简单方法。看起来没有针对这种(看似简单的)任务的直接API可用?


路易斯安那州被划分为教区,而阿拉斯加州则被划分为自治行政区。因此,我猜你的问题只适用于48个州。 - Fredrik Pihl
我认为这个限制还可以,考虑到我的重点是德克萨斯州。 - Cucumber2
1
无论如何,您都应该需要一个数据库。因此,我认为问题应该是“我需要什么样的数据库/数据结构?” - splash
既然重点在于德克萨斯州,为什么不创建一个包含所有德克萨斯州城镇的列表,并进行匹配呢?维基百科的条目是一个不错的起点... - Fredrik Pihl
我没有包含所需信息的数据源。我使用的语言是英语。 - Cucumber2
有些县属于城市,比如纽约市。 - Neil McGuigan
5个回答

12

2
为什么这是被接受的答案?它没有包含县城。 - ladieu
@ladieu:以前它有县级信息。自从我链接到它以来,文件肯定已经更新并且删除了县级信息。感谢您的提醒。我会尝试找到更好的资源来替换链接的那个... - Paul Sasik
@ladieu:发现了一个新的链接,其中包含原始 .csv 文件中的县列。 - Paul Sasik
@ladieu 我在找那个文件,你能分享一下吗?我找不到它。 - Naveen
截至2016年6月,县的信息在这里:http://www.unitedstateszipcodes.org/zip_code_database.csv - David Vogel
县与邮编的映射关系不正确,因为一个邮编可能涵盖多个县。这种不准确性通常可以接受,但您需要了解这一点。此外,那些名字类似于“unitedstatesawesomefreezipcodes2000.biz”的网站实际上只是重新打包了这些普查数据:https://www.census.gov/geo/maps-data/data/zcta_rel_download.html - gss

9

1) 城市涵盖县区

2) 邮政编码覆盖城市和县区,且不在同一行上。

任何使用邮政编码作为中间介质的解决方案都会破坏您的数据(而且,“邮政编码+4”通常无法修复)。您会发现,城市到邮编到县区的数据映射(#2)具有比更准确的模型(#1)更多的城市到县区匹配--这些都是错误匹配。

您需要找到的是免费的人口普查数据。您需要的联邦信息处理标准(FIPS)数据集称为“2010年地名的ANSI代码”: https://www.census.gov/geographies/reference-files/time-series/geo/name-lookup-tables.2010.html

人口普查的“地点”即为我们所说的“城市”。这些文件将“地点”映射到一个或多个县区。


“2010年地点ANSI代码”是我需要的,但上面的人口普查链接已经失效了,我在.gov网站上也找不到它。我在https://data.world/nrippner/ansi-geographic-codes上找到了上传的文件。我以前从未听说过data.world,但我注册后终于能够轻松下载文件了。 - Omar Wasow

2

这里有一段代码,可以使用Google Maps API自动获取美国城市/州的名称,以获得美国县名。该代码速度较慢/效率低下,且没有任何错误处理。然而,它已经可靠地为我匹配了大约1000个城市的县名。

#Set up googlemaps API
import googlemaps
google_maps = googlemaps.Client(key='API_KEY_GOES_HERE')

#String of city/state
address_string = 'Atlanta, GA'

#Geocode
location = google_maps.geocode(address_string)

#Loop through the first dictionary within `location` and find the address component that contains the 'administrative_area_level_2' designator, which is the county level
target_string = 'administrative_area_level_2'
for item in location[0]['address_components']:     
    if target_string in item['types']: #Match target_string
        county_name = item['long_name'] #Or 'short_name'
        break #Break out once county is located
    else:
        #Some locations might not contain the expected information
        pass

这将产生以下结果:
>>> county_name
Fulton County

注意事项:

  1. 如果google_maps.geocode()没有传递有效地址,代码将会出错
  2. 某些地址不会返回与'administrative_area_level_2'相对应的数据
  3. 这并不能解决跨越多个县的美国城市的问题。我认为API只是返回与address_string关联的单个纬度/经度相关的县

2

由于县的奇怪多边形形状和城市的点位置,使用地理空间函数来完成此任务并不容易。

最好的方法是参考一个城市及其相应县的数据库,但我不知道你可以在哪里找到这个信息。 也许德克萨斯州会发布一个?
CommonDataHub不包含此信息。


这基本上就是我遇到的问题。很难找到关于这个信息的参考资料。 - Cucumber2

-1
可能最快、最不侵入的方法是使用免费的地理位置API(可以在谷歌上轻松找到)发出JSON/XML请求。这样,您就不需要创建/托管自己的数据库了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接