Memisahkan polyline menggunakan region dengan PostGIS

8

Saya bertanya-tanya apakah mungkin untuk membagi polyline pada batas-batas poligon (wilayah) di PostGIS, gambar di bawah ini adalah apa yang kita miliki saat ini dan menunjukkan di mana saya perlu perpecahan polyline:

teks alternatif

Mari kita memanggil wilayah road_blocksdan garisroad_cl

Jika Anda dapat menyalin data dari road_blockbawah polyline yang baru dibuat ke polyline baru yang akan menjadi bonus nyata.

Nathan W
sumber

Jawaban:

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
sumber
Terima kasih tetapi saya tampaknya mendapatkan ini ketika saya menjalankannya: 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
Hanya menjalankannya di satu jalan, sepertinya ada beberapa data yang cacat di suatu tempat.
Nathan W
1
+1 Bagus. Bukankah the_geomtidak geom, default nama field geometri?
Adam Matan
2

Nathan,

1) Pastikan geometri Anda valid - geometri yang tidak valid adalah penyebab utama kesalahan semacam ini. SELECT ST_IsValid (geom);

2) Versi geos apa yang Anda jalankan? Lakukan a

SELECT postgis_full_version ();

GEOS 3.2+ menghadapi lebih sedikit masalah pengecualian topologi ini.

Untuk Adam - Paul memutuskan suatu hari dia terlalu malas untuk mengetik the_geom :) - jadi dia menyatakan "mulai sekarang defaultnya akan - geom". Kami semua menginjak kaki kami dan berkata - TIDAK sampai 2.0

Jadi geog adalah default untuk geografi dan geom akan menjadi default dalam 2.0 untuk geometri.

LR1234567
sumber