之前一直使用谷歌的逆地理編碼服務,多年來運行良好。但是谷歌畢竟是一家巨大的商業公司,所以我現在改用 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 西丽华昌大厦,西丽南路,松坪村,南山区,西丽街道,广东省,中国