您当前的位置: 首页 >  php

漏刻有时

暂无认证

  • 2浏览

    0关注

    717博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

php基于百度地图封装的对象类实现计算地图上两点间的距离和地理编码

漏刻有时 发布时间:2020-12-08 09:12:18 ,浏览量:2

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

关注
打赏
1661217259
查看更多评论
立即登录/注册

微信扫码登录

0.0398s