расчёт координат от точки по азимуту?

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
andruxin
Новоприбывший
Сообщения: 6
Зарегистрирован: 23 фев 2012, 20:50
Репутация: 0

расчёт координат от точки по азимуту?

Сообщение andruxin » 23 фев 2012, 21:05

Есть точка А(lat,lng), есть некое направление с азимутом B. Подскажите формулу как вычислить координаты точки С, например, на расстоянии 1 градус от точки А?
Я пробовал вычислять как полярные координаты, но естественно получилось с большой погрешностью.

andruxin
Новоприбывший
Сообщения: 6
Зарегистрирован: 23 фев 2012, 20:50
Репутация: 0

Re: расчёт координат от точки по азимуту?

Сообщение andruxin » 25 фев 2012, 00:10

я ошибся разделом?

rnazarov
Участник
Сообщения: 61
Зарегистрирован: 25 дек 2009, 15:44
Репутация: 3
Откуда: Казань

Re: расчёт координат от точки по азимуту?

Сообщение rnazarov » 25 фев 2012, 09:43

Формулы приведены в книги Морозова "Курс сфероидической геодезии" стр.97-99

andruxin
Новоприбывший
Сообщения: 6
Зарегистрирован: 23 фев 2012, 20:50
Репутация: 0

Re: расчёт координат от точки по азимуту?

Сообщение andruxin » 25 фев 2012, 16:50

rnazarov, спасибо. пошёл разбираться

andruxin
Новоприбывший
Сообщения: 6
Зарегистрирован: 23 фев 2012, 20:50
Репутация: 0

Re: расчёт координат от точки по азимуту?

Сообщение andruxin » 08 апр 2012, 18:48

