Bagaimana cara menghubungkan saluran dalam jaringan?

15

Saya memiliki shapefile garis dan poligon lain. Ketika dua atau lebih garis memotong poligon, mereka harus terhubung (putus), tetapi kadang-kadang selama digitalisasi manual ini tidak terjadi. Saya perlu menemukan dan memperbaiki semua kesalahan ini. Saya menggunakan v.cleandari GRASS GIS dan secara otomatis membentak banyak simpul, yang bagus, tetapi beberapa garis terputus lebih jauh dari toleransi yang saya berikan dan jika saya meningkatkan toleransi terlalu banyak itu mulai menghasilkan jenis kesalahan lainnya.

masukkan deskripsi gambar di sini

Ada ide?

vascobnunes
sumber
1
Secara spasial gabungkan titik akhir polyline ke poligon dan rangkumlah jumlah dengan poligon. Untuk setiap poligon yang mengandung lebih dari satu titik akhir yang bergabung, buatlah polyline yang terdiri dari segmen yang memancar dari pusat massa titik akhir tersebut ke titik akhir itu sendiri ("bintang"). Gabungkan bintang-bintang dengan polyline asli. Bersihkan hasilnya untuk menghilangkan persimpangan yang muncul. Setiap langkah ini didukung (dan dapat diotomatisasi) oleh GIS yang sepenuhnya mampu. Karena saya tidak terbiasa dengan detail QGIS atau GRASS, saya menawarkan solusi ini hanya sebagai komentar.
whuber
tapi kadang-kadang semua garis berakhir di luar poligon ...
vascobnunes
1
Apa yang dilambangkan oleh garis-garis ini? Jika mereka sungai, apakah mereka dikodekan dengan informasi tambahan seperti nama atau Stream Order? Apakah jaringan diarahkan (seperti jaringan sungai) seperti mengatakan dua aliran urutan pertama harus mengalir ke aliran urutan kedua. Saya kira saya mencoba untuk mengatakan Anda mungkin ingin menaruh beberapa intelijen di balik proses gertakan untuk mengatasi masalah dengan gertakan yang cerdik dengan meningkatkan toleransi pencarian.
Hornbydd
1
Komentar Anda tampaknya bertentangan dengan pertanyaan itu. Pertanyaannya sepertinya mengatakan Anda ingin mengambil simpul yang termasuk dalam poligon umum. Jika sebuah titik jatuh di luar poligon, Anda tidak memberikan kriteria bagaimana hal itu seharusnya diperlakukan! Jadi, apa sebenarnya hubungan antara poligon dan polylines?
whuber
1
Saya setuju dengan whuber; mungkin Anda harus mengklarifikasi pertanyaan itu. Kedengarannya seperti Anda menginginkan garis yang 'di' dalam poligon, serta 'tutup' tetapi tidak termasuk yang 'di' tetapi bergabung dengan benar?
Darren Cope

Jawaban:

7

Pemahaman saya tentang masalahnya adalah sebagai berikut:

Jika titik akhir polyline memotong poligon, maka polyline harus dihubungkan (dengan menambah atau menyesuaikan simpul) ke semua titik akhir polyline tambahan yang memotong poligon yang sama.

Beberapa titik akhir polyline tidak memotong poligon, menjadi undershoots, tetapi ini harus dihubungkan seperti di atas.

Jawaban ini didasarkan pada beberapa yang sudah diberikan, tetapi tidak lengkap karena saya tidak mengetahui semua perintah QGIS - mungkin orang lain dapat menambahkan ini?

  1. Untuk setiap polyline, ekstrak koordinat titik akhir ( Vektor> Alat Geometri> Ekstrak node kemudian rapikan) dan hitung apakah mereka berada dalam poligon ( Vektor> Alat Penelitian> Pilih berdasarkan Lokasi ).

  2. Untuk titik akhir polyline yang berada dalam poligon, perluas ujung polyline tersebut ke tengah poligon (Ekstrak pusat poligon menggunakan Vector> Geometry Tools> Polygon centroid , tidak yakin tentang modifikasi garis, meskipun Anda mungkin dapat bekerja dengan simpul polyline sebagai titik dan tambahkan yang tambahan dengan penomoran yang sesuai sebelum merekonstruksi polyline yang dimodifikasi menggunakan plugin Points to Paths)

    Anda menyebutkan bahwa mungkin ada situasi di mana beberapa atau semua garis telah terhubung dengan benar, dalam situasi ini (dapat diidentifikasi oleh titik akhir polyline bertepatan) Anda dapat memilih untuk menggunakan lokasi titik akhir coincident bukannya poligon centroid sebagai titik untuk memperpanjang setiap polyline tambahan yang tidak terhubung ke untuk poligon itu.

  3. Untuk titik akhir polyline yang berada di luar poligon, perluas ujung polyline tersebut ke tengah poligon terdekat. Sekali lagi, saya tidak yakin tentang menghitung poligon terdekat, meskipun modul GRASS v.distance terlihat melakukan triknya.

