Вычислить расстояние между двумя координатами
Я использую эту функцию ниже, чтобы вычислить разницу между двумя координатами. Через google maps сообщил, разница около 2-3. Но роль мне, возвращая результат 56.480188542761 Km.
Хотел бы знать, если есть что-то неправильно в функции, или если существует какой-то расчет будет сделано.
function distancia($lat1, $lon1, $lat2, $lon2, $unit) {
$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 {
return $miles;
}
}
// -12.971683, -38.460108 = bairro pernambues em salvador
// -12.981290, -38.465043 = shopping iguatemi em salvador
echo distancia(-12.971683, -38.460108, -12.981290, -38.981290, "k") . " Km<br />";
3 answers
Формула Haversine применяется в PHP
function distancia($lat1, $lon1, $lat2, $lon2) {
$lat1 = deg2rad($lat1);
$lat2 = deg2rad($lat2);
$lon1 = deg2rad($lon1);
$lon2 = deg2rad($lon2);
$dist = (6371 * acos( cos( $lat1 ) * cos( $lat2 ) * cos( $lon2 - $lon1 ) + sin( $lat1 ) * sin($lat2) ) );
$dist = number_format($dist, 2, '.', '');
return $dist;
}
echo distancia(-12.9813346,-38.4653612, -12.9741491,-38.4696483) . " Km<br />";
// 0.92 Km
, проверка Delta.
function distancia($lat1, $lon1, $lat2, $lon2) {
$lat1 = deg2rad($lat1);
$lat2 = deg2rad($lat2);
$lon1 = deg2rad($lon1);
$lon2 = deg2rad($lon2);
$latD = $lat2 - $lat1;
$lonD = $lon2 - $lon1;
$dist = 2 * asin(sqrt(pow(sin($latD / 2), 2) +
cos($lat1) * cos($lat2) * pow(sin($lonD / 2), 2)));
$dist = $dist * 6371;
return number_format($dist, 2, '.', '');
}
echo distancia(-12.9813346,-38.4653612, -12.9741491,-38.4696483) . " Km<br />";
// 0.92 Km
Следуя Haversine wikipedia
<?php
function distancia($lat1, $lon1, $lat2, $lon2) {
$lat = deg2rad($lat2-$lat1);
$lon = deg2rad($lon2-$lon1);
$t = sin($lat/2) * sin($lat/2) + cos(deg2rad(lat1)) * cos(deg2rad($lat2)) *sin(lon/2) * sin(lon/2);
$l = 2 * atan2(sqrt($t), sqrt(1-$t));
$result = 6371 * $l;
return $result;
}
echo distancia(-12.9813346,-38.4653612, -12.9741491,-38.4696483) . " Km";
?>
Результатом здесь было 0.798991145405 Km
Для вычисления расстояния между двумя точками,используйте следующую формулу:
Квадратный Корень: ( Xa - Xb )^2 + ( Ya - Yb )^2
, Например
12, 14
координаты A.
4, 3
координаты B.
Первая координата равна X, а вторая Y,таким образом:
`(Xa-Xb)^2+(Ya-Yb)^2` = `(12-4)^2+(14-3)^2`
= `(8)^2+(11)^2`
= `(8)^2+(11)^2`
= `64+121`
Расстояние между A и B-это квадратный корень 185 или около 13,6
, Прочитайте http://www.brasilescola.com/matematica/distancia-entre-dois-pontos.htm