我正在寻找以编程方式获取给定美国城市所属的美国县名的最佳/最简单方法。看起来没有针对这种(看似简单的)任务的直接API可用?
我正在寻找以编程方式获取给定美国城市所属的美国县名的最佳/最简单方法。看起来没有针对这种(看似简单的)任务的直接API可用?
1) 城市涵盖县区
2) 邮政编码覆盖城市和县区,且不在同一行上。
任何使用邮政编码作为中间介质的解决方案都会破坏您的数据(而且,“邮政编码+4”通常无法修复)。您会发现,城市到邮编到县区的数据映射(#2)具有比更准确的模型(#1)更多的城市到县区匹配--这些都是错误匹配。
您需要找到的是免费的人口普查数据。您需要的联邦信息处理标准(FIPS)数据集称为“2010年地名的ANSI代码”: https://www.census.gov/geographies/reference-files/time-series/geo/name-lookup-tables.2010.html
人口普查的“地点”即为我们所说的“城市”。这些文件将“地点”映射到一个或多个县区。
这里有一段代码,可以使用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
注意事项:
address_string
关联的单个纬度/经度相关的县由于县的奇怪多边形形状和城市的点位置,使用地理空间函数来完成此任务并不容易。
最好的方法是参考一个城市及其相应县的数据库,但我不知道你可以在哪里找到这个信息。
也许德克萨斯州会发布一个?
CommonDataHub不包含此信息。