当前位置:首页 > 技术文档 > 正文内容

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

admin11年前 (2015-07-18)技术文档1905

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

1
2
3
4
5
6
7
8
9
10
{
    address: "北京市海淀区西二旗北路",
    province: "北京市",
    city: "北京市",
    street: "西二旗北路",
    street_number: "",
    city_code: 131,
    lng: 116.3207676804,
    lat: 40.064084055578
}

核心类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?php
  
/**
 * @author xialei <xialeistudio@gmail.com>
 */
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<xialeistudio@gmail.com>
  * @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']
  );
 }
}

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


分享到:

扫描二维码推送至手机访问。

版权声明:本文由云河空间发布,如需转载请注明出处。

本文链接:http://yuyunhe.cn/index.php/post/80.html

分享给朋友:

“php利用百度地图API进行IP定位和GPS定位” 的相关文章

如何自己手工获取自己的Access Token

如何自己手工获取自己的Access Token

在使用WP2PCS前,你需要了解,WP2PCS目前只支持百度网盘,(将来将支持360网盘和腾讯微云,这要看它们的API什么时候开放, 且容易开发)是基于百度PCS的API开发的,和坊间流传的抓取百度网盘文件直链不同,WP2PCS从百度网盘获取文件的源(二进制流),是百度许可并鼓 励开发者使用的接...

php 判断手机访问

//手机来访 function is_mobile() {     $user_agent = $_SERVER['HTTP_USER_AGENT'];    &n...

php获取从百度搜索进入网站的关键词

<?php    function search_word_from() {     $referer = isset($_SERVER['HTTP_REFERER'])?...

Zend Studio 8打开utf-8文件出现乱码解决方法

Zend Studio 8打开utf-8文件出现乱码解决方法

今天安装了zend studio 8.0.1,运行了一个PHP程序项目(项目文件编码为utf-8),发现utf-8文件中的中文全部变成乱码了,后面终于经过寻找探索,找到了问题所 在:虽然你的项目是UTF-8编码文件,但是当通过zend studio工具运行打开时,是以工具里设定的GBK编码...

thinkphp获取URL参数

一般情况下URL中的参数就是通过GET方法获取,但是由于PATHINFO的特 殊性,URL地址最终需要被解析才能转换成GET参数,ThinkPHP对URL是按照一定的规则进行解析的,除非你使用了URL路由规则,如果你对 URL做了特别的定制,但是又不想使用URL路由,那么可以使用框架提供的URL...

phpcms v9更换模板的具体操作方法

phpcms v9更换模板的具体操作方法

这篇文章主要介绍了phpcms v9更换模板的具体操作方法,需要的朋友可以参考下分享一下Phpcms V9更换模板的具体操作方法先分享下大概的步骤:1、上传模版文件到服务器;2、在站点管理 里边【模板风格配置】选择新模板;3、设置不同模型对应模板;4、修改现有的栏目,匹配新模板;5、更新栏目缓存、系...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。