北京海思通科技有限责任公司
业务:haisitong@163.com
技术:470942293@qq.com
网址:http://www.haisitong.net/
QQ: 2223793800 470942293
可以直接进入百度地图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") //返回街道号码