欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php根据地理坐标获取国家、省份、城市,及周边数据类

程序员文章站 2022-04-21 11:21:26
...
功能:当App获取到用户的地理坐标时,可以根据坐标知道用户当前在那个国家、省份、城市,及周边有什么数据。

原理:基于百度Geocoding API 实现,需要先注册百度开发者,然后申请百度AK(密钥)
Geocoding.class.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
 */classGeocoding {// 百度Geocoding APIconst 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
     */publicstaticfunctiongetAddressComponent($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
     */privatestaticfunctiontoCurl($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)){
            returnfalse;
        }

        curl_close($ch);

        return$response;

    }

}

?>


demo.php

require"Geocoding.class.php";

$ak = '这里填写你的百度AK';
$longitude = 113.327782;
$latitude = 23.137202;

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

echo'
'
; print_r($result); echo'
'