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.

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);

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.