2011-07-05 43 views
6

我正在寻找最佳/最简单的方式来以编程方式获取美国城市所在的美国城市的名称。它似乎没有一个简单的API可用于这样一个(看似简单)的任务?寻找美国城市居住的美国城市的最佳方式是什么?

+0

路易斯安那州被分为教区和阿拉斯加州自治市。所以我猜只有48个50是有效的在您的问题 –

+0

我认为这是好的作为一个限制,考虑到我的重点是德克萨斯州。 – Cucumber2

+1

无论如何你都需要一个数据库。所以我认为这个问题应该是“我需要什么样的数据库/数据结构?” – splash

回答

7

你可以下载县/市/邮政编码信息可自由使用的数据库,如这一个: http://www.unitedstateszipcodes.org/zip-code-database/(无需注册或付费)

导入它的整体,还是它的一个小节,到本地永久性数据存储(如数据库),每当你需要查找一个城市的县

注意查询它:县信息已经从最初联.csv文件消失了,因为这个答案被张贴。 此链接不再包含县信息:http://federalgovernmentzipcodes.us/free-zipcode-database.csv

+0

+1优秀资源 – Matthew

+2

没有县在它..为什么这是公认的答案? – ladieu

+0

@ladieu:曾经有县的信息。自从我链接到该文件后,该文件必须已更新,并且县信息已被删除。感谢您的高举。我会尝试找到一个更好的资源,以取代链接的... –

1

由于县的奇怪的多边形形状和城市的点位置,这个任务使用地理空间功能并不容易。

你最好打赌是参考一个城市和他们各自的县的数据库,但我不知道你在哪里可以找到一个。 也许德州出版一本吗?
CommonDataHub不包含此信息。

+0

这几乎是我遇到的问题。找到这些信息的参考很困难。 – Cucumber2

+1

@Downvoter,谨慎解释? – Matthew

0

最快和最不回避的方式可能是使用来自免费地理位置API(在Google上很容易找到)的JSON/XML请求。这样你就不需要创建/托管你自己的数据库。

0

下面这个链接在TX所有的城市是一些代码以编程方式攫取美国县的名字给一个美国城市使用/状态Google Maps API。此代码速度慢/效率低,并且没有任何错误处理。然而,它对我来说可靠地工作,使县与一千个城市的名单匹配。

#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