Добавить километры к точке на карте - PullRequest
7 голосов
/ 19 апреля 2010

Доброе утро.

Я хотел бы знать, как добавить километры к точке карты (широта / долгота).

Например: город Ярагуа-ду-Сул находится в широте -26.462049, долгота -49.059448.Я хочу добавить 100 километров вверх, вниз и по бокам.Я хочу сделать квадрат и получить новые очки.

Как мне это сделать?

Я попробовал это сделать:

<?php
$distance = 100;
$earthRadius = 6371;
$lat1 = -26.4853239150483;
$lon1 = -49.075927734375;
$bearing = 0;

$lat2 = asin(sin($lat1) * cos($distance / $earthRadius) + cos($lat1) * sin($distance / $earthRadius) * cos($bearing));
$lon2 = $lon1 + atan2(sin($bearing) * sin($distance / $earthRadius) * cos($lat1), cos($distance / $earthRadius) - sin($lat1) * sin($lat2));

echo 'LAT: ' . $lat2 . '<br >';
echo 'LNG: ' . $lon2;
?>

Но он возвращает неправильные слова.Спасибо!

Большое спасибо.

Ответы [ 4 ]

7 голосов
/ 09 июня 2012

как уже было указано. Тригонометрические функции PHP принимают радианы в качестве параметров.

Преобразование параметров в

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

<?php
$distance = 100;
$earthRadius = 6371;
$lat1 = deg2rad(-26.4853239150483);
$lon1 = deg2rad(-49.075927734375);
$bearing = deg2rad(0);

$lat2 = asin(sin($lat1) * cos($distance / $earthRadius) + cos($lat1) * sin($distance / $earthRadius) * cos($bearing));
$lon2 = $lon1 + atan2(sin($bearing) * sin($distance / $earthRadius) * cos($lat1), cos($distance / $earthRadius) - sin($lat1) * sin($lat2));

echo 'LAT: ' . rad2deg($lat2) . '<br >';
echo 'LNG: ' . rad2deg($lon2);
?>
1 голос
/ 19 апреля 2010

ОБНОВЛЕНИЕ:

Тригонометрические функции PHP принимают радианы в качестве параметров, а не градусов, поэтому вам нужно использовать deg2rad () в качестве параметра:

sin(deg2rad($lat))

http://www.php.net/manual/en/function.deg2rad.php


Оригинальный ответ:

Действительно большая тема.

В зависимости от требуемой точности (и пройденных расстояний), вам, возможно, придется учитывать, что Земля не является идеальной сферой., но геоид (уплощенный эллипсоид).

http://en.wikipedia.org/wiki/Earth_radius

поможет вам начать это.

Картирование и проекция - две темы, на которые вам следует взглянутьтоже

еще одна ссылка из википедии на тему расстояний

http://en.wikipedia.org/wiki/Geographical_distance

1 голос
/ 19 апреля 2010

Большая тема. Вот несколько вступительных ссылок:

http://www.movable -type.co.uk / скрипты / latlong.html

http://jan.ucc.nau.edu/~cvm/latlongdist.html

0 голосов
/ 20 апреля 2010

Исходя из вашей новой информации, у меня есть два альтернативных подхода. (1) Google "PHP GIS". Вы найдете несколько интересных ресурсов. Может быть, один будет работать. (2) Если ваши предприятия идентифицированы по широте, то вам придется использовать (1) я думаю. Но есть ли «тупой» подход? Например, если каждое предприятие связано с городом, используйте простые координаты карты («K16») для определения городов. Или что-то более умное в коде, но это идея.

...