您的位置:首页 > 编程语言 > PHP开发

php用百度地图API进行逆地址解析

2016-06-13 09:53 603 查看
<?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;

}

}

?>


 使用

<?php
header("Content-type: text/html; charset=utf-8");
header('Access-Control-Allow-Origin:*');
require "Geocoding.class.php";//引入配置类
$ak = '2q6OVS3LlFuZcoXGtXvqxAYq';//百度申请的秘钥,这里是错误的秘钥
class Location
{
public $province;
public $city;
public $district;
public $street;
public $address;
private static $_instance;
public static function getInstance()
{
if(! (self::$_instance instanceof self) )
{
self::$_instance = new self();
}
return self::$_instance;
}
private function __construct(){}
private function __clone(){}
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

//默认以GET方式传送
$longitude = test_input($_GET["long"]);
$latitude = test_input($_GET["lat"]);
//$longitude=113.327782;
//$latitude=23.137202;
$result = Geocoding::getAddressComponent($ak, $longitude, $latitude, Geocoding::NO_POIS);
$locat=Location::getInstance() ;

$address=$result["result"]["addressComponent"];
if($address["province"]!=$address["city"])
{
$location=$address["province"].$address["city"].$address["district"].$address["street"];
}
else
{
$location=$address["city"].$address["district"].$address["street"];
}
$locat->province=$address["province"];
$locat->city=$address["city"];
$locat->district=$address["district"];
$locat->street=$address["street"];
$locat->address=$location;
$json = json_encode($locat);
echo "$json";//返回类似地址字符串也可根据自己需要返回地址

?>


  

 

获取秘钥地址http://developer.baidu.com/map/

参考链接http://my.oschina.net/xialeistudio/blog/366347
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: