Menghitung tumpang tindih poligon dari satu Shapefile menggunakan ArcGIS Desktop?

10

Saya memiliki shapefile dengan 16.400 poligon. Setiap poligon menunjukkan perluasan spesies burung untuk seluruh dunia.

masukkan deskripsi gambar di sini

Sekarang saya harus menghitung poligon yang tumpang tindih. Saya mencobanya dengan serikat dan membubarkan (menghitung serikat), tetapi serikat tidak bekerja untuk banyak poligon.

Kemudian saya mencoba memotong benua, tetapi ini juga tidak berfungsi karena banyaknya poligon. Apalagi saya mencoba metode ini , juga tidak berhasil.

Karena itu saya bertanya kepada Anda, apakah ada cara untuk menghitung poligon yang tumpang tindih jika 16400 poligon berada dalam satu bentuk?

Saya bekerja dengan 10.0 dan dapat bekerja dengan 10.2. Solusi ArcPy juga luar biasa.

Saat ini saya sedang berpikir tentang membuat jala ikan dan beralih pada baris shp dengan 16400 poligon dan menulis 1 ke bidang nilai sel jala jika poligon ada di sel ini dan daripada mengambil baris berikutnya (poligon) dan jika ini juga dalam hitungan sel jala +1.

Tetapi saya tidak tahu apakah ini solusi yang baik dan bagaimana mewujudkannya. Atau saya harus belajar R untuk menggunakan pendekatan ini .

Hasilnya: Ini harus berupa bentuk di mana Anda memiliki poligon baru dari yang tumpang tindih dan bidang di mana tumpang tindih dihitung.

Jadi pada akhirnya harus ada shapefile di mana Anda dapat melihat berapa banyak spesies burung yang ditemukan di tempat yang sama.

Nora
sumber
masalah Anda adalah masalah karena ukuran dataset Anda. Jawaban (dan tautan yang Anda usulkan) benar tetapi Anda akan mengalami masalah memori. Mungkin Anda bisa terlebih dahulu mencoba mengintegrasikan data Anda dengan beberapa ratus meter (berdasarkan presisi yang diharapkan) untuk menghindari penciptaan miliaran sliver poligon). Pastikan untuk mengerjakan salinan karena itu akan mengubah data Anda.
radouxju
1
Bagilah shapefile kami menjadi shapefile regional, kemudian jalankan analisis pada shapefile regional, lalu bubarkan untuk mendapatkan file lengkap lagi.
til_b
Saya mencoba memotong bentuk ini hanya dengan satu negara tetapi saya mendapatkan kembali kesalahan 999999.
Nora
1
Sudahkah Anda melihat alat Dice untuk mengurangi kompleksitas poligon Anda? Juga jika Anda mendapatkan kesalahan 999999 hanya mencoba untuk klip data Anda, apakah Anda sudah mencoba alat periksa geometri untuk melihat apakah memunculkan wawasan?
Hornbydd
2
Saya melakukan pemeriksaan Geometri parsial pada data dan ada banyak persimpangan diri. Saya akan menyarankan 1. Pastikan penggunaan RAM maksimum dan pagefile besar 2. perbaikan geometri 3. Jika perlu, sederhanakan poligon 3. subset data menjadi 1 / 3s atau 1 / 4s (atau apa pun yang diperlukan) 4. Jalankan alur kerja Union-Dissolve-Rasterize seperti dalam jawaban ini 5. Jumlah raster.
Cotton.Rockwood

Jawaban:

9

Saya akan merekomendasikan menggunakan alat Fitur Count Overlapping (Analisis) .

Menghasilkan fitur tumpang tindih terencana dari fitur input. Hitungan fitur yang tumpang tindih ditulis ke fitur output.

masukkan deskripsi gambar di sini

Harun
sumber
Saya juga mencoba ini, dan itu tidak berfungsi untuk shp saya (terlalu besar). terima kasih telah menjawab
Nora
1
@ Harun tautannya sudah mati. Sekarang ada implementasi ini dalam Pro: pro.arcgis.com/en/pro-app/tool-reference/analysis/…
Albert
1
Terima kasih @Albert, pos telah diperbarui berdasarkan rekomendasi Anda.
Aaron
5

Menggunakan token geometri lengket, Anda dapat mencoba sesuatu seperti ini:

masukkan deskripsi gambar di sini

import os
import arcpy

arcpy.env.workspace = r"" #path to workspace
arcpy.env.overwriteOutput = 1

polygon_fc = r"" #path to polygon fc

base = [row for row in arcpy.da.SearchCursor(polygon_fc,["OID@","SHAPE@"])]
compare = base

overlaps_stats = {}

for b in base:
    for c in compare:
        if b[1].overlaps(c[1]):
            #print "{0} overlaps {1}".format(b[0],c[0])
            if overlap_stats.has_key(b[0]):
                overlap_stats[b[0]].append(c[0])
            else:
                overlap_stats[b[0]] = [c[0]]

for key,value in overlap_stats.iteritems():
    print "Polygon {0}:  Overlaps: {1}.".format(key,len(value))

Untuk data sampel di atas, kode akan mengembalikan jumlah tumpang tindih berikut: masukkan deskripsi gambar di sini

