Có thể sắp xếp một arcpy.da.UpdateC tiền () không?


8

Tôi có một con trỏ cập nhật ArcPy Data Access mà tôi muốn sắp xếp trước khi thực hiện cập nhật cho nó.

Con trỏ thực hiện cập nhật nếu tôi không sắp xếp, nhưng nếu tôi thêm một sắp xếp vào con trỏ thì tôi gặp lỗi, "lặp không bắt đầu."

Sắp xếp hoạt động chính xác nhưng nó phải làm hỏng con trỏ vì một số lý do.

Có phải là không thể sắp xếp một con trỏ cập nhật như một con trỏ tìm kiếm? Nó thay đổi loại hoặc một cái gì đó?

    idList = ['100100', '100200', '100300', '200100']
    count = 0
    with arcpy.da.UpdateCursor(newFC, ("SHAPE@X", "SHAPE@Y", "Label")) as addLabelCursor:            
        for row in sorted(addLabelCursor, key=itemgetter(0), reverse = True): 
            print idList[count]
            row[2] = str(idList[count])
            addLabelCursor.updateRow(row)
            count += 1

Nếu tôi xem người dân địa phương trong một phiên gỡ lỗi, "addLabelCoder" vẫn là một đối tượng da.UpdateCoder trong suốt quá trình. Nó không giống như nó được chuyển đổi thành một danh sách khi nó được sắp xếp.
TurboGus

Nó không thành công tại: addLabelCoder.updateRow (hàng)
TurboGus

Bạn cần sắp xếp trong cuộc gọi con trỏ bằng mệnh đề sql (ORDER BY)
jbalk

Câu trả lời:


11

Việc sắp xếp hoàn toàn làm cạn kiệt con trỏ trước khi bạn đi vào updateRow. Cách mà các con trỏ hoạt động là updateRowcuộc gọi không hoạt động trên các hàng tùy ý ngoài luồng, nhưng trên cuộc gọi hiện tại được lặp đi lặp lại. Đó là, bạn chỉ có thể hoạt động trên một hàng tại một thời điểm.

Thay vào đó, bạn có thể muốn xem xét việc này ở phía cơ sở dữ liệu địa lý. Bạn có thể chỉ định một ORDER BYmệnh đề và sắp xếp nó trước khi bạn nhận được nó.


Có vẻ như bạn không thể sử dụng mã thông báo hình học trong mệnh đề sql của con trỏ. Tôi sẽ phải sử dụng một công việc xung quanh như thêm nó vào một trường thực trước hoặc có thể tôi sẽ lưu trữ đầu vào con trỏ này vào bộ nhớ và sử dụng một con trỏ tìm kiếm để sắp xếp và chèn con trỏ để tạo. Cảm ơn vì đã xác nhận rằng tôi không thể sắp xếp một con trỏ cập nhật và vẫn cập nhật.
TurboGus

7
@TurboGus nhưng bạn có thể sắp xếp các hàng trong một con trỏ. Trợ giúp cho biết bạn có thể chỉ định sql_clausetham số (tuple): sql_clause=(None, 'ORDER BY SORT_FIELD ASC')- hoặc DESCđể giảm dần.
nmpeterson

2

Như @nmpeterson đã chỉ ra, bạn có thể nhập mệnh đề sql vào lệnh gọi con trỏ để sắp xếp theo trường:

UpdateCoder (in_table, field_names, {where_clause}, {spatial_Vference}, {explode_to_point}, {sql_clause} )

Tiền tố SQL hỗ trợ Không, DISTINCT và TOP. Tiền tố SQL hỗ trợ Không có, ĐẶT HÀNG B, NG VÀ NHÓM THEO.

sql_clause = (Không có, 'ĐẶT HÀNG B SNG SORT_FIELD ASC') - hoặc DESC

thông tin đến từ trợ giúp ESRI: http://resource.arcgis.com/en/help/main/10.2/index.html#//018w00000014000000


0

Nó có thể chỉ liên quan để tham khảo trong tương lai, nhưng theo trợ giúp trực tuyến của ArcGis khi sử dụng arcpy.UpdateCoder thay vì arcpy.da.UpdateCoder có sẵn một tùy chọn sắp xếp.

con trỏ = arcpy.UpdateC tiền (fc, sort_fields = " YOUFIELDNAME ")

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.