Опять вернулся к этому вопросу. Взял книгу Морозова и, как обычно получается, вижу фигу((. \Помогите разобраться.

Использую формулы подчёркнутые красным, вот как это выглядит на PHP

Код: Выделить всё

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

$newlat=sin($lat * PI / 180)*cos($dist * PI / 180)+cos($lat * PI / 180)*sin($dist * PI / 180)*cos($ang * PI / 180);
$newlat=$lat+(asin($newlat));

$newlng=sin($dist * PI / 180)*sin($ang * PI / 180)/(cos($lat * PI / 180)*cos($dist * PI / 180)-sin($lat * PI / 180)*sin($dist * PI / 180)*cos($ang * PI / 180));
$newlng=$lng+(atan($newlng));
Пытаюсь нарисовать окружность, в итоге получается такое(первый скриншот). Красная точка, это точка вокруг которой пытаюсь построить окружность. А в результате окружность строится выше точки. Как так это получается, где я ошибся?
Вложения
staticmap.png
staticmap.png (51.62 КБ) 33379 просмотров
morozov-99-100.png
morozov-99-100.png (111.2 КБ) 33379 просмотров

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

Re: расчёт координат от точки по азимуту?

Сообщение Игорь Белов » 08 апр 2012, 20:06

Формулу (IV.17) следует понимать буквально:

Код: Выделить всё

$newlat = asin($newlat) * 180 / PI
т. е. $lat+ лишнее.
The purpose of computing is insight, not numbers

andruxin
Новоприбывший
Сообщения: 6
Зарегистрирован: 23 фев 2012, 20:50
Репутация: 0

Re: расчёт координат от точки по азимуту?

Сообщение andruxin » 08 апр 2012, 21:21

спасибо! получилось

Petruxin
Гуру
Сообщения: 1695
Зарегистрирован: 14 июн 2011, 16:47
Репутация: 133
Ваше звание: Завсегдатай
Откуда: Череповец

Re: расчёт координат от точки по азимуту?

Сообщение Petruxin » 08 апр 2012, 21:51

Если получилось то прочтите на Вики (организационные статьи) статью
Как задать вопрос на форуме GIS-Lab, чтобы получить содержательный ответ
Пункт 4.1.

tems-ya
Интересующийся
Сообщения: 39
Зарегистрирован: 28 янв 2015, 22:07
Репутация: 1
Откуда: Воронеж

Re: расчёт координат от точки по азимуту?

Сообщение tems-ya » 28 янв 2015, 22:56

Дабы не плодить множество одинаковых тем рискну еще раз спросить здесь.

Имеется карта в MapInfo в WGS-84. На данной карте есть точка с координатами LAT, LON (в принятых в MapInfo десятичных градусах). В данной точке расположен некий объект который имеет направление задаваемое углом AZIMUT в градусах. Необходимо на карте нарисовать линию фиксированной длины L (порядка от 100-300 м в масштабе карты) в направлении AZIMUT. Для этого необходимо найти координаты конечной точки LAT1, LON1 которые находятся от начальной LAT, LON на расстоянии L в направлении AZIMUT.
Никакие особые точности не важны. Простая адекватная визуализация +-1...3 градуса, +-10-20%L по дальности вполне допустимо. Вопрос как вычислить LAT1, LON1 - ? Как максимально просто вычислить LAT1, LON1 - ?

Есть предположение, что решение дается выражениями вида:
LAT1 = LAT + 0.718*COS(AZIMUT*PI/180)*L
LON1 = SIN(AZIMUT*PI/180)*L

если они имеют смысл откуда они такие? что такое 0.718 ?

З.Ы. Понимаю вопросы ламерские, но просьба обойтись без стеба, т.к. преследуются чисто практические цели, а конкретно разбираться в 500 страницах курса высшей геодезии как-то уже наверное поздновато - и других задач выше крыши. Также буду благодарен если, кто-то сможет грамотно описать название данной конкретной задачи, чтобы можно было более точно погуглить. То что это прямая геодезическая задача я уже уяснил. Меня интересует развернутое описание типа "это задача вычисление координат на эллипсоиде WGS84 ... бла бла бла ...через ...бла бла бла" или как-то аналогично.

Спасибо.

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

Re: расчёт координат от точки по азимуту?

Сообщение Игорь Белов » 28 янв 2015, 23:55

tems-ya писал(а):Есть предположение, что решение дается выражениями вида:
LAT1 = LAT + 0.718*COS(AZIMUT*PI/180)*L
LON1 = SIN(AZIMUT*PI/180)*L

если они имеют смысл откуда они такие? что такое 0.718 ?
Для расстояний 300 метров на местности без претензий к точности предположение годится. Будет как-то так:

Код: Выделить всё

LAT1 = LAT + L * COS(AZIMUT * PI / 180) / (6371000 * PI / 180)
LON1 = LON + L * SIN(AZIMUT * PI / 180) / COS(LAT * PI / 180) / (6371000 * PI / 180)
Откуда они такие? Просто забываем, что Земля круглая, и решаем задачу как плоскую. Только надо учесть, что меридианы к полюсам сближаются, отсюда деление приращения долготы на косинус широты. 6371000 — средний радиус Земли в метрах, так что (6371000 * PI / 180) ≈ 111195 — средняя длина 1° дуги в метрах.

Что такое 0.718? Тайна сия велика есть.
The purpose of computing is insight, not numbers

tems-ya
Интересующийся
Сообщения: 39
Зарегистрирован: 28 янв 2015, 22:07
Репутация: 1
Откуда: Воронеж

Re: расчёт координат от точки по азимуту?

Сообщение tems-ya » 29 янв 2015, 15:00

Спасибо за ответ. Все работает, только в ваших формулах длина L задается в метрах, а в моих, в км. Из-за этого я сначала подумал, что формулы не рабочие. Ваши формулы на взгляд заметно точнее. Еще раз спасибо.

tems-ya
Интересующийся
Сообщения: 39
Зарегистрирован: 28 янв 2015, 22:07
Репутация: 1
Откуда: Воронеж

Re: расчёт координат от точки по азимуту?

Сообщение tems-ya » 12 мар 2015, 15:44

Как повысить точность приведенных формул. Неожиданно оказалось, что существующей точности при рисовании дуги не хватает...

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

Re: расчёт координат от точки по азимуту?

Сообщение Игорь Белов » 12 мар 2015, 19:14

tems-ya писал(а):Как повысить точность приведенных формул. Неожиданно оказалось, что существующей точности при рисовании дуги не хватает...
Просто прочтите тему с начала.
The purpose of computing is insight, not numbers

Warden
Интересующийся
Сообщения: 25
Зарегистрирован: 16 сен 2015, 16:43
Репутация: 7
Откуда: Королёв

Re: расчёт координат от точки по азимуту?

Сообщение Warden » 05 май 2016, 10:47

Ребят, задача та же, пытаюсь рассчитать координаты точки, получаю координаты от изначальной с разницей порядка минут (хотя, расстояние между точками 1000км). Для проверки решал для нахождение координат Москвы, при известных координатах Питера, получил то же самое. Кто может подсказать что не так?

Код: Выделить всё

$phi = 62.8356; $lyambda = 61.2193; $A = 328.7625; $L = 1008.18; $R = 6371; $s = $L/$R;
Где phi - широта, lyambda - долгота, А - азимут, L - расстояние до точки (км), R - радиус Земли. $s - переход к угловой мере расстояния.

Код: Выделить всё

$grad = pi()/180;
$phi1 = asin(cos($s*$grad)*sin($phi*$grad)+sin($s*$grad)*cos($phi*$grad)*cos($a*$grad)*180/pi();
echo $phi1;

***62.970788480261***

$lyambda1 = $lyambda + atan(sin($s*$grad)*sin($A*$grad)/(cos($s*$grad)*cos($phi*$grad)-sin($s*$grad)*sin($phi*$grad)*cos($A*$grad)))*180/pi();
echo $lyambda1;

***61.038719442206***
В общем, прошу помощи разобраться, что не так.

P.S. программа написана на php.

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

Re: расчёт координат от точки по азимуту?

Сообщение Игорь Белов » 05 май 2016, 12:19

Warden писал(а):$s - переход к угловой мере расстояния
Вы подставляете в формулы дугу s, как будто она в градусах, хотя она в радианах.
The purpose of computing is insight, not numbers

Ответить

Вернуться в «Общие вопросы»

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

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