Python tương đương với lựa chọn tính năng lặp của ModelBuilder là gì?


8

Dữ liệu của tôi bao gồm hai featureclass:

  1. Điểm = điểm đại diện cho cây
  2. Đa giác = Đa giác biểu thị% diện tích tán theo diện tích. Mỗi đa giác trong FC có phép đo% tán trong các thuộc tính.

Tôi đang cố gắng để thực hiện như sau:

  1. Chọn các điểm bên dưới các tính năng đa giác
  2. Đối với các điểm dưới mỗi đa giác, xóa X% số điểm dựa trên thuộc tính đa giác

Ảnh chụp màn hình (Hình 1) hiển thị một công cụ chỉ ModelBuilder có tên là Iterate Feature Selection. Phương thức kịch bản Python chính xác để lặp qua các tính năng trong một lớp đối tượng để chuyển tính năng này sang lệnh SelectLayerByLocation_man quản lý là gì?

Hình 2 cho thấy đầu ra của lựa chọn theo vị trí. Tất cả 4 lớp đều giống nhau, đây sẽ là một vấn đề khi tôi thử và xóa các điểm bằng phép đo% tán.

Đây là những gì tôi đã cố gắng cho đến nay:

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...

Hình 1 nhập mô tả hình ảnh ở đây

Hình 2 nhập mô tả hình ảnh ở đây


2
Tôi đang xem mã của bạn nhưng một điểm nhanh, tên đa giác của bạn sẽ bắt đầu từ 2; số lượng được tăng lên trước khi tên được đặt. Bạn sẽ muốn đặt Count = 0 trước khi vòng lặp bắt đầu hoặc đặt Count = Count + 1 (mà bạn có thể rút ngắn để đếm + = 1) sau khi bạn gán tên tính năng.
HeyOverThere 5/12/13

Câu trả lời:


10

Một SearchCursor trong arcpy là con đường trực tiếp nhất cho việc này:

import arcpy

fc = "c:/data/base.gdb/roads"
field = "StreetName"
cursor = arcpy.SearchCursor(fc)
row = cursor.next()
while row:
    print(row.getValue(field))
    row = cursor.next()

Lưu ý rằng bạn có thể sử dụng thuộc tính where_clause để thực hiện lựa chọn của mình.


11

Nick Ochoski nói đúng về SearchCoder, nhưng có một cách sạch hơn để sử dụng nó MÀ KHÔNG CẦN một lúc và gọi thủ công tiếp theo:

import arcpy
fc = "c:/data/base.gdb/roads"
field = "StreetName"
cursor = arcpy.SearchCursor(fc)
for row in cursor:
    print(row.getValue(field))

9

Tôi nghĩ Bạn cũng có thể thêm (vào câu trả lời gọn gàng) một câu trả lời với mã sạch hơn vì nó sẽ tự động xóa con trỏ sau khi kết thúc

import arcpy
fc = "c:/data/base.gdb/roads"
field = "StreetName"
with arcpy.da.SearchCursor(fc) as cursor:
    for row in cursor:
        print(row.getValue(field))

Tôi đã sử dụng các con trỏ tìm kiếm để truy cập và nhận thông tin về một tính năng, nhưng có thể chạy một công cụ địa lý trên mỗi hàng hay bạn cần kéo ID cho hàng đó và sau đó chạy một thuộc tính được chọn bằng ID đó và THEN chạy công cụ địa lý của bạn ?
Rex
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.