php地图定位,php利用百度地图API进行IP定位和GPS定位

最近在做一个手机端的webapp地图应用,而核心内容当然是定位了,但是定位的话有几种方式,IP定位,GPS定位,基站定位(这个貌似webapp用不了), 那么剩下核心的gps定位和ip定位了,我们知道,html5有定位API,但是该API拿到的GPS数据是硬件坐标,无法直接显示在地图上。 后来上百度LBS云看到有地图IP定位API和GPS坐标转换API,地址:http://developer.baidu.com/map/百度地图API的调用需要申请KEY,这里就不具体介绍了,直接贴上本人写了两个关键方法,为了方便前台调用,返回数据采用以下格式

{

address: "北京市海淀区西二旗北路",

province: "北京市",

city: "北京市",

street: "西二旗北路",

street_number: "",

city_code: 131,

lng: 116.3207676804,

lat: 40.064084055578

}

核心类

/**

* @author xialei 

*/

class map

{

private static $_instance;

const REQ_GET = 1;

const REQ_POST = 2;

/**

* 单例模式

* @return map

*/

public static function instance()

{

if (!self::$_instance instanceof self)

{

self::$_instance = new self;

}

return self::$_instance;

}

/**

* 执行CURL请求

* @author: xialei

* @param $url

* @param array $params

* @param bool $encode

* @param int $method

* @return mixed

*/

private function async($url, $params = array(), $encode = true, $method = self::REQ_GET)

{

$ch = curl_init();

if ($method == self::REQ_GET)

{

$url = $url . '?' . http_build_query($params);

$url = $encode ? $url : urldecode($url);

curl_setopt($ch, CURLOPT_URL, $url);

}

else

{

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

}

curl_setopt($ch, CURLOPT_REFERER, '百度地图referer');

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$resp = curl_exec($ch);

curl_close($ch);

return $resp;

}

/**

* ip定位

* @param string $ip

* @return array

* @throws Exception

*/

public function locationByIP($ip)

{

//检查是否合法IP

if (!filter_var($ip, FILTER_VALIDATE_IP))

{

throw new Exception('ip地址不合法');

}

$params = array(

'ak' => '百度地图API KEY',

'ip' => $ip,

'coor' => 'bd09ll'//百度地图GPS坐标

);

$api = 'http://api.map.baidu.com/location/ip';

$resp = $this->async($api, $params);

$data = json_decode($resp, true);

//有错误

if ($data['status'] != 0)

{

throw new Exception($data['message']);

}

//返回地址信息

return array(

'address' => $data['content']['address'],

'province' => $data['content']['address_detail']['province'],

'city' => $data['content']['address_detail']['city'],

'district' => $data['content']['address_detail']['district'],

'street' => $data['content']['address_detail']['street'],

'street_number' => $data['content']['address_detail']['street_number'],

'city_code' => $data['content']['address_detail']['city_code'],

'lng' => $data['content']['point']['x'],

'lat' => $data['content']['point']['y']

);

}

/**

* GPS定位

* @param $lng

* @param $lat

* @return array

* @throws Exception

*/

public function locationByGPS($lng, $lat)

{

$params = array(

'coordtype' => 'wgs84ll',

'location' => $lat . ',' . $lng,

'ak' => '百度地图API KEY',

'output' => 'json',

'pois' => 0

);

$resp = $this->async('http://api.map.baidu.com/geocoder/v2/', $params, false);

$data = json_decode($resp, true);

if ($data['status'] != 0)

{

throw new Exception($data['message']);

}

return array(

'address' => $data['result']['formatted_address'],

'province' => $data['result']['addressComponent']['province'],

'city' => $data['result']['addressComponent']['city'],

'street' => $data['result']['addressComponent']['street'],

'street_number' => $data['result']['addressComponent']['street_number'],

'city_code'=>$data['result']['cityCode'],

'lng'=>$data['result']['location']['lng'],

'lat'=>$data['result']['location']['lat']

);

}

}

调用方法就不说了。稍微看一下源代码就可以知道的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值