¿Cómo puedo encontrar el rumbo entre dos puntos en PostGIS?
Por favor, especifique en su respuesta si el método produce un rodamiento en el esferoide o un rodamiento plano.
El rodamiento plano se puede calcular usando 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
Para acimut esférico (citando grupo de usuarios de potgis ):
La función de azimut de PostGIS parece usar una función de arctan simple para determinar el acimut. Si convierte sus coordenadas en un sistema de coordenadas proyectadas y luego ejecuta la consulta, sus resultados estarán mucho más cerca de los resultados del sitio de la FCC.
Aquí hay una conversión rápida a UTM Zone 31:
select degrees(azimuth(
'POINT(634714.442133176 5802006.052402816)',
'POINT(634731.2410598891 5801981.648284801)'
));
que produce un acimut de 145.457858825445. Puntos en el centro de la zona UTM, o una proyección más adecuada daría mejores resultados.
Esta es la solución que elegí cuando tuve que lidiar con estos problemas, principalmente por razones heredadas (tenía una función de Python que calcula el acimut). Primero, necesitamos encontrar una función que nos diga la distancia exacta entre dos puntos. Citando el manual de postgis :
ST_distance_sphere (punto, punto) Devuelve la distancia lineal en metros entre dos puntos lat / lon. Utiliza una tierra esférica y radio de 6370986 metros. Más rápido que distance_spheroid (), pero menos preciso. Solo implementado para puntos.
Mida la distancia de longitud y latitud entre los puntos y use la arctan
función para recuperar el ángulo.
atan
? Mi trigonmetría es un poco confusa ...Para cualquiera que se encuentre con esta pregunta ahora: PostGIS admite ST_Azimuth en geografía (esferoide) a partir de 2.0.0.
fuente