Membubarkan atau menghapus garis pada atribut umum di PostGIS atau GRASS?

9

Saya memiliki shapefile garis tengah jalan yang memisahkan jalan di setiap persimpangan. Namun, saya ingin bergabung dengan LINESTRING yang memiliki seperangkat atribut yang sama ke dalam LINESTRING tunggal. Selama nama, batas kecepatan, dll, tidak berubah, saya ingin menggabungkan keduanya. Ini untuk penggabungan akhirnya ke OpenStreetMap.

Perangkat lunak ArcGIS untuk Desktop Esri tampaknya memungkinkan ini dengan perintah Dissolve dan opsi UNSPLIT_LINES.

Saya juga menemukan perintah Larutkan di QGIS tetapi tampaknya hanya bekerja pada poligon dan bidang tunggal.

Dengan asumsi tidak ada yang ada untuk QGIS, apakah ada yang tahu bagaimana melakukannya di PostGIS atau GRASS?

Astaga
sumber
Untuk PostGIS, periksa gis.stackexchange.com/questions/1387/…
underdark
Jika pertanyaan ini ditanyakan hari ini, saya pikir itu akan ditutup terlalu luas. Daripada mencoba untuk menutupnya sekarang, saya akan mengeditnya untuk memperbaiki Jawaban yang ada dan mencegah Jawaban yang lebih luas.
PolyGeo

Jawaban:

4

Pertanyaan menarik. Saya tidak menganggap diri saya seorang guru PostGIS, tapi saya bermain-main dengan masalah Anda dan muncul dengan pertanyaan berikut yang melarutkan LINESTRINGcatatan jalan raya menjadi MULTILINESTRINGcatatan ketika mereka memiliki nilai umum di beberapa bidang (dalam dataset saya, saya cocok dengan bidang namedan state). Saya menggunakan OGR untuk mendorong shapefile jalan raya (diubah namanya menjadi ushwys) ke PostGREsql; jadi bidang geometri saya disebut wkb_geometry. Cobalah meretas kueri ini untuk mengakomodasi data Anda dan kondisi lapangan:

SELECT 
u.name, 
u.state, 
ST_AsText( ST_Multi( ST_Collect( u.wkb_geometry ) ) ) as multilines 
FROM ushwys u
GROUP BY u.name, u.state 
ORDER BY u.state 
LIMIT 100; --########### DROP THE LIMIT WHEN YOU'RE DONE EXPERIMENTING

Jika ini berhasil, Anda bisa menggunakan ogr2ogr untuk melakukan kueri ini dan mengekspor hasil paling banyak format vektor yang Anda inginkan, seperti shapefile, GML, CSV atau yang lainnya. Untuk info tentang memanggil pertanyaan SQL dari ogr2ogr, lihat dokumentasi OGR SQL .

Sebagai referensi, saya meninjau instruksi PostGIS ST_Collect , serta situs ini yang menunjukkan pengelompokan pada beberapa bidang.

Jika Anda menemukan redaksi dari kueri ini tidak berfungsi untuk Anda, beri tahu saya dan saya akan menjawab jawaban saya sehingga tidak ada dan membingungkan orang.


PS Jika Anda tidak terbiasa menggunakan ogr2ogr untuk mendorong geodata ke PostGIS, saya menggunakan skrip ogr2ogr berikut untuk melakukan impor data saya ( hati-hati menyalin dari web dan menempel langsung ke jendela perintah ogr2ogr Anda, karena saya telah menemukan pemformatan halaman memperkenalkan linebreak dan penggantian font / karakter untuk tanda kutip ganda yang melanggar skrip ogr ):

ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=postgres dbname=gisdb password=my_password" 
"E:\GISData\UnitedStates\highways.shp" -nln ushwys -nlt geometry

[Memperbarui]

Saya ingin melihat bagaimana "penampilan" ini di QGIS setelah menjalankan kueri itu, jadi saya mengubah kueri untuk menerapkan WHEREklausa ini (yang memberi saya semua varian US Highway 65 di negara bagian Missouri):

where u.state = 'MO' and u.name LIKE '%US%65%'

Selanjutnya saya menggunakan QGIS dan plugin QuickWKT untuk memvisualisasikan semua delapan (8) MULTILINESTRINGcatatan jalan tol yang saya hasilkan . Seperti yang dapat Anda lihat di tangkapan layar, hasil akhir memang mengambil Hwy 65 dari perbatasan utara Missoui dengan Iowa sampai ke perbatasan selatannya dengan Arkansas:

masukkan deskripsi gambar di sini

Bagi saya, visualisasi ini menunjukkan bahwa permintaan saya tidak menghasilkan duplikasi atau penghapusan fitur yang tidak terduga. Jadi selanjutnya saya bertanya-tanya, "ok, yang dibubarkan mengembalikan delapan fitur, tetapi berapa banyak fitur dalam tabel asli sebenarnya mewakili Hwy 65 di Missouri?" Permintaan saya berikutnya menjawab pertanyaan itu. Tampaknya dataset asli menggunakan tiga puluh delapan (38) fitur untuk mewakili Hwy 65 di Missouri:

SELECT count(*) FROM ushwys WHERE state = 'MO' AND name LIKE '%US%65%';
-- returned 38

Pada analisis akhir, kueri mengurangi tiga puluh delapan (38) fitur menjadi delapan (8) fitur yang berbagi nilai dalam bidang nama dan negara. Pada titik ini, saya relatif yakin bahwa kueri ini berguna dan sesuai untuk melarutkan geometri bagian tunggal ke dalam geometri multi-bagian ketika tugas yang dibubarkan perlu mempertimbangkan beberapa bidang.

Bersulang. :)

elrobis
sumber
3

Di PostGIS, ada fungsi khusus untuk menggabungkan garis

ST_LineMerge - Mengembalikan (set) LineString yang dibuat dengan menjahit bersama MULTILINESTRING.

http://www.postgis.org/docs/ST_LineMerge.html

underdark
sumber
1

Dalam GRASS GIS, lihat v.build.polylines

v.build.polylines dapat digunakan untuk membangun kembali polyline yang rusak

markN
sumber