2010-08-25 77 views
17

我想从用户当前位置(纬度,经度)获取邮政编码,我曾经使用过MKReverse Geocoder委托方法,但有时我无法获得基于纬度&经度(有效值)的邮政编码信息。 MKReverseGeocoder有没有其他的选择? ZipCode数据库是特定于国家,这就是为什么我不想使用它们。任何其他想法或线索?从经度,纬度获取邮政编码?

感谢

+2

邮政编码数据库是国家特定的,是的;但是邮编也是国家特定的(例如,美国没有与荷兰或英国相同的邮政编码格式)。如果你想使用邮编,你需要处理这种或那种方式。 – Piskvor 2010-08-25 10:31:30

回答

34

考虑GeoNames web service。这是根据知识共享署名许可协议完成的地理编码/反向地理编码套件。你可以下载他们的数据,或者打他们的网络服务。最好的情况是,他们不需要任何API密钥或许可证 - 你只需打开他们的网络应用程序,然后敲打你的数据。

下面是一个例子:http://ws.geonames.org/findNearbyPostalCodesJSON?formatted=true&lat=36&lng=-79.08这将返回一个针对北卡罗莱纳州Chapel Hill周围邮政编码的JSON对象。

这也是国际性的。这里是英格兰的西福德,唯一的区别是我要发送的经纬度:http://ws.geonames.org/findNearbyPostalCodesJSON?formatted=true&lat=50.5&lng=0.08

然后您需要学习如何制作Web请求和解析JSON(如果您还没有掌握这些东西),并且你们全都定下来了。

+0

谢谢,这是我正在寻找。 谢谢。 – Matrix 2010-08-25 13:28:07

+0

用于商业用途,它有点昂贵(随着时间的推移)。这不是免费的,这是他们的指南:http://www.geonames.org/commercial-webservices.html。请将该新闻发送给你... – 2012-03-06 22:25:28

+4

使用GeoNames可能导致重大错误。他们返回邮政编码记录在他们的数据库中最接近您的查询点的记录。这是错误的,如果他们的数据库中最近的记录是在不同的邮政编码,这将发生在任何时候你接近两个邮政编码之间的边界。在此页面上查看我的答案,获取此信息的正确方法。 – 2012-06-04 20:03:49

1
+1

我已经通过它,但没有找到任何邮编相关的 – Matrix 2010-08-25 10:41:11

+1

Google的反向地理编码服务只能与嵌入式Google地图一起使用。 – 2012-05-08 21:48:02

2

如果你有空闲的DB(可从该网站?只要搜索邮政编码数据库,你会看到它)

,那么你可以运行附近的纬度/多头内部SQL查询测试。这样你就不用担心授权一个Web服务。

然后你有三个选项。 SQL BETWEEN语句,斜边等式或Haversine。 Haversine是最好的,幸运的是它在其他地方的tutorial'd

+1

需要大约25秒为什么投票下来?说真的,你想让我做数学吗?我在工作中使用该技术,它可以在不使用联机编码器的情况下执行此操作。这解决了我们的问题,它的工作原理,然而你却把我投给了我,因为你懒得测试四个不平等而没有人为你编写代码?这里:如果x <纬度+范围AND x> lat - 范围,长度相同。解答你的q – 2012-05-15 16:22:08

+0

这个数据库如何处理这个数据库通常是邮政编码的核心经纬度?您需要一个包含所有邮政区域(例如GeoJSON)所有区域的数据库,并且您需要一个能够理解GeoJSON点区域查询(其中很少有)的数据库。 Haversine和SQL BETWEEN似乎会给你一个非常近似的答案,除非我错过了一些东西。 – 2015-02-20 05:41:15

+0

我不认为你错过了任何东西。我们从字面上做了数学运算,并通过使用trig来确定哪些lats和longs靠近,从而缩小了邮政编码。它花费处理能力,但它对我们有好处。 – 2015-02-20 20:23:24

6

这实际上是一个棘手的问题。使用GeoNames等地理编码解决方案很可能会导致大量查询出现重大错误。原因是GeoNames通过在他们的数据库中查找离您查询点最近的记录,然后返回他们为该点记录的邮政编码。当您的查询点位于数据库中的记录顶部时,这非常适用,否则可能会导致错误。例如,如果他们最近的记录在不同邮政编码的几个街区以外,则会得到错误的答案。

美国人口普查局已经创建了邮政编码的地图:

https://www.census.gov/geo/reference/zctas.html

请参阅该网页上他们的笔记。

我也参与了一个项目,该项目使用人口普查地图提供一个API,可以为给定的经度和纬度返回邮政编码。正是在:

http://askgeo.com

我们提供的web API和您可以在自己的服务器上运行的Java库。该图书馆有出色的表现。因为不仅仅是邮政编码我们的网站提供更多的信息,你可以在这里阅读我们的邮政编码服务:

http://askgeo.com/database/UsZcta2010

你了解了Web API这里的文档:

http://askgeo.com/#web-api

对于这种类型的查询,GeoNames方法论存在根本性缺陷。如果您正在查找包含给定查询点的多边形,则需要包含多边形的地图,并且需要空间索引来提供快速查找。 GeoNames既没有。 AskGeo有两个。

+0

但是,如果我想从ZipCode - > Lat/Long,Geonames看起来不错。 – Walker 2012-11-21 18:12:09

+1

人口普查网址已更改。这看起来是正确的: https://www.census.gov/geo/reference/zctas.html – 2015-02-20 05:44:55

+1

我担心这仅限于美国。我猜这个世界上还有很多其他的国家。 – 2016-03-12 14:37:15

相关问题