zoukankan      html  css  js  c++  java
  • php根据地理坐标获取国家、省份、城市,及周边数据类

    功能:当App获取到用户的地理坐标时,可以根据坐标知道用户当前在那个国家、省份、城市,及周边有什么数据。

    原理:基于百度Geocoding API 实现,需要先注册百度开发者,然后申请百度AK(密钥) 


    Geocoding.class.PHP

    <?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;
    
        }
    
    }
    
    ?>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89



    demo.php

    <?php
    require "Geocoding.class.php";
    
    $ak = '这里填写你的百度AK';
    $longitude = 113.327782;
    $latitude = 23.137202;
    
    $result = Geocoding::getAddressComponent($ak, $longitude, $latitude, Geocoding::NO_POIS);
    
    echo '<pre>';
    print_r($result);
    echo '</pre>';
    ?>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13



    例子返回:

    Array
    (
        [status] => 0
        [result] => Array
            (
                [location] => Array
                    (
                        [lng] => 113.32778195925
                        [lat] => 23.137201991056
                    )
    
                [formatted_address] => 广东省广州市天河区体育西横街35号
                [business] => 天河城,体育中心,沙河
                [addressComponent] => Array
                    (
                        [city] => 广州市
                        [country] => 中国
                        [direction] => 附近
                        [distance] => 14
                        [district] => 天河区
                        [province] => 广东省
                        [street] => 体育西横街
                        [street_number] => 35号
                        [country_code] => 0
                    )
    
                [poiRegions] => Array
                    (
                    )
    
                [sematic_description] => 红盾大厦北58米
                [cityCode] => 257
            )
    
    )
  • 相关阅读:
    hdu 4027 Can you answer these queries?
    hdu 4041 Eliminate Witches!
    hdu 4036 Rolling Hongshu
    pku 2828 Buy Tickets
    hdu 4016 Magic Bitwise And Operation
    pku2886 Who Gets the Most Candies?(线段树+反素数打表)
    hdu 4039 The Social Network
    hdu 4023 Game
    苹果官方指南:Cocoa框架(2)(非原创)
    cocos2d 中 CCNode and CCAction
  • 原文地址:https://www.cnblogs.com/ZDPPU/p/6478418.html
Copyright © 2011-2022 走看看