PHP實現高德地圖的地理/逆地理編碼api

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

若是geoip獲取地理位置能夠知足你的需求可跳轉:juejin.im/post/5d0c7e…laravel

產品介紹

地理編碼/逆地理編碼 API 是經過 HTTP/HTTPS 協議訪問遠程服務的接口,提供結構化地址與經緯度之間的相互轉化的能力。web

結構化地址的定義: 首先,地址確定是一串字符,內含國家、省份、城市、區縣、城鎮、鄉村、街道、門牌號碼、屋邨、大廈等建築物名稱。按照由大區域名稱到小區域名稱組合在一塊兒的字符。一個有效的地址應該是獨一無二的。注意:針對大陸、港、澳地區的地理編碼轉換時能夠將國家信息選擇性的忽略,但省、市、城鎮等級別的地址構成是不能忽略的。json

適用場景

  • 地理編碼:將詳細的結構化地址轉換爲高德經緯度座標。且支持對地標性名勝景區、建築物名稱解析爲高德經緯度座標。
    結構化地址舉例:北京市朝陽區阜通東大街6號轉換後經緯度:116.480881,39.989410
    地標性建築舉例:天安門轉換後經緯度:116.397499,39.908722
  • 逆地理編碼:將經緯度轉換爲詳細結構化的地址,且返回附近周邊的POI、AOI信息。
    例如:116.480881,39.989410 轉換地址描述後:北京市朝陽區阜通東大街6號

使用說明

第一步,申請Web服務API類型Keyapi

第二步,參考接口參數文檔發起HTTP/HTTPS請求,第一步申請的 Key 需做爲必填參數一同發送;bash

第三步,接收請求返回的數據(JSON或XML格式),參考返回參數文檔解析數據。app

如無特殊聲明,接口的輸入參數和輸出數據編碼所有統一爲 UTF-8 編碼方式。框架

parameters
表明的參數包括必填參數和可選參數。全部參數均使用和號字符(&)進行分隔。

逆地理編碼API服務地址curl

https://restapi.amap.com/v3/geocode/geo?parameters複製代碼

address 是須要獲取座標的結構化地址,output(XML)用於指定返回數據的格式,Key是用戶請求數據的身份標識。ide

city爲指定查詢的城市(爲可選參數)post

逆地理編碼API服務地址

https://restapi.amap.com/v3/geocode/regeo?parameters複製代碼

location(116.310003,39.991957) 是所須要轉換的座標點經緯度,radius(1000)爲返回的附近POI的範圍,單位:米,extensions(all)爲返回的數據內容,output(XML)用於指定返回數據的格式,Key 是高德Web服務 Key。

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

/**
     * 將詳細的結構化地址轉換爲高德經緯度座標-高德地圖-地理編碼
     * @param string $address 填寫結構化地址信息:省份+城市+區縣+城鎮+鄉村+街道+門牌號碼
     * @param string $city 查詢城市,可選:城市中文、中文全拼、citycode、adcode
     * @return array
     */
    public function geo($address = '', $city = '北京')
    {
        $key = config('app.amap_key');
        /**
         * url:https://restapi.amap.com/v3/geocode/geo?address=北京市朝陽區阜通東大街6號&output=XML&key=<用戶的key>
         * output(XML/JSON)用於指定返回數據的格式
         */
        $url = "https://restapi.amap.com/v3/geocode/geo?output=JSON&key={$key}&address={$address}&city={$city}";

        // 執行請求
        $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;
    }

    /**
     * 根據經緯度獲取地理位置-高德地圖-逆地理編碼
     * @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文檔見:lbs.amap.com/api/webserv…

純原創,但願能夠對你們有幫助,文章會不斷更新,若有疑問,歡迎評論

相關文章
相關標籤/搜索