使用Nominatim进行简单的反向地理编码

ton*_*gil 5 openlayers openstreetmap reverse-geocoding nominatim

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

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

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

这个链接返回一个合理的响应,我使用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;
}

?>  
Run Code Online (Sandbox Code Playgroud)

任何更优雅的解决方案的建议?

注意:自2015年10月起,请求必须包含有效的电子邮件,以"提供足够的申请标识".

如果没有电子邮件,返回代码将不是xml或json格式,而是错误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";
Run Code Online (Sandbox Code Playgroud)

ton*_*nio 7

您可以以JSON格式请求nominatim,并传递回调名称,以便响应将是:callback(json).

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

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