我正在使用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";
答案 0 :(得分:6)
您可以以JSON格式请求nominatim,并传递回调名称,以便响应为:callback(json)
。
查看文档:{{3}}
这是一个最小的使用示例:http://wiki.openstreetmap.org/wiki/Nominatim
答案 1 :(得分:1)
我已经运行了tonio's solution 4年了。虽然它很好地实现了,但我推荐它(即使已经批准为正确答案),但很明显答案是不完整的。
根据您的查询的实施方式,您可能会遇到可能导致拒绝服务的服务器问题。
请注意,如果您使用的是他的答案中提出的社区Nominatim服务器,最佳做法是: