¿Cómo puedo transformar polilíneas en puntos cada n metros en PostGIS?

13

La pregunta es bastante parecida a esto , pero necesito usar PostGIS.

Tengo varias polilíneas, y quiero transformarlas en puntos cada n metros a lo largo de estas líneas.

editar: Muchas gracias a Stefan. Mi consulta final fue un poco diferente, probablemente debido a la versión anterior de PostGIS (1.5), pero al final obtuve lo que necesitaba. Los puntos se combinaron en un mapa de calor de densidad de carreteras.

    
pregunta culebrón 01.03.2014 - 08:53

1 respuesta

17

Esta consulta debería hacer el truco:

WITH line AS 
    (SELECT
        your_polylinestring_id,
        (ST_Dump(geom)).geom AS geom
    FROM your_polylinestring_table),
linemeasure AS
    (SELECT
        ST_AddMeasure(line.geom, 0, ST_Length(line.geom)) AS linem,
        generate_series(0, ST_Length(line.geom)::int, 10) AS i
    FROM line),
geometries AS (
    SELECT
        i,
        (ST_Dump(ST_GeometryN(ST_LocateAlong(linem, i), 1))).geom AS geom 
    FROM linemeasure)

SELECT
    i,
    ST_SetSRID(ST_MakePoint(ST_X(geom), ST_Y(geom)), 31468) AS geom
FROM geometries
  1. Al principio, selecciona las cadenas lineales distintas de su columna de polilínea con ST_Dump

  2. Luego tienes que definir los elementos de medida con ST_AddMeasure , comenzando con 0 (comienzo de la cadena de líneas) y el final de la cadena de líneas (igual que la longitud de la cadena de líneas). Generate_series crea una serie sobre esta medida en el paso de 10. Aquí puede definir "n metres" (en este ejemplo, 10 metros). El valor i comienza de nuevo para cada cadena de líneas.

  3. Con ST_LocateAlong y ST_GeometryN creas una geometría de puntos multidimensional.

  4. Finalmente, debes extraer los valores X e Y de esta geometría y crear un punto a partir de ella.

El resultado podría verse así:

EDIT

Paraserjustos,quieroagregarestainformación:LaideaylaconsultaenestarespuestaseextraendeunaconsultaqueestoyusandoparacrearlíneasdepliegosapartirdeDEMenPostGIS.Laexcelenteimplementacióndeestoseexplicaeneste artículo de Mathieu Leplatre.

    
respondido por el Stefan 01.03.2014 - 10:53

Lea otras preguntas en las etiquetas