Я хочу обчислити кут між двома лініями, де вони перетинаються в PostGIS.
Вихідною точкою для обчислення кута в PostGIS, здається, є ST_Azimuth - але це приймає точки як вхідні дані. Першою моєю думкою було взяти кінцеві точки пересічних ліній і виконати обчислення азимуту на них. Це недостатньо добре, оскільки більшість особливостей лінії не прямі, і мене цікавить кут на перетині. Отже, я придумав - це вкладена операція, яка проходить через наступні кроки:
- Визначте всі перетини між двома рядками таблиць характеристик.
- Створіть дуже маленький буфер навколо точки перетину
- Визначте точки, де лінії перетинаються зовнішньою частиною буфера (беручи першу точку, якщо їх більше - я насправді цікавлюсь лише тим, чи кут близький до 0, 90 або 180 градусів)
- Обчисліть ST_Azimuth для цих двох точок.
Повний SQL довго не публікується тут, але я подав його сюди, якщо вам цікаво. (До речі, чи є кращий спосіб, ніж переносити всі поля, що йдуть вниз по операторах З?)
Результати виглядають неправильно, тому я чітко роблю щось не так:
EDIT Я переосмислив обчислення в EPSG: 3785, і результати дещо відрізняються, але все-таки неправильно:
Моє запитання - де вади в цьому процесі. Я не розумію, що робить ST_Azimuth? Чи є проблема з CRS? Щось ще взагалі? А може, існує набагато, набагато простіший спосіб зробити це?