1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > php 百度地图根据经纬度获取地址 使用百度地图api根据经纬度获取位置

php 百度地图根据经纬度获取地址 使用百度地图api根据经纬度获取位置

时间:2018-08-15 06:05:40

相关推荐

php 百度地图根据经纬度获取地址 使用百度地图api根据经纬度获取位置

由于做微信公众平台的时候需要根据经纬度获取地址,所以才有这个,本来没什么好写的,可是由于没做过php解析json对象,所以还是吃了点小亏,写下来记录一下

百度地图地址解析

在该例子中需要通过经纬度获取地址

api链接 http://api./geocoder/v2/?ak=百度应用&location=经度,纬度&output=json&pois=0;

不需要回调函数

通过该地址返回的json数据如下

{

status: 0,

result: {

location: {

lng: 112.99999999488,

lat: 35.999999889577

},

formatted_address: “山西省长治市长治县东师线”,

business: “”,

addressComponent: {

city: “长治市”,

country: “中国”,

direction: “”,

distance: “”,

district: “长治县”,

province: “山西省”,

street: “东师线”,

street_number: “”,

country_code: 0

},

poiRegions: [ ],

sematic_description: “”,

cityCode: 356

}

}

php解析json对象

我看了阮一峰的一篇文章 /blog//01/json_in_php.html

由于返回的是json文本,所以首先要将json文本转换为php数据结构,利用json_decode($json),

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));

经过上述转换,即可得到如下php对象

object(stdClass)#1 (5) {

["a"] => int(1)

["b"] => int(2)

["c"] => int(3)

["d"] => int(4)

["e"] => int(5)

}

所以获取其中对象的时候,可利用如下方式

$json->{'a'}

附上实现代码function getKm($lat1, $lng1, $lat2, $lng2)

{

if($lat1 == 0 && $lng1 == 0){

if($lat2 == 0 && $lng2 == 0){

return "0";

}else {

$url = "http://api./geocoder/v2/?ak=gGboNqlNjflXCNq0A6ewpSLB&location=" . $lat2 . "," . $lng2 . "&output=json&pois=0";

$json = file_get_contents($url);

$json = json_decode($json);

return $json->{'result'}->{'addressComponent'}->{'city'};

}

}else {

$dis = getKmnum($lat1,$lng1,$lat2,$lng2);

return $dis.'km';

}

}

同时附上经纬度计算距离的代码function getKmnum($lat1, $lng1, $lat2, $lng2)

{

$earthRadius = 6367000; //approximate radius of earth in meters

$lat1 = ($lat1 * pi()) / 180;

$lng1 = ($lng1 * pi()) / 180;

$lat2 = ($lat2 * pi()) / 180;

$lng2 = ($lng2 * pi()) / 180;

$calcLongitude = $lng2 - $lng1;

$calcLatitude = $lat2 - $lat1;

$stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2);

$stepTwo = 2 * asin(min(1, sqrt($stepOne)));

$calculatedDistance = $earthRadius * $stepTwo;

$dis = ceil(round($calculatedDistance) / 1000);

return $dis;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。