Meus dados consistem em duas classes de recursos:
- Pontos = pontos representando árvores
- Polígonos = polígonos que representam% da área do dossel por área. Cada polígono no FC tem uma medida de% dossel nos atributos.
Estou tentando fazer o seguinte:
- Selecionar pontos abaixo dos recursos de polígono
- Para os pontos em cada polígono, exclua X% dos pontos com base no atributo de polígono
A captura de tela (Figura 1) mostra uma única ferramenta ModelBuilder chamada Iterate Feature Selection. Qual é o método de script Python correto para iterar os recursos em uma classe de recurso, a fim de passar o recurso ao comando SelectLayerByLocation_management?
A Figura 2 mostra a saída do selecionar por local. Todas as 4 camadas são iguais, o que será um problema quando eu tentar excluir pontos pela medição da porcentagem do dossel.
Isto é o que eu tentei até agora:
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
fonte
fonte
Respostas:
Um SearchCursor no arcpy é a rota mais direta para fazer isso:
Observe que você pode usar a propriedade where_clause para executar sua seleção.
fonte
Nick Ochoski está certo sobre o SearchCursor, mas há uma maneira mais limpa de usá-lo SEM UM TEMPO e ligando manualmente a seguir:
fonte
Eu acho que você também pode adicionar (para trevstanhope resposta pura) um WITH para um código ainda mais limpo, pois excluirá o cursor automaticamente após o término
fonte