封装对象
class GeoHelper
{
/*
* @param int $lat1
* @param int $lon1
* @param int $lat2
* @param int $lon2
* @param string $unit
* @return
*/
public function distance($lon1, $lat1, $lon2, $lat2, $unit = "K")
{
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad
($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);
if ($unit == "K") {
return ($miles * 1.609344);
} else
if ($unit == "N") {
return ($miles * 0.8684);
} else { //mi
return $miles;
}
}
/**
*地理编码
* @param string $address
* @param string $apikey
* @return array [1]:lat [0]:lng
*/
public function getLatLng($address, $apikey)
{
$find = array("\\n", "\\r", " ");
$replace = array("", "", "+");
$address = str_replace($find, $replace, $address);
$url = 'http://api.map.baidu.com/geocoding/v3/?address=' . $address . '&ak=' . $apikey . '&output=json';
$res = json_decode(file_get_contents($url), true);
//var_dump($res);
$coordinates = [$res["result"]["location"]["lng"], $res["result"]["location"]["lat"]];
if (!empty($coordinates)) {
return $coordinates;
} else {
return "";
}
}
}
调用对象
$obj = new GeoHelper();
$str = "宁波市鄞州区泰康中路558号";
$ak = "F552bedbee2ec8fa6bae7b7a0**";
$b = $obj->getLatLng($str, $ak);
var_dump($b);
$c = $obj->distance(121.554586, 29.813444, 121.554649, 29.81231, "K");
echo number_format($c, 2) . "千米";
Done !