3 votos

Trazado de una línea hasta el punto más cercano de una columna

Tengo conjuntos de puntos que definen un segmento de carretera, y puedo conectarlos con St_MakeLine, pero no tengo ningún campo con el que ordenarlos, así que hacen zig-zag. Ordenarlos por lat/long/x/y sólo ayuda parcialmente, ya que se curvan sobre sí mismos.

Me gustaría conectar cada punto con el siguiente punto más cercano con una nueva línea, desde dentro de la misma columna.

ArcGIS Pro fue mi primer intento, pero cierra los segmentos en ambos extremos (independientemente de la configuración que utilice). Estoy utilizando PGAdmin4 con la extensión PostGIS. La velocidad de la consulta no es un problema, necesito que se ejecute correctamente una vez y luego voy a importar los resultados en ArcGIS Pro.

0voto

Mikaveli Puntos 126

En Taller de introducción a PostGIS hace algo así en el Construcciones geométricas avanzadas parte.

CREATE TABLE t (
  id int,
  p  geometry(point)
);
INSERT INTO t VALUES (1, ST_MakePoint(1, 1)),
                     (2, ST_MakePoint(2, 2)),
                     (3, ST_MakePoint(3, 1)),
                     (4, ST_MakePoint(1.5, 1)),
                     (5, ST_MakePoint(4, 2));

WITH RECURSIVE points(p, ids) AS (
  (SELECT p, array[id]
   FROM t
   WHERE id = 1)  -- start point
  UNION ALL
  (SELECT t.p, array_append(points.ids, t.id)
   FROM t
   JOIN points ON NOT points.ids @> array[t.id]
   ORDER BY t.p <-> points.p
   LIMIT 1)
)
SELECT ST_AsText(ST_MakeLine(p)) FROM points;

LINESTRING(1 1,1.5 1,2 2,3 1,4 2)

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