【问题标题】:SIMPLE reverse geocoding using Nominatim使用 Nominatim 进行简单的反向地理编码
【发布时间】:2012-06-06 23:32:57
【问题描述】:

我正在使用 OpenLayers + OpenStreetMaps 开发在线地图应用程序。

我需要帮助在 javascript(或 php)中实现一个简单的反向地理编码函数,该函数接收纬度和经度并返回一个地址。

如果可能,我想与 Nominatim 合作。我不想使用 Google、Bing 或 CloudMade 或其他专有解决方案。

这个 link 返回一个合理的响应,我使用 simple_html_dom.php 来分解结果,但它是一个丑陋的解决方案。

<?php

include('simple_html_dom.php');

$url = "http://nominatim.openstreetmap.org/reverse?format=xml&lat=-23.56320001&lon=-46.66140002&zoom=27&addressdetails=1";
$html = file_get_html($url);
foreach ($html->find('road') as $element ) {
    echo $element;
}

?>  

有什么更优雅的解决方案的建议吗?

注意:自 2015 年 10 月起,请求必须包含 valid email,以便“提供您的应用程序的充分标识”。

如果没有邮件,返回码不会是 xml 或 json 格式,而是error 509 "Bandwidth Exceeded",请尝试使用 html_dom 库进行抓取。

$url = "http://nominatim.openstreetmap.org/reverse?email=myemail@myserver.com&format=xml&lat=-23.56320001&lon=-46.66140002&zoom=27&addressdetails=1";

【问题讨论】:

  • 我的第一个“真正”金徽章。对我来说,超过 10K 的浏览量反映了不可否认的相关性。谢了。

标签: openlayers openstreetmap reverse-geocoding nominatim


【解决方案1】:

您可以请求 JSON 格式的 nominatim,并传递一个回调名称,以便响应为:callback(json)

查看文档:http://wiki.openstreetmap.org/wiki/Nominatim

这是一个最小的使用示例:http://jsfiddle.net/GWL7A/14/

【讨论】:

    【解决方案2】:

    我已经运行tonio's solution 4 年了。虽然它实现得很好并且我推荐它(即使被批准为正确答案),但很明显答案是不完整的。

    根据查询的实现方式,您可能会遇到服务器问题,甚至可能导致拒绝服务。

    请注意,如果您按照他的回答建议使用社区 Nominatim 服务器,最佳做法是:

    1. 使用您确定的误差范围和/或
    2. 缓存经常性地理点
    3. 运行your own instance of Nominatim(公开可用,但 大型下载)

    【讨论】:

    • 是的,运行您自己的实例是个好主意……但它是巨大的。 :-)
    猜你喜欢
    • 2018-10-15
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 2019-01-01
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多