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)
您可以以JSON格式请求nominatim,并传递回调名称,以便响应将是:callback(json).
查看文档:http://wiki.openstreetmap.org/wiki/Nominatim
这是一个最小的使用示例:http://jsfiddle.net/GWL7A/14/