php根據地理座標獲取國家、省份、城市,及周邊資料類

傲雪星楓發表於2015-07-31

功能:當App獲取到使用者的地理座標時,可以根據座標知道使用者當前在那個國家、省份、城市,及周邊有什麼資料。

原理:基於百度Geocoding API 實現,需要先註冊百度開發者,然後申請百度AK(金鑰)


Geocoding.class.php

<?php
/**
 * 根據地理座標獲取國家、省份、城市,及周邊資料類(利用百度Geocoding API實現)
 * 百度金鑰獲取方法:http://lbsyun.baidu.com/apiconsole/key?application=key(需要先註冊百度開發者賬號)
 * Date:    2015-07-30
 * Author:  fdipzone
 * Ver: 1.0
 *
 * Func:
 * Public  getAddressComponent 根據地址獲取國家、省份、城市及周邊資料
 * Private toCurl              使用curl呼叫百度Geocoding API
 */

class Geocoding {

    // 百度Geocoding API
    const API = 'http://api.map.baidu.com/geocoder/v2/';

    // 不顯示周邊資料
    const NO_POIS = 0;

    // 顯示周邊資料
    const POIS = 1; 

    /**
     * 根據地址獲取國家、省份、城市及周邊資料
     * @param  String  $ak        百度ak(金鑰)
     * @param  Decimal $longitude 經度
     * @param  Decimal $latitude  緯度
     * @param  Int     $pois      是否顯示周邊資料
     * @return Array
     */
    public static function getAddressComponent($ak, $longitude, $latitude, $pois=self::NO_POIS){

        $param = array(
                'ak' => $ak,
                'location' => implode(',', array($latitude, $longitude)),
                'pois' => $pois,
                'output' => 'json'
        );

        // 請求百度api
        $response = self::toCurl(self::API, $param);

        $result = array();

        if($response){
            $result = json_decode($response, true);
        }

        return $result;

    }

    /**
     * 使用curl呼叫百度Geocoding API
     * @param  String $url    請求的地址
     * @param  Array  $param  請求的引數
     * @return JSON
     */
    private static function toCurl($url, $param=array()){

        $ch = curl_init();

        if(substr($url,0,5)=='https'){
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳過證照檢查
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  // 從證照中檢查SSL加密演算法是否存在
        }

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param));

        $response = curl_exec($ch);

        if($error=curl_error($ch)){
            return false;
        }

        curl_close($ch);

        return $response;

    }

}

?>



demo.php

<?php
require "Geocoding.class.php";

$ak = '這裡填寫你的百度AK';
$longitude = 113.327782;
$latitude = 23.137202;

$result = Geocoding::getAddressComponent($ak, $longitude, $latitude, Geocoding::NO_POIS);

echo '<pre>';
print_r($result);
echo '</pre>';
?>



例子返回:

Array
(
    [status] => 0
    [result] => Array
        (
            [location] => Array
                (
                    [lng] => 113.32778195925
                    [lat] => 23.137201991056
                )

            [formatted_address] => 廣東省廣州市天河區體育西橫街35號
            [business] => 天河城,體育中心,沙河
            [addressComponent] => Array
                (
                    [city] => 廣州市
                    [country] => 中國
                    [direction] => 附近
                    [distance] => 14
                    [district] => 天河區
                    [province] => 廣東省
                    [street] => 體育西橫街
                    [street_number] => 35號
                    [country_code] => 0
                )

            [poiRegions] => Array
                (
                )

            [sematic_description] => 紅盾大廈北58米
            [cityCode] => 257
        )

)



原始碼下載地址:點選檢視

相關文章