Menyalin atribut dari satu lapisan poligon ke lapisan lainnya?

11

Saya memiliki masalah yang sepertinya tidak bisa saya ingatkan. Saya memiliki dua lapisan poligon:

  • Poligon A - adalah bagian dari poligon B dengan bidang yang sama dan memiliki poligon identik dengan Poligon B
  • Polygon B - memiliki data atribut yang saya inginkan di Polygon A

Bagaimana ini bisa dilakukan? Saya mencoba alat QGIS "Gabung Atribut berdasarkan Lokasi" tetapi karena beberapa poligon ada di dalam yang lain, ia cenderung menghubungkan ke persimpangan pertama yang ditemukannya (poligon luar).

Diego R
sumber
buat centroids (titik) dari Polygon A dan gabungkan atribut ke B dan ekspor ke file baru untuk menjaga atribut dari A.
Mapperz
3
@Mapperz Ini adalah pendekatan yang berbahaya, karena bisa menghasilkan kesalahan walaupun biasanya akan menghasilkan jawaban yang kelihatannya bagus. Jika poligon saling tumpang tindih, semua taruhan dimatikan. Bahkan ketika tidak ada tumpang tindih, dimungkinkan untuk pusat massa poligon berada di dalam poligon yang berbeda (tidak tumpang tindih). Kebenaran dapat dipastikan secara umum hanya ketika semua poligon dalam A tidak tumpang tindih dan cembung.
whuber
+1 @ Diego - pertanyaan Anda mengarah pada diskusi / debat yang cukup menarik; yang menarik pada saat itu!
Dano

Jawaban:

9

@ Dano dengan benar memunculkan beberapa masalah yang sebaiknya ditangani dalam balasan penuh.

Satu kesulitan , sudah dicatat oleh @Celenius, adalah bahwa gabungan antara B dan A (dalam arah manapun) menduplikasi semua bidang; akan sulit untuk memperbaikinya. Saya telah menyarankan dalam komentar bahwa cara mudah yang jelas (ekspor ke spreadsheet) menimbulkan pertanyaan tentang integritas data. Kesulitan lain , yang sudah ditangani oleh proposal Celenius, menyangkut penyelesaian masalah ini ketika tidak ada kombinasi atribut yang dapat berfungsi sebagai kunci untuk A dan B, karena itu menghalangi bergabungnya basis data. Penggabungan spasial mengatasi masalah itu.

Lalu, apa solusi yang baik? Satu pendekatan menggunakan A untuk mengidentifikasi catatan B yang sesuai yang berisi data yang diinginkan. Bergantung pada asumsi tentang konfigurasi poligon - apakah tumpang tindih, apakah beberapa dapat mengandung yang lain, dll - ini dapat dilakukan dengan berbagai cara: menggunakan satu lapisan untuk memilih objek di yang lain, atau melalui gabungan. Intinya di sini adalah bahwa semua yang ingin kita lakukan pada tahap ini adalah memilih subset dari B yang sesuai dengan A.

Setelah mencapai seleksi itu, ekspor seleksi dan biarkan ganti A. Selesai .

Solusi ini mengasumsikan bahwa semua bidang di B dimaksudkan untuk menggantikan rekan-rekan mereka di A. Jika tidak, maka sangat diperlukan untuk melakukan penggabungan 1-1 dari B (sumber) ke A (tujuan). Gabung berdasarkan pengidentifikasi adalah yang terbaik, tetapi membuat gabung pada identitas poligon (Celenius) berfungsi dengan baik jika id tidak tersedia dan tidak ada peluang bentuk poligon yang sesuai di A dan B mungkin berbeda, namun sedikit . (Ini adalah titik yang halus, dan kemungkinan penyebab kesalahan berbahaya, karena pengeditan sebelumnya pada B ke poligon yang tidak sesuai dengan A masih bisa secara tidak terlihat memodifikasi poligon lain dalam B jika GIS "patah" atau "mempertahankan topologi" atau secara otomatis membuat perubahan global selama pengeditan lokal.)

