封装对象
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 !