查找美国城市所在的美国县的最佳方法是啥?

Posted

技术标签:

【中文标题】查找美国城市所在的美国县的最佳方法是啥?【英文标题】:What's the best way to lookup the US county a US city resides in?查找美国城市所在的美国县的最佳方法是什么? 【发布时间】:2011-09-29 03:42:27 【问题描述】:

我正在寻找以编程方式获取给定美国城市所在的美国县名的最佳/最简单方法。似乎没有可用于此类(看似简单)任务的简单 API?

【问题讨论】:

路易斯安那分为教区,阿拉斯加分为自治市镇。所以我猜你的问题中只有 50 个中有 48 个是有效的 考虑到我的重点是德克萨斯州,我认为这是一个很好的限制。 无论如何你都应该需要一个数据库。所以我认为问题应该是“我需要什么样的数据库/数据结构?” 既然关注点在德克萨斯州,为什么不直接创建一个德克萨斯州所有城市/城镇的列表并与之匹配呢?***entry 是一个好的开始... 我没有包含我需要的信息的数据源。英语是我使用的语言。 【参考方案1】:

您可以免费下载县/市/邮政编码信息数据库,例如: http://www.unitedstateszipcodes.org/zip-code-database/(无需注册或付费)

将其全部或部分导入到本地持久数据存储(例如数据库)中,并在需要查找城市县时进行查询

注意:自发布此答案以来,县信息已从最初链接的 .csv 文件中消失。 此链接不再包含县信息:http://federalgovernmentzipcodes.us/free-zipcode-database.csv

【讨论】:

里面没有县。为什么这是公认的答案? @ladieu:它曾经有县信息。自从我链接到该文件后,该文件必须已更新并且县信息已删除。感谢您的提醒。我会尝试找到更好的资源来替换链接的资源... @ladieu:找到了指向资源的新链接,其中包含与原始 .csv 相同的县列。 @ladieu 我正在寻找那个文件。你能分享一下吗?找不到它。 截至 2016 年 6 月的县都在这里:unitedstateszipcodes.org/zip_code_database.csv【参考方案2】:

1) 城市跨越县

2) 邮编跨越城市和县,甚至不在同一条线上

任何使用 zip 作为中介的解决方案都会损坏您的数据(不,“zip+4”通常不会修复它)。您会发现城市到邮编到县的数据地图(#2)比更准确的模型(#1)有更多的城市到县匹配——这些都是错误的匹配。

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

人口普查“地点”是我们问题的“城市”。这些文件将“地点”映射到一个或多个县。

【讨论】:

“2010 ANSI 地点代码”是我所需要的,但上面的人口普查链接已损坏,我无法在 .gov 网站的任何地方找到它。我确实发现它上传到data.world/nrippner/ansi-geographic-codes。我从没听说过 data.world,但我注册了,终于可以轻松下载文件了。【参考方案3】:

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

最好的办法是参考城市及其各自县的数据库,但我不知道在哪里可以找到。 也许得克萨斯州出版了一个? CommonDataHub 不包含此信息。

【讨论】:

这几乎是我遇到的问题。事实证明,要找到此信息的参考资料很困难。【参考方案4】:

下面是一段代码,用于使用 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

注意事项:

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

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于查找美国城市所在的美国县的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

通过用户输入城市名称检索邮政编码的最佳 API(仅限美国)? [关闭]

美国新泽西州都有哪些城市

在德国城市自动完成地址的最佳行政级别是啥

路透社:三星在美国德州建价值170亿美金的代工厂

将纬度/经度转换为美国州

winston是啥烟