4 votos

¿Extraer el primer y último elemento del tipo de datos path en Postgres?

Nuestra base de datos postgres tiene tablas que tienen un tipo de datos "path" que consiste en una lista de puntos que conforman una línea. ¿Existe alguna forma en postGIS o postgres de extraer el primer y último par de coordenadas de cada entrada? El objetivo es determinar la dirección cardinal de cada línea utilizando ST_Azimuth pero esa función requiere las coordenadas del primer y último punto.

He probado todas las formas que se me ocurren, pero el tipo de datos path no se comporta como una cadena o un array, por lo que es difícil sacar elementos de él.

4voto

MBCook Puntos 8316

No estoy seguro de que haya una forma directa de extraer puntos del path . Puede ver una lista de funciones para el path tipo de datos con:

SELECT proname 
FROM pg_proc, pg_type
WHERE typname = 'path' AND pg_type.oid = ANY(proargtypes);

Esta lista muestra un geometry que convierte entre el PostgreSQL path y el tipo PostGIS LineString tipo. No veo esta función en los documentos de PostGIS en ninguna parte, pero aparentemente está disponible desde la versión 2.1. Con esta función, usted puede llamar a las funciones de PostGIS en su path datos:

WITH data AS (VALUES (path '[(0,0),(1,1),(2,0)]'), (path '[(3,3),(2,7)]')) 
SELECT ST_Azimuth(
    ST_StartPoint(geometry(column1)), 
    ST_EndPoint(column1::geometry))
FROM data;

Desde el geometry es una función de fundición, puede utilizar la función geometry(column1) o column1::geometry sintaxis.

Puede considerar la posibilidad de almacenar su geometría en el sistema PostGIS geometry que tiene mucha más funcionalidad que path a costa de una sobrecarga de 24 bytes por geometría.

1voto

jlehenbauer Puntos 7749

Puede utilizar ST_StartPoint y ST_EndPoint

SELECT ST_StartPoint(geom), ST_EndPoint(geom)
FROM tbl;

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X