之前一直使用谷歌的逆地理編碼服務,多年來運行良好。但是谷歌畢竟是一家巨大的商業公司,所以我現在改用 Nominatim 。
Nominatim(來自拉丁語,“按名稱”)是一個通過名稱和地址搜索開放街圖數據,根據開放街圖點來生成合成地址(逆地理編碼)的工具。
<?php
header("Access-Control-Allow-Origin: *");
header('Content-type: text/json');
header("Cache-Control: no-cache, must-revalidate");
$lat=$_POST["lat"];
$lng=$_POST["lng"];
$lang=$_POST["lang"];
$url = "https://nominatim.openstreetmap.org/reverse?format=geojson&lat=".$lat."&lon=".$lng."&accept-language=".$lang;
$ch = curl_init();
//set your own agent name
$agent = 'location/0.2(ft.shaman.eu.org)';
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,20);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
$content = curl_exec($ch);
curl_close($ch);
$content = json_decode($content);
$resultArray = array();
foreach($content->features[0]->properties->address as $key => $value) {
//remove country_code and postcode
if ($key=='country_code' or $key=='postcode'){
}else{
array_push($resultArray,$value);
}
}
echo implode(",",$resultArray);
?>
curl -d 'lat=22.57776&lng=113.94849&lang=zh-TW' https://your.api.domain/api.php
西丽华昌大厦,西丽南路,松坪村,南山区,西丽街道,广东省,中国