Вычислить расстояние между двумя координатами



Я использую эту функцию ниже, чтобы вычислить разницу между двумя координатами. Через 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 />";
Author: Rafael Soufraz, 2014-07-04

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
 9
Author: Marcelo Aymone, 2014-07-04 15:36:24

Следуя 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

 2
Author: ederwander, 2014-07-04 16:51:59

Для вычисления расстояния между двумя точками,используйте следующую формулу:

Квадратный Корень: ( 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

 0
Author: Weslley C X Sardinha, 2014-07-04 15:03:57