¿Cómo obtener la distancia y la demora entre un punto y la parte más cercana de un polígono?

9

Soy bastante nuevo en escribir SQL y usar PostGIS, así que me disculpo si esto parece un poco simple u obvio. Tengo una tabla de características de polígono contenida en una base de datos postGIS y necesito escribir una consulta SQL para seleccionar todos los atributos, la distancia y la dirección de las características de polígono dentro de una cierta distancia de un punto predefinido. Me las arreglé para seleccionar las características y calcular la distancia (usando ST_Distance) pero no puedo averiguar cómo obtener el rumbo.

Este es el script que estoy usando hasta ahora:

SELECT *,
  ST_Distance (Geometry, ST_GeomFromText ('POINT(292596 90785)', 27700))
FROM mytable
WHERE
  ST_DWithin(
    Geometry,
    ST_GeomFromText('POINT(292596 90785)', 27700),
    250) 

¿Cómo calculo el rumbo de las características y la distancia?

JamesC
fuente

Respuestas:

4

Puede usar ST_Azimuth para calcular el rumbo, pero solo toma geometrías de punto como parámetros, por lo que debe decidir qué rumbo realmente desea.

Puede elegir la línea más corta como ha sugerido @Nicklas (es la que tiene la distancia que ya calculó), lo que tiene sentido si necesita la "dirección" más rápida para llegar al polígono. Para cualquier otra cosa, le sugiero que lo calcule contra el centroide del polígono (ST_Centroid), que debería dar mejores resultados para formas arbitrarias.

lynxlynxlynx
fuente
2

Utilizar

ST_Azimuth (ST_Shortestline (geom1, geom2))

editar

Me acabo de dar cuenta de que ST_Azimuth no toma una cadena lineal como argumento, por lo que deberás darle dos puntos.

Si una de las geometrías es un punto, puede usarlo directamente y usar ST_ClosestPoint para obtener el punto en el polígono.

Nicklas Avén
fuente
1

ST_Azimuth es la función que deseas. Devuelve el ángulo en radianes en sentido horario desde el norte. Como muestra el ejemplo en la ST_Azimuth()página, simplemente envolviéndolo en la degrees()función le dará el ángulo en grados si eso es lo que necesita.

MerseyViking
fuente