寻找经度和;具有给定距离的第一点的另一点的纬度。

时间:2014-05-06 08:32:26

标签: php google-maps gps

我有代码可以找到两个经度和纬度值之间的距离。但是我想在公里,第一点的纬度和经度值给出时追踪第二点的经度和纬度值。

这是代码,我发现使用纬度和经度值找到两点之间的距离。

<?php
    function getLatLong($address) {
        $address = str_replace(' ', '+', $address);
        $url = 'http://maps.googleapis.com/maps/api/geocode/json?address='.$address.'&sensor=false';
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $geoloc = curl_exec($ch);
        $json = json_decode($geoloc);

        return array($json->results[0]->geometry->location->lat, $json->results[0]->geometry->location->lng);
    }

    $address = getLatLong('Guildford');
    $address = getLatLong('BH15 2BT');
    $address = getLatLong('10 Downing Street, London');

    function Haversine($start, $finish) {
        $theta = $start[1] - $finish[1];

        $distance = (sin(deg2rad($start[0])) * sin(deg2rad($finish[0]))) + (cos(deg2rad($start[0])) * cos(deg2rad($finish[0])) * cos(deg2rad($theta))); 
        $distance = acos($distance); 
        $distance = rad2deg($distance); 
        $distance = $distance * 60 * 1.1515;

        return round($distance, 2);
    }

    $start = getLatLong('Guildford');
    $finish = getLatLong('BH15 2BT'); 
    $distance = Haversine($start, $finish);

    print('<p>The distance between ['.$start[0].', '.$start[1].'] and ['.$finish[0].', '.$finish[1].'] is '.$distance.' miles ('.($distance * 1.609344).' km).</p>');
?>

但是,我需要从第一点的经度,纬度和距离中找到第二点的经度和纬度。

由于

1 个答案:

答案 0 :(得分:0)

This webpage对这类事情非常有用。

如果你去那里,你会发现新点的纬度由下式给出:

asin( sin(φ1)*cos(d/R) + cos(φ1)*sin(d/R)*cos(θ) )

以及新点的经度由下式给出:

λ1 + atan2( sin(θ)*sin(d/R)*cos(φ1), cos(d/R)−sin(φ1)*sin(φ2) )

其中φ1是旧点的纬度,φ2是新点的纬度,λ1是旧点的经度,θ是轴承(以弧度表示,从北向顺时针方向),d是行进距离,R是地球的半径。旧点我指的是第一点,即你知道坐标的那一点。

如果你不知道地球半径,你可以使用它的平均半径:6371000m(注意单位)或compute an approximation,具体取决于纬度。