1. 程式人生 > >PHP根據經緯度獲取地理位置-高德api

PHP根據經緯度獲取地理位置-高德api

本次使用的高德地圖web服務端api中的逆地理編碼

逆地理編碼:將經緯度轉換為詳細結構化的地址,且返回附近周邊的POI、AOI資訊。
例如:116.480881,39.989410 轉換地址描述後:北京市朝陽區阜通東大街6號

逆地理編碼API服務地址

https://restapi.amap.com/v3/geocode/regeo?parameters

parameters代表的引數包括必填引數和可選引數。所有引數均使用和號字元(&)進行分隔。下面的列表枚舉了這些引數及其使用規則。

location(116.310003,39.991957) 是所需要轉換的座標點經緯度,radius(1000)為返回的附近POI的範圍,單位:米,extensions(all)為返回的資料內容,output(XML)用於指定返回資料的格式,Key 是高德Web服務 Key。詳細可以參考上方的請求引數說明。

第一步,申請Web服務API型別Key

第二步,參考介面引數文件發起HTTP/HTTPS請求,第一步申請的 Key 需作為必填引數一同傳送;

第三步,接收請求返回的資料(JSON或XML格式),參考返回引數文件解析資料。

如無特殊宣告,介面的輸入引數和輸出資料編碼全部統一為 UTF-8 編碼方式。

本次DEMO在laravel框架中實現(其他框架均可用相同方式實現)

    /**
     * 根據經緯度獲取地理位置-高德地圖
     * @param string $lon 經度
     * @param string $lat 緯度
     * @return array
     */
    public function regeo($lon, $lat)
    {
        // Key 是高德Web服務 Key。詳細可以參考上方的請求引數說明。
        $key = config('app.amap_key');
        // location(116.310003,39.991957) 是所需要轉換的座標點經緯度,經度在前,緯度在後,經緯度間以“,”分割
        $location = $lon . "," . $lat;
        /**
         * url:https://restapi.amap.com/v3/geocode/regeo?output=xml&location=116.310003,39.991957&key=<使用者的key>&radius=1000&extensions=all
         * radius(1000)為返回的附近POI的範圍,單位:米
         * extensions 引數預設取值是 base,也就是返回基本地址資訊
         * extensions 引數取值為 all 時會返回基本地址資訊、附近 POI 內容、道路資訊以及道路交叉口資訊。
         * output(XML/JSON)用於指定返回資料的格式
         */
        $url = "https://restapi.amap.com/v3/geocode/regeo?output=JSON&location={$location}&key={$key}&radius=1000&extensions=base";

        // 執行請求
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_URL, $url);
        $data = curl_exec($ch);
        curl_close($ch);
        $result = json_decode($data, true);

        return $result;
    }

需要傳遞經緯度來獲取當前的地理位置,詳細見程式碼註釋

如還有問題,具體api文件見:https://lbs.amap.com/api/webservice/guide/api/georegeo/

純原創,希望可以對大家有幫助,文章會不斷更新,如有疑問,歡迎評論