Вычисление координат по расстоянию и углу азимута

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
RudovAndrey
Новоприбывший
Сообщения: 2
Зарегистрирован: 18 окт 2017, 05:15
Репутация: 0
Откуда: Чита

Вычисление координат по расстоянию и углу азимута

Сообщение RudovAndrey » 18 окт 2017, 05:27

Друзья, добрый день.
С помощью 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км я получаю координату совсем в неожиданном месте.
Подскажите, пожалуйста, где я ошибся?

trir
Гуру
Сообщения: 5286
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Вычисление координат по расстоянию и углу азимута

Сообщение trir » 18 окт 2017, 06:51

http://gis-lab.info/qa/sphere-geodesic- ... oblem.html
https://gist.github.com/jeffmcfadden/a6 ... d02ef3ad4a
https://github.com/MarkBaker/PHPGeodetic

не могу смотреть на код - от постояных "* M_PI / 180" рябит в глазах
и где у вас - радиус Земли?

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: Вычисление координат по расстоянию и углу азимута

Сообщение Игорь Белов » 18 окт 2017, 07:56

RudovAndrey писал(а):
18 окт 2017, 05:27
Подскажите, пожалуйста, где я ошибся?
Расстояние dist в условии в километрах, а в формулы подставлено так, будто оно в градусах.

IMHO выбраны формулы, мало пригодные для расстояний прямой видимости. Для «приблизительных секторов направленных Wi-Fi антенн» подойдёт что-нибудь попроще:

φ = φ₀ + σ cos α
λ = λ₀ + σ sin α / cos φ₀
σ = D / 111.195
The purpose of computing is insight, not numbers

RudovAndrey
Новоприбывший
Сообщения: 2
Зарегистрирован: 18 окт 2017, 05:15
Репутация: 0
Откуда: Чита

Re: Вычисление координат по расстоянию и углу азимута

Сообщение RudovAndrey » 18 окт 2017, 09:42

Игорь Белов писал(а):
18 окт 2017, 07:56
φ = φ₀ + σ cos α
λ = λ₀ + σ sin α / cos φ₀
σ = D / 111.195
Благодарю, эти формулы мне идеально подошли.

Итоговый код вышел вот таким:
//$lat - текущая широта, $lng - текущая долгота
//$dist - расстояние между искомыми точками
//$ang - азимут на искомую точку

$newlat = $lat + (($dist / 111.195) * cos($ang));
$newlng = $lng + (($dist / 111.195) * sin($ang) / cos($lat)

Всем огромное спасибо!

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей