php 利用百度地图进行定位ip gps

//显示效果
{
    address"北京市海淀区西二旗北路",
    province"北京市",
    city"北京市",
    street"西二旗北路",
    street_number"",
    city_code131,
    lng116.3207676804,//经度
    lat40.064084055578 //纬度
}

//地图类
<?php /** * @author xialei <xialeistudio@gmail.com> */class mapprivate static $_instance;  const REQ_GET = 1const 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']  ); }}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值