Как я могу рассчитать направление между двумя точками в PostGIS?

19

Как я могу найти направление между двумя точками в PostGIS?

Пожалуйста, укажите в своем ответе, является ли метод изготовления подшипника на сфероиде или плоского подшипника.

fmark
источник

Ответы:

21

Использование ST_Azimuth

Планарный подшипник может быть рассчитан с использованием ST_Azimuth:

SELECT ST_Azimuth(ST_MakePoint(1,2), 
           ST_MakePoint(3,4))/(2*pi())*360 as degAz,
       ST_Azimuth(ST_MakePoint(3,4), 
           ST_MakePoint(1,2))/(2*pi())*360 As degAzrev

degaz   degazrev
------  ---------
45      225

Для сферического азимута (цитирование группы пользователей ):

Функция азимута PostGIS, кажется, использует простую функцию arctan для определения азимута. Если вы преобразуете свои координаты в спроецированную систему координат, а затем выполните запрос, ваши результаты будут намного ближе к результатам сайта FCC.
Вот быстрое преобразование в UTM Zone 31:

select degrees(azimuth(
'POINT(634714.442133176 5802006.052402816)',
'POINT(634731.2410598891 5801981.648284801)'
));

что дает азимут 145,457858825445. Точки в центре зоны UTM или более подходящая проекция дадут лучшие результаты.

Использование тригонометрических функций и ST_distance_sphere

Это решение я выбрал, когда мне приходилось сталкиваться с этими проблемами, в основном по унаследованным причинам (у меня была функция Python, которая вычисляет азимут). Во-первых, нам нужно найти функцию, которая сообщала бы нам точное расстояние между двумя точками. Цитирование руководства postgis :

ST_distance_sphere (точка, точка) Возвращает линейное расстояние в метрах между двумя точками широты и долготы. Использует сферическую землю и радиус 6370986 метров. Быстрее, чем distance_spheroid (), но менее точно. Реализовано только для очков.

Измерьте долготу и широту расстояния между точками и используйте arctanфункцию для получения угла.

Адам Матан
источник
Я постараюсь опубликовать код на python позже и, возможно, проведу несколько сравнений между методами. - Если я смогу найти этот унаследованный код ...
Адам Матан,
Можете ли вы уточнить, как вы идете от расстояния до угла с atan? Моя тригонометрия немного туманна ...
Fmark
11

Для тех, кто сталкивается с этим вопросом сейчас - PostGIS поддерживает ST_Azimuth по географии (сфероид) начиная с 2.0.0.

EM0
источник