本文作者:DurkBlue

php 通过坐标获取省市地区等数据

DurkBlue 2021-09-24 1940
php 通过坐标获取省市地区等数据摘要: 功能:当App获取到用户的地理坐标时,可以根据坐标知道用户当前在那个国家、省份、城市,及周边有什么数据。原理:基于百度Geocoding API 实现,需要先注册百度开发者,然后申...

功能:当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;

}

}?>

demo.php<?phprequire "Geocoding.class.php";$ak = '这里填写你的百度AK';$longitude = 113.327782;$latitude = 23.137202;$result = Geocoding::getAddressComponent($ak, $longitude, $latitude, Geocoding::NO_POIS);echo '

';

print_r($result);echo '';?>

例子返回: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

)

)


此篇文章由DurkBlue发布,转载请注明来处
文章投稿或转载声明

来源:DurkBlue版权归原作者所有,转载请保留出处。本站文章发布于 2021-09-24
温馨提示:文章内容系作者个人观点,不代表DurkBlue博客对其观点赞同或支持。

赞(0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享