Bölgesel istatistikler 2, ölümcül bir hataya neden olur. Bir alternatif var mı?
Kısa bir süre önce, düzenli "bölgesel istatistikler" yerine "bölgesel istatistikleri tablo 2 olarak" tamamlayıcı araç kullanmaya geçtim çünkü bölgesel istatistiklerin ilgilenmediği üst üste binen çokgenlerim var. Bununla birlikte, şimdi birkaç kez bölgesel istatistikleri 2 çalıştırmayı denedim ve gece boyunca birçok saat koştuktan sonra ölümcül bir hatayla karşılaştı ve bitmeyecek. Bu sorunu nasıl düzelteceğimden emin değilim. 100.000'den fazla tampon çokgeninde ortalama yüksekliği hesaplamaya çalışıyorum ve bunu diğer raster katmanlarıyla birçok kez yapmam gerekecek. Aracın komutu tamamlamasını sağlamanın bir alternatifi veya yolu var mı?
Yanıtlar
Bunu çözmek için poligonlarınızı örtüşmeden gruplara ayırmanız gerekir. Buna grafik renklendirme denir .
Aşağıdaki komut dosyasını çalıştırmak için a) networkx paketini kurun ve b) çalıştırın:
PolygonNeighbors("POLYGONS", "neighbours", area_overlap="AREA_OVERLAP")
Senaryo:
'''
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")
"COLOR" alanını ekler ve aralıktaki (1..4) sayılarla doldurur. Bu teorik aralıktır, örtüşmelerin boyutuna bağlı olarak daha büyük bir şey bekleyin. En kötü senaryo 7 renktir diyebilirim. 2 parametre ile araca komut dosyası atamak istemiyorsanız, giriş özelliği sınıfını (infc) ve bitişiklik tablosunu (tablo) sabit kodlayabilirsiniz.
Komut dosyasının ada çokgenlerini atladığını unutmayın; bu, özellik sınıfının kaynağına bağlı olarak COLOR alanında Yok veya 0 değeriyle sonuçlanır:

Nasıl devam edeceğiniz konusunda birkaç seçeneğiniz var:
- Tanım sorgularını kullanarak POLYGONS'tan n katmanı manuel olarak tanımlayın, örneğin "COLOR" = 1, her biri için bölgesel istatistikleri çalıştırın. Sonuçları birleştirin.
- Yukarıdaki görevleri otomatikleştirmek için komut dosyası yazın veya model geliştirin.
Bunun tam olarak bölgesel istatistik 2'nin perde arkasında yaptığı şey olduğundan şüpheleniyorum, işlem kapsamını ve hücre boyutu ortam ayarlarını karıştırmadığınız veya tarama ve tamponlarda farklı projeksiyonlar kullanmadığınız sürece neden başarısız olduğunu bilmiyorum.