百度地图应用开发
1、申请百度开发者
创建地图应用,获取AK:
12
2、写一个php类,可以通过经纬度、IP地址或名称来进行定位
<?php
/**
* 根据地理坐标获取国家、省份、城市,及周边数据类(利用百度Geocoding API实现)
* 百度密钥获取方法:http://lbsyun.baidu.com/apiconsole/key?application=key(需要先注册百度开发者账号)
*
* Func:
* Public locationByGPS 根据GPS地址获取国家、省份、城市及周边数据
* Public locationByIP 根据IP地址获取国家、省份、城市及周边数据
* Public locationByNAME 根据地址名称获取国家、省份、城市及周边数据
* 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 locationByGPS($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;
}
/**
* 根据名称获取国家、省份、城市及周边数据
* @param String $ak 百度ak(密钥)
* @param String $name 地址名称
* @param Int $pois 是否显示周边数据
* @return Array
*/
public static function locationByNAME($ak, $name, $pois=self::NO_POIS){
$param = array(
'ak' => $ak,
'address' => str_replace(' ','+',$name),
'pois' => $pois,
'output' => 'json'
);
// 请求百度api
$response = self::toCurl(self::API, $param);
$result = array();
if($response){
$result = json_decode($response, true);
}
return $result;
}
/**
* 根据IP地址获取国家、省份、城市及周边数据
* @param String $ak 百度ak(密钥)
* @param String $ip IP地址
* @param Int $pois 是否显示周边数据
* @return Array
*/
public function locationByIP($ak,$ip, $pois=self::NO_POIS)
{
//检查是否合法IP
if (!filter_var($ip, FILTER_VALIDATE_IP))
{
throw new Exception('ip地址不合法');
}
$param = array(
'ak' => $ak,
'ip' => $ip,
'pois' => $pois,
'coor' => 'bd09ll'//百度地图GPS坐标
);
$api = 'http://api.map.baidu.com/location/ip';
// 请求百度api
$response = self::toCurl($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;
}
}
?>
3、调用类库显示
比如用ip地址查询位置
<?php
require "Geocoding.class.php";
$ak="你的百度AK值";
$mip="61.140.99.33";
$resultip = Geocoding::locationByIP($ak,$ip);
echo '<pre>';
print_r($resultip);
echo '</pre>';
?>
输出结果:
评论:1