主页 > 其他 > 百度地图应用开发

百度地图应用开发

2018年10月21日 百度地图应用开发有1条评论 阅读: 12,657 次

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>';
?>

输出结果:

应用示例:
http://iytc.net/tools/map.php

评论:1

  1. LsevenTT站群哥 回复
    2018年11月15日 于 上午1:06

    Array
    (
    [status] => 220
    [message] => APP Referer校验失败
    )

LsevenTT站群哥进行回复 取消回复

新用户的评论需审核后才会显示;

电子邮件地址不会被公开;
必填项已用*标注