Друзья, добрый день.
С помощью php и API Яндекс-карт создаю приложение, способное генерировать на карте приблизительные сектора направленных Wi-Fi антенн, в виде векторов, нанесенных на карту. Для построения прямой мне нужны координаты - начальные и конечные.
Исходя из книги "Курс сфероидической геодезии" Морозова я пытаюсь найти координаты из следующих данных:
- Начальная широта
- Начальная долгота
- Угол азимута (в моем случае это угол направления)
- Расстояние до точки (в моем случае это приблизительная эффективная длальность, в среднем 1-2км)
Подсмотрел на данном форуме реализацию подобной задачи, перенес себе вот такой код:
$lat = 52.050106; //широта
$lng = 113.537609; //долгота
$ang = 220; //азимут
$dist = 2; //расстояние
$newlat=sin($lat * M_PI / 180)*cos($dist * M_PI / 180)+cos($lat * M_PI / 180)*sin($dist * M_PI / 180)*cos($ang * M_PI / 180);
$newlat = asin($newlat) * 180 / M_PI;
$newlng=sin($dist * M_PI / 180)*sin($ang * M_PI / 180)/(cos($lat * M_PI / 180)*cos($dist * M_PI / 180)-sin($lat * M_PI / 180)*sin($dist * M_PI / 180)*cos$
$newlng=$lng+(atan($newlng));
Несмотря на небольшое расстояние в 2км я получаю координату совсем в неожиданном месте.
Подскажите, пожалуйста, где я ошибся?
Вычисление координат по расстоянию и углу азимута
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 18 окт 2017, 05:15
- Репутация: 0
- Откуда: Чита
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Вычисление координат по расстоянию и углу азимута
http://gis-lab.info/qa/sphere-geodesic- ... oblem.html
https://gist.github.com/jeffmcfadden/a6 ... d02ef3ad4a
https://github.com/MarkBaker/PHPGeodetic
не могу смотреть на код - от постояных "* M_PI / 180" рябит в глазах
и где у вас - радиус Земли?
https://gist.github.com/jeffmcfadden/a6 ... d02ef3ad4a
https://github.com/MarkBaker/PHPGeodetic
не могу смотреть на код - от постояных "* M_PI / 180" рябит в глазах
и где у вас - радиус Земли?
- Игорь Белов
- Гуру
- Сообщения: 2230
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1503
- Откуда: Казань
Re: Вычисление координат по расстоянию и углу азимута
Расстояние dist в условии в километрах, а в формулы подставлено так, будто оно в градусах.
IMHO выбраны формулы, мало пригодные для расстояний прямой видимости. Для «приблизительных секторов направленных Wi-Fi антенн» подойдёт что-нибудь попроще:
φ = φ₀ + σ cos α
λ = λ₀ + σ sin α / cos φ₀
σ = D / 111.195
The purpose of computing is insight, not numbers
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 18 окт 2017, 05:15
- Репутация: 0
- Откуда: Чита
Re: Вычисление координат по расстоянию и углу азимута
Благодарю, эти формулы мне идеально подошли.
Итоговый код вышел вот таким:
//$lat - текущая широта, $lng - текущая долгота
//$dist - расстояние между искомыми точками
//$ang - азимут на искомую точку
$newlat = $lat + (($dist / 111.195) * cos($ang));
$newlng = $lng + (($dist / 111.195) * sin($ang) / cos($lat)
Всем огромное спасибо!
Кто сейчас на конференции
Сейчас этот форум просматривают: Amazon [Bot] и 37 гостей