Pregunta en casi lo mismo que 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.
Respuestas:
Esta consulta debería hacer el truco:
Al principio, selecciona las distintas cadenas lineales de su columna de polilínea con
ST_Dump
Luego debe 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). Eli
valor comienza de nuevo para cada cadena lineal.Con
ST_LocateAlong
yST_GeometryN
crea una geometría de punto multidimensional.Finalmente, debe extraer los valores X e Y de esta geometría y crear un punto a partir de ella.
El resultado podría verse así:
EDITAR
Para ser justos, quiero agregar esta información: la idea y la consulta en esta respuesta se extraen de una consulta que estoy usando para crear líneas de cortina desde DEM en PostGIS. La excelente implementación de esto se explica en este artículo de Mathieu Leplatre.
fuente
WITH line AS
se usa? No veo 'línea' en otro lado.WITH Query
proporciona el uso de tablas temporales para consultas más grandes. Aquí hay alguna información: postgresql.org/docs/8.4/static/queries-with.html .line
se usa en la siguiente subconsultalinemeasure
. Los datos seleccionados en esta subconsulta se basan en las selecciones realizadas en laline
subconsulta. Se construyen uno sobre el otro. Espero que haya ayudado!st_locate_along_measure
.