zoukankan      html  css  js  c++  java
  • php用百度地图API进行逆地址解析

    <?php
    /**
     * 根据地理坐标获取国家、省份、城市,及周边数据类(利用百度Geocoding API实现)
     * 百度密钥获取方法:http://lbsyun.baidu.com/apiconsole/key?application=key(需要先注册百度开发者账号)
     * Date:    2015-07-30
     * Author:  fdipzone
     * Ver: 1.0
     *
     * Func:
     * Public  getAddressComponent 根据地址获取国家、省份、城市及周边数据
     * 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 getAddressComponent($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;
    
        }
    
        /**
         * 使用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;
    
        }
    
    }
    
    ?>
    

     使用

    <?php
    header("Content-type: text/html; charset=utf-8");
    header('Access-Control-Allow-Origin:*'); 
    require "Geocoding.class.php";//引入配置类
    $ak = '2q6OVS3LlFuZcoXGtXvqxAYq';//百度申请的秘钥,这里是错误的秘钥
    class Location
    {
    public $province;
    public $city;
    public $district;
    public $street;
    public $address;
    private static $_instance;
    public static function getInstance() 
    { 
    if(! (self::$_instance instanceof self) ) 
    { 
    self::$_instance = new self(); 
    } 
    return self::$_instance; 
    }
    private function __construct(){} 
    private function __clone(){}
    }
    function test_input($data)
    {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
    }
    
    //默认以GET方式传送
    $longitude = test_input($_GET["long"]);
    $latitude = test_input($_GET["lat"]);
    //$longitude=113.327782;
    //$latitude=23.137202;
    $result = Geocoding::getAddressComponent($ak, $longitude, $latitude, Geocoding::NO_POIS);
    $locat=Location::getInstance() ;
    
    $address=$result["result"]["addressComponent"];
    if($address["province"]!=$address["city"])
    {
    $location=$address["province"].$address["city"].$address["district"].$address["street"];
    }
    else
    {
    $location=$address["city"].$address["district"].$address["street"];	
    }
    $locat->province=$address["province"];
    $locat->city=$address["city"];
    $locat->district=$address["district"];
    $locat->street=$address["street"];
    $locat->address=$location;
    $json = json_encode($locat);
    echo "$json";//返回类似地址字符串也可根据自己需要返回地址
    
    ?>
    

      

     

     

    获取秘钥地址http://developer.baidu.com/map/

    参考链接http://my.oschina.net/xialeistudio/blog/366347

  • 相关阅读:
    java静态工厂实例
    有道云词典+浏览器开PDF文档=科研者外文阅读福利
    高并发实时性网络视频监控项目实战
    Linux环境下天气预报实现
    2019暑假内容复习
    《分布式与云计算》MOOC第三单元课后测试答案
    安装vivado 2016.1时出错
    N皇后问题的一种解法
    window10下基于anaconda安装tensorflow1.14(cpu版本)
    记一次简单的生产环境Mysql调优
  • 原文地址:https://www.cnblogs.com/wangboke/p/5579611.html
Copyright © 2011-2022 走看看