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