我有代码可以找到两个经度和纬度值之间的距离。但是我想在公里,第一点的纬度和经度值给出时追踪第二点的经度和纬度值。
这是代码,我发现使用纬度和经度值找到两点之间的距离。
<?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>');
?>
但是,我需要从第一点的经度,纬度和距离中找到第二点的经度和纬度。
由于
答案 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,具体取决于纬度。