Pada titik ini, ada dua salinan dari setiap bidang: jika [Foo] adalah bidang umum untuk A dan B, maka gabungannya berisi A. [Foo] dan B. [Foo]. Menggunakan perhitungan lapangan , salin B. [Foo] ke A. [Foo]. Ulangi untuk semua bidang yang dibutuhkan. Setelah ini selesai, hapus gabungan.

Meskipun prosedur ini bisa sedikit berat ketika banyak bidang yang terlibat, manfaatnya termasuk

  • Sangat mudah dan cepat untuk skrip.
  • Scripting itu meninggalkan jejak audit yang mendokumentasikan pemrosesan yang dilakukan pada data. Ini sangat penting untuk melindungi integritas data.
  • Itu membela terhadap beberapa jenis kesalahan grosir, seperti mempertahankan bidang yang salah setelah bergabung (dengan demikian menjaga data lama, bukan data baru untuk bidang itu) atau menghapus bidang penting.
  • Ini memanfaatkan pertahanan built-in yang ditawarkan oleh sistem manajemen database, seperti penegakan tipe data dan penegakan aturan bisnis, yang beroperasi untuk mencegah dan mengidentifikasi kesalahan dan menjaga konsistensi di antara semua tabel dan lapisan dalam database.

Beberapa prinsip panduan yang terlibat dalam saran ini adalah

  1. Gunakan sistem manajemen basis data Anda untuk memproses data daripada menggunakan perangkat lunak yang tidak dirancang atau tidak cocok untuk tugas ini.
  2. Hindari mengubah struktur basis data (seperti menghapus atau menambah bidang) saat operasi tidak benar-benar membutuhkannya.
  3. Gunakan kemampuan perangkat lunak untuk otomatisasi untuk menyederhanakan pekerjaan, mendokumentasikannya, dan membuat operasi dapat direproduksi.

Orang mungkin keberatan bahwa dalam banyak kasus ada cara yang lebih cepat dan mudah untuk mencapai hasil yang sama. Ya, mungkin ada, dan mereka bisa efektif dan biasanya mereka bekerja ketika dilakukan dengan hati-hati. Tetapi solusi yang berisiko data sulit untuk direkomendasikan dan dipertahankan sebagai jawaban tujuan umum. Mereka paling baik digunakan dalam situasi satu kali dengan dataset kecil di mana korupsi dalam data harus dengan cepat menjadi jelas dan konsekuensi dari kesalahan tersebut tidak material.

whuber
sumber
+1 @ whuber - Sudah jelas bahwa Anda mencoba menimbang semua variabel di sini; jawaban yang dipikirkan dengan baik. Silakan lihat tambahan untuk jawaban asli saya, karena saya akan kehabisan ruang di kotak komentar.
Dano
1
untuk orang-orang yang bertanya-tanya apa yang terjadi pada "Celenius" yang menyebutkan berbagai tempat di utas ini: sekarang dikenal sebagai @djq, dan jawabannya ada di sini . Kudos to wayback machine: web.archive.org/web/20120127210858/http://gis.stackexchange.com/…
matt wilkie
5

Di Arcmap Anda bisa secara spasial bergabung dengan Polygon B ke Polygon A; ini akan menghubungkan atribut. Karena nama bidangnya sama, maka akan membuat beberapa kombinasi nama baru.

djq
sumber
Inilah yang akan saya masukkan. Di mata saya, jawaban singkat ini adalah yang benar.
Simon
4

Ekspor tabel untuk Shapefile "B" ke Excel dan hapus kolom yang redunden, dan semua kolom yang berisi informasi yang tidak Anda butuhkan. Pastikan Anda menyimpan kolom pengenal yang dibagikan, lalu menyimpannya di folder yang sesuai. Masuk ke ArcMap, tambahkan tabel, lalu Mouse kanan pada Shapefile "A" dan lakukan penggabungan tabel . Tautan harus mengarah ke video tentang cara melakukan ini.