Kode apa adanya hanya akan mengembalikan jumlah poligon yang memiliki setidaknya satu tumpang tindih.

Nxaunxau
sumber
@ Nxau: Oke, saya kira saya membuat kesalahan untuk menjelaskan bagaimana hasilnya nanti. Seharusnya bentuk di mana Anda memiliki poligon baru dari yang tumpang tindih. Misalnya dalam gambar Anda lingkaran 4 dan 5 tumpang tindih. Bentuk baru harus memiliki tiga poligon. (Union tidak bekerja untuk bentuk sebesar ini). Area yang tumpang tindih harus memiliki nilai 2 di bidang dan sisa lingkaran 4 dan 5 harus memiliki nilai 1 di bidang ini. Jadi pada akhirnya harus ada shapefile di mana Anda dapat melihat berapa banyak spesies burung yang ditemukan di tempat yang sama. Terima kasih untuk skrip Anda!
Nora
5

Metode yang sangat sederhana adalah:

  1. Uni shapefile dengan dirinya sendiri;
  2. Ubah output multi bagian menjadi satu bagian ;
  3. Gunakan alat gabungan spasial untuk menghitung tumpang tindih (gunakan opsi kecocokan ARE_IDENTICAL_TO);
  4. Simbol menggunakan join_countbidang.

masukkan deskripsi gambar di sini

pengguna2856
sumber
1

Saya kira Anda sudah mencoba metode ini: Menghitung dan meraster tumpang tindih poligon di ArcGIS Desktop?

16.400 poligon tidak banyak. Namun, salah satu solusi potensial adalah dengan hanya melakukan Spasial Gabung biasa. Dalam ArcMap toolbox, > Analysis Tools -> Overlap -> Spatial Join.

Atur kedua fitur targetdan joinke dataset yang sama dan tentukan output. Biarkan sisa pengaturan.

Setelah beberapa saat, Anda akan mendapatkan kembali shapefile yang berisi kolom "gabung hitung". Kurangi 1 dari ini (karena jelas setiap fitur harus berpotongan sendiri), dan itu harus menjadi jumlah "tumpang tindih" (sebenarnya berpotongan) untuk setiap poligon.

Saya baru saja melakukannya

GIS-Jonathan
sumber
Ya, saya sudah mencoba pendekatan dari tautan. Tetapi untuk menggunakan persatuan tidak mungkin untuk hal ini. Mencoba Bergabung Spasial Saya mendapatkan ini kembali: ERROR 000426: Out Of Memory.
Nora
Saya menjalankannya pada mesin hanya dengan RAM 4GB dan memiliki sekitar 5 kali lebih banyak fitur, jadi saya terkejut itu tidak bekerja dengan angka yang jauh lebih rendah. Anda mungkin memiliki terlalu banyak simpul dalam data Anda (milik saya sekitar 60MB; seberapa besar file .shp Anda?). Coba generalisasikan.
GIS-Jonathan
Jika hanya shp dalam fgdb, fgdb memiliki 1,73 GB. Dalam sebuah folder bentuknya memiliki 2,00GB.
Nora
Saya telah menggunakan kumpulan data ini juga dan saya pikir banyak masalah muncul karena beberapa poligon memiliki banyak bagian. Itu bersamaan dengan resolusi membuat ini tugas yang sangat intensif memori.
Cotton.Rockwood
@ Cotton.Rockwood: Dan Anda menemukan solusinya dalam R, bukan? Saya berpikir untuk menggunakan kotak peralatan 'Hitung Tumpang Tindih Poligon' dengan input 500 poligon (33 pilihan) daripada poligon untuk raster dengan nilai "join count" dan pada akhirnya hitung raster (ModelBuilder). Butuh waktu lama ...
Nora
1

Saya mengunduh dan mencoba alat "Hitung Tumpang Tindih Poligon". Mungkin berhasil, tetapi butuh waktu yang sangat lama (mungkin karena ukuran file, tetapi input saya FC hanya memiliki <5.000 catatan).

Sementara saya menunggu alat itu dijalankan, saya membuka jendela ArcMap lain dan hanya butuh beberapa langkah cepat untuk mendapatkan apa yang saya inginkan. 1) Gabung Spasial - menggunakan kelas fitur yang sama dengan Target dan Gabung Fitur dan memilih opsi "Gabung Satu ke Banyak". 2) Larutkan - menggunakan output dari langkah terakhir. Gunakan "TARGET_FID" sebagai bidang pembubaran dan untuk statistik Anda dapat SUM bidang "Gabung_Count" atau COUNT bidang "JOIN_FID". 3) Dalam file output dari dari langkah 2, gunakan kalkulator bidang kurangi 1 dari bidang statistik ("SUM_Join_Count", atau "COUNT_JOIN_FID") - karena setiap fitur berpotongan dengan sendirinya.

Saya sarankan menggunakan metode ini di atas alat "Count Overlapping Polygon". Saya mulai menjalankan alat COP ~ 5 menit sebelum memulai metode Join-> Dissolve ini dan hasilnya memberi saya cukup waktu untuk menulis ini sebelum alat "Count Overlapping Polygon" selesai.

Semoga ini membantu!

Brian di Buffalo
sumber