Я пытаюсь полностью понять концепцию азимута и сталкиваюсь с некоторыми несоответствиями (или, может быть, это моя ошибка).
Я покажу вам несколько примеров, которые не совпадают, в надежде, что кто-нибудь объяснит мне, как это работает на самом деле.
Я показываю координаты в формате EPSG:900913, в PostGIS и с помощью собственной функции JavaScript.
МОЯ ФУНКЦИЯ
/* Difference between the two longitudes */
var dLon = lon2 - lon1;
/* Y value */
var y = Math.sin(dLon) * Math.cos(lat2);
/* X value */
var x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon);
/* Calculates the azimuth between the two points and converts it to degrees */
var angle = Math.atan2(y, x) / Math.PI * 180;
ПРИМЕРЫ
/* Same Y, not on the equator */
Point A: (-81328.998084106, 7474929.8690234)
Point B: (4125765.0381464, 7474929.8690234)
Result in PostGIS: 90 degrees
Result in my JS function: 74.232 degrees
/* Same Y, on the equator */
Point A: (-81328.998084106, 0)
Point B: (4125765.0381464, 0)
Result in PostGIS: 90 degrees
Result in my JS function: 90 degrees
Я понимаю, что на экваторе азимут 90 (или 270) для горизонтальной линии. подумайте, что если вы проведете горизонтальную линию немного севернее (или южнее) от экватора, то азимут больше не будет 90 градусов. Но... PostGIS говорит мне, что это всегда 90 градусов, когда у нас один и тот же Y.
Кроме того, этот калькулятор также показывает, что азимуты горизонтальных линий не равны 90°. градусов при Y != 0 (не на экваторе).
Как это правильно?
Спасибо