Divisão de polilinhas usando regiões com PostGIS

8

Eu queria saber se é possível dividir uma polilinha nos limites dos polígonos (regiões) no PostGIS, a imagem abaixo é sobre o que temos no momento e mostra onde eu preciso dividir as polilinhas:

texto alternativo

Vamos chamar as regiões road_blockse as linhasroad_cl

Se você puder copiar os dados da road_blockpolilinha recém-criada para a nova polilinha, isso seria um bônus real.

Nathan W
fonte

Respostas:

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
fonte
Obrigado, mas parece que recebo isso quando o executo: 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
Apenas executei em uma única estrada, parece que existem alguns dados malformados em algum lugar.
Nathan W
1
+1 Nice. Não the_geomé geom, o nome do campo de geometria padrão?
Adam Matan
2

Nathan,

1) Verifique se sua geometria é válida - geometrias inválidas são a principal causa desse tipo de erro. SELECT ST_IsValid (geom);

2) Qual versão de geos você está executando? Faça um

SELECT postgis_full_version ();

O GEOS 3.2+ tem menos desses problemas de exceção topológica.

Para Adam - Paul decidiu que um dia estava com preguiça de digitar the_geom :) - então ele proclamou "a partir de agora o padrão será - geom". Todos batemos os pés e dissemos - NÃO até 2,0

Portanto, geog é o padrão para geografia e geom será o padrão em 2.0 para geometria.

LR1234567
fonte