Mis datos constan de dos clases de características:
- Puntos = puntos que representan árboles
- Polígonos = Polígonos que representan el% del área del dosel por área. Cada polígono en el FC tiene una medición del% del dosel en los atributos.
Estoy tratando de lograr lo siguiente:
- Seleccionar puntos debajo de entidades poligonales
- Para los puntos debajo de cada polígono, elimine X% de los puntos en función del atributo polígono
La captura de pantalla (Figura 1) muestra una herramienta única de ModelBuilder llamada Iterate Feature Selection. ¿Cuál es el método de secuencia de comandos de Python correcto para recorrer las entidades en una clase de entidad para pasar la entidad al comando SelectLayerByLocation_management?
La Figura 2 muestra el resultado de la selección por ubicación. Las 4 capas son iguales, lo que será un problema cuando intente eliminar puntos mediante la medición del% del dosel.
Esto es lo que he intentado hasta ahora:
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...
Figura 1
Figura 2
python
arcgis-desktop
arcpy
layers
Aaron
fuente
fuente
Respuestas:
Un SearchCursor en ArcPy es la ruta más directa para lograr esto:
Tenga en cuenta que puede usar la propiedad where_clause para realizar su selección.
fuente
Nick Ochoski tiene razón sobre SearchCursor, pero hay una forma más limpia de usarlo SIN un momento y llamando manualmente a continuación:
fuente
Creo que también puede agregar (a trevstanhope respuesta ordenada) un WITH para un código aún más limpio, ya que eliminará el cursor automáticamente después de terminar
fuente