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

  • 相关阅读:
    Hive 中parse_url的使用
    作为首席架构师,我是如何选择并落地架构方案的?
    漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)
    纸上得来终觉浅
    年薪50万的大数据分析师养成记【摘抄】
    如果有人问你数据库的原理,叫他看这篇文章(完)
    开源大数据引擎:Greenplum 数据库架构分析
    【阿里在线技术峰会】李金波:企业大数据平台仓库架构建设思路
    ETL Automation完整安装方法_(元数据存放在mysql数据库)
    js定时器 离开当前页面任然执行的问题
  • 原文地址:https://www.cnblogs.com/wangboke/p/5579611.html
Copyright © 2011-2022 走看看