Відповіді:
Плоский підшипник можна обчислити, використовуючи 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
Для сферичного азимуту (цитування групи potgis-користувачів ):
Функція азимуту PostGIS, схоже, використовує просту функцію арктану для визначення азимуту. Якщо ви перетворите свої координати в проектовану систему координат, а потім запустите запит, ваші результати будуть набагато ближче до результатів сайту FCC.
Ось швидкий перехід до зони UTM 31:
select degrees(azimuth(
'POINT(634714.442133176 5802006.052402816)',
'POINT(634731.2410598891 5801981.648284801)'
));
що дає азимут 145,457858825445. Точки в центрі зони UTM або більш підходяща проекція давали б кращі результати.
Це рішення, яке я вибрав, коли мені доводилося стикатися з цими проблемами, головним чином, із застарілих причин (у мене була функція Python, яка обчислює азимут). Спочатку нам потрібно знайти функцію, яка б нам сказала точну відстань між двома точками. Цитуючи посібник Postgis :
ST_distance_sphere (точка, точка) Повертає лінійну відстань у метрах між двома точками lat / lon. Використовує сферичну землю і радіус 6370986 метрів. Швидше, ніж distance_spheroid (), але менш точне. Реалізовано лише для балів.
Виміряйте відстань довготи та широти між точками та використовуйте arctan
функцію для отримання кута.
atan
? Моя тригометрія трохи