División de polilíneas utilizando regiones con PostGIS

8

Me preguntaba si es posible dividir una polilínea en los límites del polígono (regiones) en PostGIS, la imagen a continuación es de lo que tenemos en este momento y muestra dónde necesito la división de las polilíneas:

texto alternativo

Llamemos a las regiones road_blocksy las líneas.road_cl

Si puede copiar los datos desde road_blockdebajo de la polilínea recién creada a la nueva polilínea, eso sería una verdadera ventaja.

Nathan W
fuente

Respuestas:

11
CREATE TABLE new_road_cl AS
  SELECT ST_Intersection(r.geom, b.geom) AS geom,
         b.attr1, b.attr2, b.attr3,
         r.attr1, r.attr2, r.attr3
  FROM road_blocks b, road_cl r
  WHERE ST_Intersects(r.geom, b.geom);
Paul Ramsey
fuente
Gracias, pero parece que obtengo esto cuando lo ejecuto: TopologyException: found non-noded intersection between LINESTRING (397766 6.83237e+006, 397769 6.83237e+006) and LINESTRING (397767 6.83238e+006, 397766 6.83237e+006) at 397766 6.83237e+006
Nathan W
Simplemente lo ejecuté en un solo camino, parece que hay algunos datos mal formados en alguna parte.
Nathan W
1
+1 Niza. ¿No the_geomes geomel nombre del campo de geometría predeterminado?
Adam Matan
2

Nathan

1) Asegúrese de que su geometría sea válida: las geometrías no válidas son una causa importante de este tipo de errores. SELECCIONE ST_IsValid (geom);

2) ¿Qué versión de geos estás ejecutando? Hacer un

SELECCIONE postgis_full_version ();

GEOS 3.2+ se encuentra con menos de estos problemas de excepción topológica.

Para Adam, Paul decidió un día que era demasiado vago para escribir the_geom :), por lo que proclamó "a partir de ahora el valor predeterminado será - geom". Todos estampamos nuestros pies y dijimos: NO hasta 2.0

Por lo tanto, geog es predeterminado para geografía y geom será el predeterminado en 2.0 para geometría.

LR1234567
fuente