服务电话:13693293278

客服咨询QQ:470942293

 
网站首页
公司介绍
付款方式
联系我们
Logo说明
合作伙伴
企业型网站建设
商务型网站建设
Flash型网站建设
定制型网站建设
OA系统开发
ERP系统开发
MIS系统开发
MES系统开发
移动开发Android
移动开发iOS
微信二次开发
网站维护
建站流程
功能模块
程序语言
静态生成
域名选择
网站上传
网站备案
网站维护
最新动态
行业资讯
Python
ThinkPHP
jQuery
PHP
Div+CSS
MySQL
Oracle

技术文章

Python
ThinkPHP
jQuery
PHP
Div+CSS
MySQL
Oracle

北京海思通科技有限责任公司
业务:haisitong@163.com
技术:470942293@qq.com
网址:http://www.haisitong.net/
QQ: 2223793800 470942293

PHP根据百度地图API的经纬度返回地址信息

发布日期:2020-04-21 16:02:36

可以直接进入百度地图api,查看效果。
地址:http://developer.baidu.com/map/index.php?title=webapi/guide/webservice-geocoding   这里有详细的介绍。

如果只是为了获取经纬度对应的地址信息,就直接使用下面的函数完成即可。

1.首先给出一个自己编写的php读取远程url内容的函数:
function geturlcontent($url)
{
if (function_exists('file_get_contents')) {
$file_content = @file_get_contents($url);
} elseif (ini_get('allow_url_fopen') && ($file = @fopen($url, 'rb'))){
$i = 0;
while (!feof($file) && $i++ < 1000) {
$file_content .= strtolower(fread($file, 4096));
}
fclose($file);
} elseif (function_exists('curl_init')) {
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl_handle, CURLOPT_FAILONERROR,1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Trackback Spam Check'); //引用垃圾邮件检查
$file_content = curl_exec($curl_handle);
curl_close($curl_handle);
} else {
$file_content = '';
}
return $file_content;
}
//这个函数可以直接返回一个远程url地址中的显示在浏览器中的内容,下面的这个函数要用到。

2.其次是编写获取地址信息的函数:
function get_gps_address($lat,$lng,$type)
{
$url="http://api.map.baidu.com/geocoder/v2/?ak=se0o5ZCif8WBlePtDwnpOmfL&callback=info&location=".$lat.",".$lng."&output=json&pois=0";
$result=geturlcontent($url);//返回的是百度给出的json字符串
$result=substr($result,11);//去除生成json字符串的左边 info&&info(  让json字符串逐渐规范
$result=substr($result,0,strlen($result)-1); //去除生成json字符串最右边的 ) 让json字符串规范
$obj=json_decode($result);//转换成json格式对象
return $obj->{'result'}->{'addressComponent'}->{$type}; //这里的result  addressComponent是百度api返回的json字符串给出的固定字符串,不能修改
}

$url="http://api.map.baidu.com/geocoder/v2/?ak=se0o5ZCif8WBlePtDwnpOmfL&callback=info&location=".$lat.",".$lng."&output=json&pois=0";

函数中的$url地址,是源于百度地图api。

地址中的ak是百度地图api中注册生成的,pois是用来控制是否输出附近相关信息设置0不输出,设置为1就输出,这里不用就设置为0
如果给$url中的$lat和$lng传递具体经纬度地址:
http://api.map.baidu.com/geocoder/v2/?ak=se0o5ZCif8WBlePtDwnpOmfL&callback=info&location=40.232709033466,116.22945303887&output=json&pois=0


直接在浏览器访问这个地址输出数据为:
info&&info({"status":0,"result":{"location":{"lng":116.22945303887,"lat":40.232709033466},"formatted_address":"北京市昌平区西关北路","business":"昌平县城","addressComponent":{"city":"北京市","country":"中国","direction":"","distance":"","district":"昌平区","province":"北京市","street":"西关北路","street_number":"","country_code":0},"poiRegions":[{"direction_desc":"u5185","name":"u897fu73afu91cc"}],"sematic_description":"西环里内,城关小学西南190米","cityCode":131}})

然后处理这个字符串,也就是处理函数get_gps_address中的$result变量。

调用函数时,前两个参数意思很明确,$type用来控制返回地址信息中哪个信息,具体如下:
//国家  country
//省份  province
//城市  city
//地区  district
//街道  street
//街道号码  street_number

比如:
get_gps_address(40.232709033466,116.22945303887,"country") //返回国家
get_gps_address(40.232709033466,116.22945303887,"province") //返回省份
get_gps_address(40.232709033466,116.22945303887,"city") //返回城市
get_gps_address(40.232709033466,116.22945303887,"district") //返回地区
get_gps_address(40.232709033466,116.22945303887,"street") //返回街道
get_gps_address(40.232709033466,116.22945303887,"city") //返回城市
get_gps_address(40.232709033466,116.22945303887,"street_number") //返回街道号码

Copyright@(2010-2024) 北京海思通科技有限责任公司 客服邮箱:haisitong#163.com(请将#换成@)
京ICP备19051925号