¿Cómo puedo calcular la demora entre dos puntos en PostGIS?

19

¿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.

fmark
fuente

Respuestas:

21

Usando ST_Azimuth

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.

Usando funciones trigonométricas y ST_distance_sphere

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 arctanfunción para recuperar el ángulo.

Adam Matan
fuente
Intentaré publicar el código de Python más tarde, y tal vez hacer algunas comparaciones entre los métodos. Si puedo encontrar ese código heredado ...
Adam Matan
¿Puedes aclarar cómo vas de una distancia a un ángulo atan? Mi trigonmetría es un poco confusa ...
fmark
11

Para cualquiera que se encuentre con esta pregunta ahora: PostGIS admite ST_Azimuth en geografía (esferoide) a partir de 2.0.0.

EM0
fuente