Mis datos consisten en dos capas de entidades:
- Puntos = puntos que representan árboles
- Polígonos = Polígonos que representan un % de área de dosel por área. Cada polígono en la capa de entidades tiene una medida de % de dosel en los atributos.
Estoy tratando de lograr lo siguiente:
- Seleccionar puntos debajo de las características de los polígonos
- Para los puntos bajo cada polígono, eliminar un X% de los puntos basado en el atributo del polígono
La captura de pantalla (Figura 1) muestra una herramienta solo de ModelBuilder llamada Iterar Selección de Características. ¿Cuál es el método de script de Python correcto para iterar a través de las características en una capa de entidades para pasar la característica a la comando SelectLayerByLocation_management?
La Figura 2 muestra la salida de la selección por ubicación. Todas las 4 capas son iguales, lo cual será un problema cuando intente eliminar puntos por la medida de % de 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
# Los polígonos tienen datos de % de dosel en los atributos
polígonos = r'C:\temp_model_data\CanopyPercentages.shp'
puntos = r'C:\temp_model_data/points_20_2012.shp'
if arcpy.Exists("pointsLayer"):
print "pointsLayer ya existe"
else:
arcpy.MakeFeatureLayer_management (puntos, "pointsLayer")
print "pointsLayer creada"
count = 1
#Crear un cursor de búsqueda para avanzar a través de las características de los polígonos
polígonos = arcpy.da.SearchCursor(polígonos, ["OID@", "SHAPE@"])
for polígono in polígonos:
# Crear un nombre para las características de los polígonos
count = count + 1
nombreDeCaracterística = "polígono_" + str(count)
print nombreDeCaracterística
# Seleccionar puntos que están bajo los polígonos
arcpy.SelectLayerByLocation_management('pointsLayer', 'intersecar', polígonos)
arcpy.SaveToLayerFile_management('pointsLayer', outWorkspace + nombreDeCaracterística + ".lyr", "ABSOLUTE")
# Agregar aquí el script de selección aleatoria de puntos...
# Eliminar puntos seleccionados dentro de cada polígono basado en el % de cobertura de dosel...
Figura 1
Figura 2
2 votos
Estoy revisando tu código pero un detalle rápido, tus nombres de polígonos van a empezar en 2; el conteo se incrementa antes de que se establezca el nombre. O bien querrás establecer count = 0 antes de que empiece el bucle, o poner count = count + 1 (lo cual puedes abreviar a count += 1) después de asignar el nombre de la característica.