Рассчитать близость в php - PullRequest
       39

Рассчитать близость в php

0 голосов
/ 21 февраля 2011

Я пытаюсь написать функцию php, которая вычисляет близость между двумя точками, но я не могу заставить ее работать.

В настоящее время я использую функцию, найденную здесь: http://www.zipcodeworld.com/samples/distance.php.html

function distance($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 == "m") {
    return ($miles * 1.609344)/1000; 
} 
else if ($unit == "N") {
  return ($miles * 0.8684);
} 
else {
    return $miles;
  }
}

Мое приложение требует точности до метров, но независимо от того, что я делаю, я не получаю правильных результатов.

Я получаю координаты отсюда: http://itouchmap.com/latlong.html

Что я делаюнеправильно?Не могли бы вы помочь мне с этим?

Спасибо

Майк

Ответы [ 2 ]

3 голосов
/ 21 февраля 2011

Я написал этот небольшой класс некоторое время назад, но он должен помочь вам с лучшими вычислениями расстояния, чем метод в вашем вопросе: https://github.com/treffynnon/Geographic-Calculations-in-PHP

Чтобы завершить свой вопрос по вышеуказанной ссылке, будет:

$Geography = new Geography();
echo $Geography->getDistance($lat1, $lon1, $lat2, $lon2);

Даст расстояние в метрах, используя формулы Винсента для расчета расстояния.

Формулы Винсенти, использованные в моем классе, представляют собой PHP-порт функции javascript, доступной по адресу http://www.movable -type.co.uk / scripts / LatLongVincenty.html

0 голосов
/ 21 февраля 2011

Вот страница с подробной информацией об алгоритмах, доступных на примерах JS: http://www.movable -type.co.uk / scripts / latlong.html

...