@ whuber - Seluruh pendekatan tepat, dan memastikan integritas data. Satu-satunya hal yang bisa saya katakan untuk membantah jawaban ini, adalah bahwa situasi / proyek tertentu tidak memberi kita waktu atau anggaran untuk menjadi metodis dalam pendekatan kita.

Contoh nyata-ke-kehidupan:

Sebuah Junior Mining Company duduk di atas badan bijih besar dengan ratusan juta dolar dalam bentuk infus tunai bertumpu pada kemampuan mereka untuk "membuktikan" sumber daya tersebut. Tinjauan desktop dari publikasi / peta geologi / data mengarah ke program bor yang sangat bertarget, dan sangat mahal. Ketika pengujian kembali dari jalankan pertama, nilai-nilai ini ditandai ke lokasi titik masing-masing melalui tabel bergabung, dan dipompa kembali dalam format Excel di mana data dengan susah payah disiapkan untuk diimpor ke DataMine (untuk interpolasi 3D atau bijih).

Dalam pengalaman saya , ahli Geologi proyek mengharuskan data ini disiapkan di Excel, yang mengikuti SETIAP aturan format / konvensi ke surat (tidak ada spasi, tidak ada karakter khusus, dll) dan bahwa file impor DataMine dikirim dalam format .csv (saat itu pula). Ini akan mengarah pada lebih banyak investasi dalam pengeboran yang ditargetkan, dan kami akan meninjau kembali proses (dalam beberapa kasus) berkali-kali. Semua ini umumnya terjadi pada timeline yang sangat ketat dan kritis.

Masing-masing dari kita memiliki kisah kita sendiri, dan berbagai pengalaman kita sendiri yang telah kita masukkan ke dalam pendekatan kita tentang bagaimana kita melakukan sesuatu. Karena itu, pengalaman saya telah melihat Excel sebagai kebutuhan mutlak, dan alat vital dalam alur kerja saya; itu yang saya tahu. Kami mengambil setiap tindakan pencegahan QA / QC dalam persiapan data ini. Di mana kalian akan menghindar dari Excel, saya tidak punya pilihan selain menggunakannya.

Dano
sumber
(-1) Menggunakan Excel untuk bergabung tidak hanya lebih sulit daripada mencapainya dengan GIS atau RDBMS tetapi juga mengundang kesalahan serius.
whuber
8
Excel sederhana, ini berfungsi, dan karena itu mungkin bertanggung jawab atas kesalahan grosir yang lebih banyak tidak terdeteksi daripada perangkat lunak apa pun yang pernah diproduksi. Itu melanggar prinsip-prinsip dasar DBMS yang dikembangkan untuk melindungi terhadap kesalahan yang membuat Excel terlalu mudah untuk dilakukan, seperti (1) menyortir beberapa kolom tetapi tidak yang lain; (2) kesalahan ketik yang mengubah tipe data; (3) penekanan tombol yang menyimpang data; (4) penghapusan baris atau kolom secara tidak sengaja; (5) konversi data yang tersembunyi, seperti teks ke tanggal; (6) pemotongan data secara tersembunyi; (7) pembulatan tersembunyi dari nilai numerik; dan masih banyak lagi.
whuber
2
jawaban dan komentar yang dihasilkan ini adalah ilustrasi yang bagus tentang bagaimana jawaban "buruk" dapat memberikan hasil yang baik, mengungkapkan info yang mungkin tidak terungkap. Tolong jangan merasa seperti Anda harus menghapusnya untuk menghindari "menerima pukulan".
matt wilkie
3
... dan untuk menggantikannya, PERTANYAAN HEBAT adalah menanyakan mengapa menggunakan Excel untuk memproses data dapat menyebabkan masalah yang sangat serius. Dan cara menggunakannya dengan aman.
matt wilkie
1
(+1) Untuk hasil edit yang bijaksana dan dijelaskan dengan baik. @matt Periksa diskusi di stats.stackexchange.com tentang Apa yang akan menjadi cara yang baik untuk bekerja dengan kumpulan data besar di Excel? dan Excel sebagai meja kerja statistik .
whuber
1

