我想从用户当前位置(纬度,经度)获取邮政编码,我曾使用MKReverse Geocoder委托方法,但有时我无法获得基于纬度和广度的邮政编码信息。经度(有效值)。 MKReverseGeocoder还有其他选择吗? ZipCode数据库特定于国家,这就是我不想使用它们的原因。还有其他想法或线索吗?
由于
答案 0 :(得分:34)
考虑GeoNames web service。它是Creative Commons归属许可下的完整地理编码/反向地理编码套件。您可以下载他们的数据,也可以点击他们的网络服务。最棒的是,他们不需要任何API密钥或许可愚蠢 - 你只需点击他们的网络应用程序,然后就可以获得数据。
以下是一个示例:http://ws.geonames.org/findNearbyPostalCodesJSON?formatted=true&lat=36&lng=-79.08这将为您返回北卡罗来纳州教堂山区域的邮政编码的JSON对象。
这也是国际性的。这里是英格兰的西福德,唯一的区别是我发送的一对一对:http://ws.geonames.org/findNearbyPostalCodesJSON?formatted=true&lat=50.5&lng=0.08
然后你需要学习制作网页请求并解析JSON(如果你还没有抓住这些东西),那么你们已经完成了设置。
答案 1 :(得分:6)
这实际上是一个棘手的问题。使用像GeoNames这样的地理编码解决方案很可能会导致很多查询出现重大错误。这样做的原因是GeoNames通过在他们的数据库中查找最接近您的查询点的记录,然后返回他们在该点记录的邮政编码。当您的查询点位于其数据库中的记录之上时,这非常有用,但否则会导致错误。例如,如果他们最近的记录在几个街区之外的其他邮政编码中,您将得到错误的答案。
美国人口普查局创建了邮政编码地图:
https://www.census.gov/geo/reference/zctas.html
请在该页面上查看他们的说明。
我还参与了一个项目,该项目使用Census地图提供一个API,用于返回给定纬度和经度的邮政编码。它在:
我们提供可在您自己的服务器上运行的Web API和Java库。图书馆表现出色。由于我们的网站提供的信息不仅仅是邮政编码,您可以在这里阅读我们的邮政编码服务:
http://askgeo.com/database/UsZcta2010
您在此处阅读了有关Web API的文档:
GeoNames方法对于此类查询存在根本缺陷。如果要查找包含给定查询点的多边形,则需要包含多边形的地图,并且需要空间索引来提供快速查找。 GeoNames没有。 AskGeo都有。
答案 2 :(得分:2)
如果您有一个免费的数据库(可从该网站获得?只需搜索邮政编码数据库,您就会看到它)
然后您可以对附近的纬度/长度运行内部SQL查询测试。这样您就不必担心许可Web服务了。
那么你有三个选择。 SQL BETWEEN语句,斜边方程或Haversine。 Haversine是最好的,幸运的是它在其他地方的教程
答案 3 :(得分:1)
修改强>
我最近见过的其他几个选项:
http://developer.yahoo.com/geo/placefinder/guide/index.html
http://jamiethompson.co.uk/projects/2010/04/30/an-open-free-uk-postcode-geocoding-web-service/
http://www.postcodeanywhere.co.uk/geocoding-service/api.aspx
-
查看Google Maps API - Reverse Geocoding(仅在嵌入Google地图界面时有用)。
答案 4 :(得分:1)
示例代码:
从结果中获取Zipcode [1] .formatted_address
https://developers.google.com/maps/documentation/javascript/examples/geocoding-reverse