我正在使用 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;
}
?>
有什么更优雅的解决方案的建议吗?
注意:自 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";