Aufteilen von Polylinien mithilfe von Regionen mit PostGIS

8

Ich habe mich gefragt, ob es möglich ist, eine Polylinie an Polygongrenzen (Regionen) in PostGIS zu teilen. Das folgende Bild zeigt, was wir im Moment haben und zeigt, wo ich die Polylinien teilen muss:

Alt-Text

Nennen wir die Regionen road_blocksund die Linienroad_cl

Wenn Sie die Daten von der road_blockunter der neu erstellten Polylinie in die neue Polylinie kopieren können , wäre dies ein echter Bonus.

Nathan W.
quelle

Antworten:

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
quelle
Danke, aber ich bekomme das, wenn ich es laufen lasse: 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
Ich habe es nur auf einer einzigen Straße ausgeführt und es scheint, als ob irgendwo fehlerhafte Daten vorliegen.
Nathan W
1
+1 Schön. Ist nicht the_geomnicht geomder Standardname des Geometriefeldes?
Adam Matan
2

Nathan,

1) Stellen Sie sicher, dass Ihre Geometrie gültig ist - ungültige Geometrien sind eine Hauptursache für diese Art von Fehlern. SELECT ST_IsValid (geom);

2) Welche Version von Geos verwenden Sie? Mach a

SELECT postgis_full_version ();

Bei GEOS 3.2+ treten weniger dieser topologischen Ausnahmeprobleme auf.

Zu Adam - Paul entschied eines Tages, dass er zu faul war, um the_geom einzugeben :) - also verkündete er "von nun an wird die Standardeinstellung sein - geom". Wir alle stampften mit den Füßen und sagten - NEIN bis 2.0

Geog ist also die Standardeinstellung für Geografie und Geom ist die Standardeinstellung in 2.0 für Geometrie.

LR1234567
quelle