请自行到高德官网申请您的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);