zoukankan      html  css  js  c++  java
  • 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
    }
    

    PHP代码

    <?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请求
      */
      protected function async($api,array $params)
      {
        $ch = curl_init($api.'?'.http_build_query($params));
        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']
      );
     }
    }
  • 相关阅读:
    20165314《网络对抗技术》week1 Exp0 Kali安装
    20165301 20165304 20165314《信息安全系统设计基础》实验五通讯协议设计
    2018-2019-1 20165314《信息安全系统设计基础》第九周学习总结
    2018-2019-1 20165301 20165304 20165314 实验四 外设驱动程序设计
    2018-2019-1 20165314《信息安全系统设计基础》第八周学习总结
    2018-2019-1 20165301 20165304 20165314 实验三 实时系统
    2018-2019-1 20165314 《信息安全系统设计基础》第七周学习总结
    2018-2019-1 20165301 20165304 20165314 实验二 固件程序设计
    2018-2019-1 20165314 《信息安全系统设计基础》第六周学习总结
    2018-2019-1 20165314《信息安全系统设计基础》第五周学习总结
  • 原文地址:https://www.cnblogs.com/xynetstudio/p/7457712.html
Copyright © 2011-2022 走看看