Andy Harfoot
sumber
Itulah alasan yang bagus untuk solusi masalah. Saya juga mendapatkan sesuatu seperti itu dengan jawaban dari alexgleith. Tetapi saya terjebak dalam operasi untuk "memperpanjang ujung polyline ke pusat poligon terdekat". Pertanyaannya sekarang adalah bagaimana saya melakukannya? Jika saya menggunakan v.clean.snap ke centroid poligon itu masih akan memindahkan setiap simpul yang bukan titik akhir ...
vascobnunes
Salah satu pendekatan akan mengkonversi polylines ke titik seperti yang dijelaskan dan jika perlu menambahkan titik tambahan di awal atau akhir garis yang diberikan sebagaimana ditentukan oleh lokasi titik awal atau akhir yang ada. Lokasi titik yang ditambahkan akan menjadi pusat massa poligon, dan titik tersebut akan dikaitkan dengan nomor urut titik -1 atau 1000000 untuk menempatkannya di awal atau akhir dari polyline. Ini kemudian akan memungkinkan polylines untuk direkonstruksi menggunakan alat Points to Path
Andy Harfoot
2

Saya pikir saya bisa melakukannya dengan beberapa algoritme khusus ... Perhatikan dengan pasti bagaimana Anda ingin mengimplementasikannya, tapi saya pikir itu akan berhasil.

Untuk setiap baris, untuk setiap titik akhir, lakukan satu titik dalam poligon untuk titik di titik akhir dan hubungkan ke poligon.

Kemudian, untuk setiap poligon, jika ada lebih dari satu titik akhir yang terhubung, saya akan menggabungkan (memindahkan) semuanya ke koordinat rata-rata, atau ke pusat massa poligon mungkin.

Itu sangat sederhana. Tetapi tidak tersedia di operator standar. Saya pikir itu bisa dilakukan di ArcGIS dengan waktu coding hari.

Catatan lain, pada gambar yang Anda posting, salah satu garis berada di luar poligon ... Anda bisa menangani ini dengan cara yang lebih sederhana dengan hanya menemukan simpul terdekat ke setiap ujung simpul, memastikan bahwa kedekatannya saling menguntungkan (saya pikir itu adalah diperlukan, sehingga Anda memiliki simpul hanya dalam satu cara), maka Anda dapat memindahkannya ke posisi rata-rata dari simpul.

Alex Leith
sumber
1

Masalah menarik! Saya tidak bisa memikirkan cara untuk melakukan pemotretan secara otomatis, tetapi inilah langkah dalam mengidentifikasi area untuk setidaknya mencari koreksi manual:

  • Tambahkan kolom baru ke layer baris Anda, dan atur sama dengan '1' untuk semua fitur.
  • Di bawah Vektor> Gabung Attributes by Location, atur layer Target Anda ke layer poligon Anda, dan layer garis sebagai layer join. Kemudian pilih "Ambil Ringkasan Fitur yang Bertautan" dan klik "Jumlah." Berikan lokasi untuk file output, dan "OK."
  • File poligon yang dihasilkan akan menjadi lapisan poligon asli Anda, tetapi dengan beberapa bidang tambahan. Bidang SUM adalah apa yang Anda inginkan; ketika 2, itu berarti bahwa Anda dapat memperbesar dan secara manual mengambil fitur.

Bergantung pada situasi (jumlah fitur, jumlah yang ada dalam situasi ini vs yang tidak, dll.) Ini dapat menghemat waktu Anda.

EDIT: Anda mungkin juga ingin menggunakan poligon dengan jumlah 2 untuk membuat sub-set lapisan garis Anda, kemudian jalankan pembersihan pada mereka yang memiliki toleransi lebih besar agar tidak mengubah fitur lainnya.

Darren Cope
sumber
Saya sudah melakukan hal seperti itu. Saya bahkan menggunakan v.net untuk mengambil node untuk garis dan membuat pilihan spasial dari poligon yang cocok dengan node. Saya menemukan banyak kesalahan untuk memperbaiki menggunakan ini, tetapi saya masih memiliki 3 masalah besar: 1) ada ribuan kesalahan untuk memperbaikinya secara manual, yang membutuhkan waktu lama; 2) Saya tidak mendapatkan semua kesalahan yang menyebabkan dalam beberapa kasus garis atau node bahkan tidak 'menyentuh' poligon; 3) saya mendapatkan kesalahan yang bukan kesalahan, karena ketika dua jalur terhubung dengan benar, mereka juga dipilih.
vascobnunes
0

setelah Anda memiliki titik akhir, saya akan melakukan diagram laba-laba yang mengambil centroid poligon sebagai fasilitas dan titik akhir dari garis terdekat sebagai target. Anda melakukan analisis diagram laba-laba dan sebagai hasilnya Anda akan memiliki segmen untuk setiap polyline.

Ini akan bekerja bahkan untuk mereka yang berakhir di luar poligon. Bagaimana melakukannya di QGIS saya tidak tahu, maaf, tapi saya akan melakukan ini dalam produk-produk ESRI yang saya ketahui dengan baik. Itulah yang saya mengerti ketika whuber, dalam balasan pertama, menyarankan untuk membangun "bintang".

Saya cukup yakin ada orang di sini yang tahu bagaimana melakukan analisis seperti itu di QGIS

ankilosado
sumber
4
Selamat datang di GIS Stack Exchange! Saya perhatikan bahwa jawaban Anda telah menarik beberapa downvotes dan curiga itu karena Anda telah menyarankan alternatif untuk teknologi yang digunakan penanya (GRASS / QGIS). Rekomendasi saya adalah untuk mengapungkan saran seperti komentar daripada jawaban dan jika penanya tampaknya tertarik maka transfer informasi ke jawaban.
PolyGeo