Как я могу найти направление между двумя точками в PostGIS?
Пожалуйста, укажите в своем ответе, является ли метод изготовления подшипника на сфероиде или плоского подшипника.
Планарный подшипник может быть рассчитан с использованием 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 или более подходящая проекция дадут лучшие результаты.
Это решение я выбрал, когда мне приходилось сталкиваться с этими проблемами, в основном по унаследованным причинам (у меня была функция Python, которая вычисляет азимут). Во-первых, нам нужно найти функцию, которая сообщала бы нам точное расстояние между двумя точками. Цитирование руководства postgis :
ST_distance_sphere (точка, точка) Возвращает линейное расстояние в метрах между двумя точками широты и долготы. Использует сферическую землю и радиус 6370986 метров. Быстрее, чем distance_spheroid (), но менее точно. Реализовано только для очков.
Измерьте долготу и широту расстояния между точками и используйте arctan
функцию для получения угла.
atan
? Моя тригонометрия немного туманна ...Для тех, кто сталкивается с этим вопросом сейчас - PostGIS поддерживает ST_Azimuth по географии (сфероид) начиная с 2.0.0.
источник