Pada akhir 1990-an, kami menerima pembaruan berskala besar untuk semua waterbodies dan aliran air kami, yang mencakup sekitar 55 lembar peta NTS dan ribuan fitur yang tidak teringat. Kami perlu menjaga atribut nilai tambah dari hidrologi lama kami (nama-nama danau, ketinggian permukaan, dll.) Dan mengganti geometri. Geometri lama dan baru cukup dekat sehingga kami dapat menjamin bahwa centroid dari setiap poligon akan tetap terikat oleh batas poligon baru - ini adalah poin penting, tanpa kepastian dasar ini, pendekatan di bawah ini bukanlah ide yang baik.

Solusi dalam kasus khusus ini bukannya membawa atribut ke geometri, membawa geometri ke atribut. Jadi, secara konseptual:

  1. dari * Layer_with_attributes *, hapus poligon tetapi simpan catatan tabel,
  2. dari * Layer_with_polys * salin dan tempel geometri ke * Layer_with_attributes *
  3. bergabung dan simpan.

Lihat di sini untuk deskripsi dan resep yang lebih luas untuk . Saya tidak yakin bahkan mungkin di Arcgis atau Qgis modern untuk menghapus geometri tanpa secara bersamaan menghapus catatan atributnya, tapi hei, kalau-kalau ada, inilah idenya.

matt wilkie
sumber
1

Saya tidak yakin, tetapi mungkin beberapa operasi kesetaraan DBMS pada bidang Bentuk di SQL (?). Tampak bagi saya bahwa jika dua geometri identik =operator SQL harus mengembalikan true ( WHERE A.Shape = B.Shape).

Jika ini benar untuk database yang Anda gunakan, Anda harus dapat melakukan join spasial menggunakan sintaksis yang sama dengan yang Anda lakukan untuk join non-spasial.


Terlihat metode ST_Equals (standar OGC) dapat digunakan untuk ini.

Kirk Kuykendall
sumber
0

Seperti biasa, ganja itu benar. Anda perlu memikirkan secara menyeluruh tentang proses Anda. Terutama jika ini adalah kumpulan data yang besar dan operasi ini akan dilakukan berkali-kali atau datanya kritis.

Pertimbangkan data dan tanggung jawab Anda:

Apa yang telah kau lakukan?

Apa yang sedang kamu lakukan?

Apa yang ingin Anda lakukan?

Dan selalu bertanya: Mengapa?


Sekarang untuk satu jawaban mudah yang ditujukan langsung pada pertanyaan yang diajukan. Ingatlah selalu ada setidaknya 5 cara untuk melakukan sesuatu tetapi biasanya hanya satu cara terbaik.

Mengasumsikan fullset memiliki setiap atribut yang Anda inginkan berada di subset dan subset tidak memiliki apa pun di fullset kecuali informasi ketinggalan jaman.

Mengira bahwa topologi subset cocok dengan fullset (termasuk Asal / Proyeksi dan Toleransi XY).

1) Gunakan Fitur untuk Menunjuk dengan mencentang "Di dalam" dan membuat kelas fitur poin atau shapefile dari subset.

2) Gunakan Select by Spatial Join untuk menemukan semua poligon dalam set lengkap yang sesuai dengan subset berdasarkan pada kelas fitur Point baru atau shapefile.

3) Ekspor Seleksi dari set penuh, dan itu bisa menjadi subset baru Anda.

pengguna23715
sumber
0

Tentunya, jika Polygon A adalah subset dari Polygon B, pendekatan termudah adalah untuk mengulang melalui Polygon A, gunakan ID yang ada di Polygon A (dan B jika A adalah subset atau B) untuk mencari data baris dalam Poligon B dan kemudian perbarui baris dalam Poligon A.

Berbulu
sumber