请自行到高德官网申请您的key geocodes[0]-location); $startLatLng = array( "lat" = $latLng[1], "lng" = $latLng[0] ); for ($i=0; $i$length; $i++){ $url = urldecode("http://restapi.amap.com/v3/geocode/geo?key=您的keyaddress=".$par
geocodes[0]->location);
$startLatLng = array(
"lat" => $latLng[1],
"lng" => $latLng[0]
);
for ($i=0; $i<$length; $i++){
$url = urldecode("http://restapi.amap.com/v3/geocode/geo?key=您的key&address=".$param[$i]['address']);
$result = json_decode(get($url));
$latLng = explode(",",$result->geocodes[0]->location);
$endLatLng = array(
"lat" => $latLng[1],
"lng" => $latLng[0]
);
$distance = array( "distance"=>getDistance($startLatLng,$endLatLng),"unit"=>"m");
array_push($param[$i],$distance);
}
return $param;
}
$add = array(
array("address"=>"福建省厦门市集美区"),
array("address"=>"北京市海淀区上地十街10号")
);
print_r(calculateDistance("福建省厦门市集美区",$add));
/**
* 发送GET请求
* @param url
* @param param
* @return result
*/
function get($url, $param=array()){
if(!is_array($param)){
throw new Exception("参数必须为array");
}
$p='';
foreach($param as $key => $value){
$p=$p.$key.'='.$value.'&';
}
if(preg_match('/\?[\d\D]+/',$url)){//matched ?c
$p='&'.$p;
}else if(preg_match('/\?$/',$url)){//matched ?$
$p=$p;
}else{
$p='?'.$p;
}
$p=preg_replace('/&$/','',$p);
$url=$url.$p;
//echo $url;
$http =curl_init($url);
curl_setopt($http, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($http, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($http,CURLOPT_RETURNTRANSFER,1);
curl_setopt($http, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
curl_setopt($http, CURLOPT_RETURNTRANSFER,1);
curl_setopt($http, CURLOPT_HEADER,false);
$result=curl_exec($http);
curl_close($http);
return $result;
}
/**
* 计算两点之间距离
* @param start
* @param end
* @return 米
*/
function getDistance($startLatLng,$endLatLng){
if (is_array($startLatLng)&&is_array($endLatLng)){
$lat1 = (pi()/180)*$startLatLng['lat'];
$lat2 = (pi()/180)*$endLatLng['lat'];
$lng1 = (pi()/180)*$startLatLng['lng'];
$lng2 = (pi()/180)*$endLatLng['lng'];
//地球半径
$R = 6371;
//两点间的距离 km,如果想要米的话,结果*1000就可以了
$d = acos(sin($lat1)*sin($lat2)+cos($lat1)*cos($lat2)*cos($lng2-$lng1))*$R;
}else{
$d = 1;
}
return $d*1000;
}
/**
* 通过ip获取地址
* @param $ip
* @throws Exception
* @return $result
*/
function getAddressByIp($ip){
if (!filter_var($ip,FILTER_VALIDATE_IP)){
throw new Exception("IP无效");
}
// $url = "http://api.map.baidu.com/location/ip?ak=您的ak&coor=bd09ll&ip=".$ip;
$url = "http://restapi.amap.com/v3/ip?key=您的key&ip=".$ip;
$result = json_decode(get($url));
if ($result->status != 1){
throw new Exception("获取坐标失败");
}
$latLng_result = explode(";",$result->rectangle);
$latLng_array1 = explode(",",$latLng_result[0]);
$latLng_array2 = explode(",",$latLng_result[1]);
$lat = ($latLng_array1[1]+$latLng_array2[1])/2;
$lng = ($latLng_array1[0]+$latLng_array2[0])/2;
$url = "http://restapi.amap.com/v3/geocode/regeo?key=您的key&location=" .$lng.",".$lat. "&roadlevel=0";
$result = json_decode(get($url));
return $result->regeocode->formatted_address;
}
// echo getAddressByIp("120.41.85.225");
/**
* 通过GPS定位拿到具体位置,电脑只有IE、edge才有定位权限
* @param $latLng=array('lat'=>?,'lng'=>?)
* @return $result->result->formatted_address
*/
function getAddressByGPS($latLng)
{
// $url = "http://api.map.baidu.com/geocoder/v2/?location=" .$latLng['lat'].",".$latLng['lng']. "&ak=您的ak&output=json";
$url = "http://restapi.amap.com/v3/geocode/regeo?key=您的key&location=" .$latLng['lng'].",".$latLng['lat']. "&roadlevel=0";
$result = json_decode(get($url));
return $result->regeocode->formatted_address;
}
$latLng = array(
'lat'=>24.617404,
'lng'=>118.075912
);
// echo getAddressByGPS($latLng);
