Data saya terdiri dari dua kacamata fitur:
- Poin = poin yang mewakili pohon
- Poligon = Poligon yang mewakili% area kanopi berdasarkan area. Setiap poligon di FC memiliki% pengukuran kanopi dalam atribut.
Saya mencoba mencapai yang berikut:
- Pilih titik di bawah fitur poligon
- Untuk poin di bawah setiap poligon, hapus X% dari poin berdasarkan atribut poligon
Tangkapan layar (Gambar 1) menunjukkan alat ModelBuilder saja yang disebut Iterate Feature Selection. Apa metode scripting Python yang benar untuk beralih melalui fitur dalam kelas fitur untuk meneruskan fitur ke perintah SelectLayerByLocation_management?
Gambar 2 menunjukkan output dari pilih oleh lokasi. Semua 4 lapisan adalah sama, yang akan menjadi masalah ketika saya mencoba dan menghapus poin dengan pengukuran kanopi%.
Inilah yang saya coba sejauh ini:
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...
Gambar 1
Gambar 2
python
arcgis-desktop
arcpy
layers
Harun
sumber
sumber
Jawaban:
Sebuah SearchCursor di arcpy adalah rute yang paling langsung untuk mencapai ini:
Perhatikan bahwa Anda dapat menggunakan properti where_clause untuk melakukan pilihan Anda.
sumber
Nick Ochoski benar tentang SearchCursor, tetapi ada cara yang lebih bersih untuk menggunakannya TANPA beberapa saat dan secara manual memanggil berikutnya:
sumber
Saya pikir Anda juga dapat menambahkan (ke trevstanhope jawaban rapi) dengan kode lebih bersih karena akan menghapus kursor secara otomatis setelah selesai
sumber