import arcpy # Získání aktivní vrstvy aprx = arcpy.mp.ArcGISProject("CURRENT") map_view = aprx.activeMap layer = map_view.listLayers()[0] # Aktivní vrstva # Pole pro třídy class_field = "CLASS" # Kontrola existence pole fields = [f.name for f in arcpy.ListFields(layer)] if class_field not in fields: raise ValueError(f"Pole '{class_field}' nebylo nalezeno ve vrstvě.") # Vytvoření slovníku s třídami pro všechny polygony polygon_classes = {row[0]: row[1] for row in arcpy.da.SearchCursor(layer, ["OID@", class_field])} # Hledání sousedních polygonů neighbors = arcpy.analysis.PolygonNeighbors( layer, "in_memory\\neighbors", "OID@", "NO_AREA_OVERLAP", "BOTH_SIDES" ) # Výběr polygonů k aktualizaci polygons_to_update = {} with arcpy.da.SearchCursor(neighbors, ["src_OBJECTID", "nbr_OBJECTID", "LENGTH"]) as cursor: for src_oid, nbr_oid, shared_length in cursor: src_class = polygon_classes[src_oid] nbr_class = polygon_classes[nbr_oid] # Kontrola rozdílu tříd if abs(src_class - nbr_class) >= 2: if src_oid not in polygons_to_update: polygons_to_update[src_oid] = [] polygons_to_update[src_oid].append((nbr_oid, nbr_class, shared_length)) # Aktualizace tříd na základě nejdelší hranice with arcpy.da.UpdateCursor(layer, ["OID@", class_field]) as cursor: for oid, current_class in cursor: if oid in polygons_to_update: # Výběr souseda s nejdelší hranicí longest_neighbor = max(polygons_to_update[oid], key=lambda x: x[2]) new_class = longest_neighbor[1] # Aktualizace hodnoty třídy cursor.updateRow((oid, new_class)) print(f"Polygon {oid} změněn na třídu {new_class}") print("Aktualizace dokončena.")