Mes données se composent de deux classes de fonctionnalités:
- Points = points représentant des arbres
- Polygones = Polygones représentant le% de la surface du couvert par zone. Chaque polygone dans le FC a une mesure de% de canopée dans les attributs.
J'essaie d'accomplir ce qui suit:
- Sélectionner des points sous les entités surfaciques
- Pour les points sous chaque polygone, supprimez X% des points en fonction de l'attribut polygone
La capture d'écran (Figure 1) montre uniquement un outil ModelBuilder appelé Itérer la sélection des fonctionnalités. Quelle est la méthode de script Python correcte pour parcourir les fonctionnalités d'une classe d'entités afin de transmettre la fonctionnalité à la commande SelectLayerByLocation_management?
La figure 2 montre la sortie de la sélection par emplacement. Les 4 couches sont identiques, ce qui sera un problème lorsque j'essaierai de supprimer des points par la mesure du% de la verrière.
Voici ce que j'ai essayé jusqu'à présent:
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...
Figure 1
Figure 2
python
arcgis-desktop
arcpy
layers
Aaron
la source
la source
Réponses:
Un SearchCursor dans arcpy est la voie la plus directe pour y parvenir:
Notez que vous pouvez utiliser la propriété where_clause pour effectuer votre sélection.
la source
Nick Ochoski a raison à propos du SearchCursor, mais il existe un moyen plus propre de l'utiliser SANS temps et d'appeler manuellement ensuite:
la source
Je pense que vous pouvez également ajouter (à une réponse nette trevstanhope) un AVEC pour un code encore plus propre car il supprimera automatiquement le curseur après la fin
la source