Meine Daten bestehen aus zwei Feature-Classes:
- Punkte = Punkte, die Bäume darstellen
- Polygone = Polygone, die% Baldachin Fläche für Fläche darstellen. Jedes Polygon in der FC hat eine prozentuale Überdachungsmessung in den Attributen.
Ich versuche Folgendes zu erreichen:
- Wählen Sie Punkte unter Polygon-Features aus
- Löschen Sie für die Punkte unter jedem Polygon X% der Punkte basierend auf dem Polygonattribut
Der Screenshot (Abbildung 1) zeigt ein Nur-ModelBuilder-Tool namens Iterate Feature Selection. Was ist die richtige Python-Skriptmethode, um Features in einer Feature-Class zu durchlaufen, um das Feature an den Befehl SelectLayerByLocation_management weiterzugeben?
Abbildung 2 zeigt die Ausgabe der Auswahl nach Standort. Alle 4 Ebenen sind gleich, was ein Problem darstellt, wenn ich versuche, Punkte durch die Messung des Baldachins in% zu löschen.
Folgendes habe ich bisher versucht:
import arcpy
from arcpy import env
env.overwriteOutput = True
env.workspace = r'C:\temp_model_data\OutputData'
outWorkspace = env.workspace
# The polygons have canopy % data in attributes
polygons = r'C:\temp_model_data\CanopyPercentages.shp'
points = r'C:\temp_model_data\points_20_2012.shp'
if arcpy.Exists("pointsLayer"):
print "pointsLayer exists already"
else:
arcpy.MakeFeatureLayer_management (points, "pointsLayer")
print "pointsLayer created"
count = 1
#Create a search cursor to step through the polygon features
polys = arcpy.da.SearchCursor(polygons, ["OID@", "SHAPE@"])
for poly in polys:
# Create a name for the polygon features
count = count + 1
featureName = "polygon_" + str(count)
print featureName
# Select points that lie under polygons
arcpy.SelectLayerByLocation_management('pointsLayer', 'intersect', polygons)
arcpy.SaveToLayerFile_management('pointsLayer', outWorkspace + featureName + ".lyr", "ABSOLUTE")
# Add the random point selection script here...
# Delete selected points within each polygon based on the % canopy cover...
Abbildung 1
Figur 2
python
arcgis-desktop
arcpy
layers
Aaron
quelle
quelle
Antworten:
Ein SearchCursor in arcpy ist der direkteste Weg, um dies zu erreichen:
Beachten Sie, dass Sie die where_clause- Eigenschaft verwenden können, um Ihre Auswahl durchzuführen.
quelle
Nick Ochoski hat Recht mit dem SearchCursor, aber es gibt eine sauberere Möglichkeit, ihn OHNE eine Weile zu verwenden und als nächstes manuell aufzurufen:
quelle
Ich denke, Sie können auch ein WITH für noch saubereren Code hinzufügen (um eine saubere Antwort zu erhalten), da der Cursor nach Abschluss automatisch gelöscht wird
quelle