关于映射:查找位置的城市和邮政编码

关于映射:查找位置的城市和邮政编码

Finding City and Zip Code for a Location

给定纬度和经度,最简单的方法是查找城市名称和该位置的美国邮政编码。

(这类似于https://stackoverflow.com/questions/23572/latitude-longitude-database,除了我想沿相反的方向进行转换。)

相关问题:获取经纬度的街道地址


提及的任何在线服务及其竞争对手都提供"反向地理编码",您可以按照自己的要求进行操作-将lon / lat坐标转换为某种街道地址。

如果您只需要邮政编码和/或城市,则可以从美国人口普查局免费获得邮政编码数据库和市区数据库(由您的税金支付)。 http://www.census.gov/geo/www/cob/zt_metadata.html。

从那里,您可以针对空间数据提出自己的搜索算法,也可以使用空间数据库之一,例如Microsoft SQL Server,PostGIS,Oracle Spatial,ArcSDE等。

更新:2010年人口普查数据可在以下位置找到:
http://www2.census.gov/census_2010/


这是要调用的Web服务。
http://developer.yahoo.com/search/local/V2/localSearch.html

该站点具有正常的Web服务,但与您在此处所要求的不完全相同。
http://www.usps.com/webtools/


您有两个主要选择:

使用反向地理编码服务

  • Google只能与同一页面上的嵌入式Google Map结合使用,因此除非您正在这样做,否则我不建议您使用。
  • 雅虎有一个不错的选择,请参阅http://developer.yahoo.com/search/local/V3/localSearch.html
  • 我没有使用过OpenStreetMap。他们的地图看起来非常详细和透彻,并且总是在不断完善,但我担心延迟和可靠性以及它们的地址数据是否完整(地址数据在地图上不直接可见,而OpenStreetMap主要是交互式地图) )。

使用邮政编码列表

美国人口普查在此处发布美国邮政编码地图。他们从最小的统计单位人口普查区构建该数据,在大多数情况下,其与城市街区相对应。对于每个块,他们找到该块上最常见的邮政编码(大多数块只有一个邮政编码,但是邮政编码之间的边界附近的块可能有多个)。然后,它们将具有给定邮政编码的所有块聚合到一个称为"邮政编码表区域"的区域中。他们以ESRI shapefile格式发布这些区域的地图。

我知道这一点是因为我编写了Java库和Web服务(除其他外)使用此地图返回给定纬度和经度的邮政编码。它是一种商业产品,因此并非所有人都可以使用,但是它快速,易于使用,并且无需API即可解决此特定问题。您可以在这里阅读有关此产品的信息:

http://askgeo.com/database/UsZcta2010

以及这里有关您所有地理区域的信息:

http://askgeo.com

与反向地理编码解决方案不同,反向地理编码解决方案只能作为Web API使用,因为运行自己的服务非常困难,您可以在自己的服务器上运行此库,而不必依赖外部资源。


或Google的反向地理编码

链接

http://maps.google.com/maps/geo?output=xml&q={0},{1}&key={2}&sensor=true&oe=utf8

其中0是纬度1是经度


您可以在以下位置购买价格相对便宜的带有lat和长信息的邮政编码:http://www.zipcodedownload.com/


如果您致电该服务的电话流量过高,则绝对应该考虑获取自己的邮政数据集。在大多数情况下,这将提供您所需的所有信息,并且有很多数据库工具可用于为位置数据建立索引(例如,PostgreSQL的PostGIS)。


尚未在此处列出的另一个反向地理编码提供程序是OpenStreetMap:您可以使用其Nominatim搜索服务。

OSM(可能吗?)增加了额外的好处,就是用户可以完全编辑(类似于Wiki),因此对所有这些数据都拥有非常宽松的许可方案。考虑一下开源地图数据。


geonames具有广泛的ws集合,可以处理此问题(以及其他):

http://www.geonames.org/export/web-services.html#findNearbyPostalCodes
http://www.geonames.org/export/web-services.html#findNearbyPlaceName


推荐阅读