我正在寻找以编程方式获取某个美国城市所在美国郡名称的最佳/最简单方法。似乎没有一个简单的API可用于这样一个(看似简单的)任务?
答案 0 :(得分:8)
您可以下载免费提供的县/市/邮政编码信息数据库,例如: http://www.unitedstateszipcodes.org/zip-code-database/(无需注册或支付)
将整个或其子部分导入本地持久性数据存储(例如数据库),并在需要查找某个城市的县时查询它
注意:自从此答案发布以来,县信息已从原始链接的.csv文件中消失。 此链接不再包含县信息:http://federalgovernmentzipcodes.us/free-zipcode-database.csv
答案 1 :(得分:3)
1)城市跨越县
2)拉链跨越城市和县,甚至不在同一条线上
任何使用zip作为中介的解决方案都会破坏您的数据(不,“zip + 4”通常不会修复它)。你会发现城市到邮编到县的数据地图(#2)有比城市到县的更多数量的匹配而不是更精确的模型(#1) - 这些都是不良匹配。
您正在寻找的是免费的人口普查数据。您需要的联邦信息处理标准(FIPS)数据集称为“2010年地方ANSI代码”:https://www.census.gov/geo/reference/codes/place.html
人口普查“地方”是我们问题的“城市”。这些文件将“地点”映射到一个或多个县。
答案 2 :(得分:2)
使用地理空间函数完成此任务并不容易,因为县的奇数多边形和城市的点位置。
您最好的选择是参考城市及其各自县的数据库,但我不知道您在哪里可以找到。 也许德克萨斯出版了一个? CommonDataHub不包含此信息。
答案 3 :(得分:1)
从2000年人口普查中查看TX中所有城市的链接
答案 4 :(得分:1)
以下是一些代码,使用Google Maps API以编程方式获取美国某个城市/州的美国郡名称。此代码缓慢/低效,并且没有任何错误处理。然而,它对我来说是可靠的,可以将县与约1,000个城市的列表相匹配。
#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
答案 5 :(得分:0)
最快且最不回避的方式可能是使用免费地理位置API(在Google上轻松找到)的JSON / XML请求。这样您就不需要创建/托管自己的数据库了。