Statistik zona 2 akhirnya menyebabkan kesalahan fatal. Apakah ada alternatif lain?

Aug 19 2020

Saya baru-baru ini beralih menggunakan alat tambahan "statistik zona sebagai tabel- 2" daripada "statistik zona" biasa karena saya memiliki poligon yang tumpang tindih yang tidak ditangani oleh statistik zona. Namun, saya telah mencoba menjalankan statistik zona 2 beberapa kali sekarang dan setelah berjalan selama berjam-jam sepanjang malam, akhirnya menemui kesalahan fatal dan tidak akan selesai. Saya tidak yakin bagaimana cara mengatasi masalah ini. Saya mencoba menghitung ketinggian rata-rata dalam lebih dari 100.000 poligon penyangga, dan perlu melakukan ini beberapa kali dengan lapisan raster lainnya. Apakah ada alternatif atau cara untuk mendapatkan alat untuk menyelesaikan perintah?

Jawaban

2 FelixIP Aug 19 2020 at 06:59

Untuk mengatasi ini, Anda harus membagi poligon menjadi beberapa grup tanpa tumpang tindih. Ini disebut pewarnaan grafik .

Untuk membuat skrip di bawah ini berfungsi a) instal paket networkx dan b) jalankan:

PolygonNeighbors("POLYGONS", "neighbours", area_overlap="AREA_OVERLAP")

Naskah:

'''
creates non-adjacent groups of polygons
'''
import arcpy
import networkx as nx
infc = arcpy.GetParameterAsText(0)
table = arcpy.GetParameterAsText(1)

sourceList=[f.name for f in arcpy.ListFields(table)]
FTO=sourceList[1:3]
fromto=arcpy.da.TableToNumPyArray(table,FTO)
try:arcpy.AddField_management(infc, "COLOR","Short")
except:pass
G=nx.Graph()
G.add_edges_from(fromto)

allGroups=sorted(nx.connected_components(G), key = len, reverse=True)

arcpy.AddMessage("%i connected groups found" %len(allGroups))
D={}
for item in allGroups:
    arcpy.AddMessage(len(item))
    subG=G.subgraph(item)
    d = nx.coloring.greedy_color(subG, strategy=nx.coloring.strategy_largest_first)
    D.update(d)
    with arcpy.da.UpdateCursor(infc,("OID@","COLOR")) as cursor:
        for row in cursor:
            if row[0] not in item:continue
            row[1]=D[row[0]]+1
            cursor.updateRow(row)
arcpy.AddMessage("Done")

akan menambah dan mengisi bidang "COLOR" dengan angka dalam kisaran (1..4). Ini adalah rentang teoritis, mengharapkan sesuatu yang lebih besar, tergantung pada tingkat tumpang tindih. Saya akan mengatakan skenario terburuk adalah 7 warna. Anda mungkin sulit memasukkan kelas fitur masukan (infc) dan tabel kedekatan (tabel) jika Anda tidak ingin menetapkan skrip ke alat dengan 2 parameter.

Perhatikan bahwa skrip melompati poligon pulau, ini akan menghasilkan nilai Tidak Ada atau 0 di bidang COLOR bergantung pada sumber kelas fitur:

Anda memiliki beberapa opsi tentang cara melanjutkan:

  1. tentukan n lapisan secara manual dari POLYGONS menggunakan kueri definisi, misalnya "COLOR" = 1, jalankan statistik zona di masing-masing lapisan. Gabungkan hasil.
  2. Menulis skrip atau mengembangkan model untuk mengotomatiskan tugas-tugas di atas.

Saya menduga bahwa inilah tepatnya yang dilakukan oleh statistik zonal 2 di belakang layar, tidak yakin mengapa itu gagal, kecuali Anda mengacaukan setelan lingkungan pemrosesan dan ukuran sel atau menggunakan proyeksi yang berbeda pada raster dan buffer.