Giảm thời gian xử lý trong chức năng Xóa bằng Arcpy trong IDLE


8

Tôi đang xử lý 18.000 lớp đối tượng (được lưu trong tệp GDB), mỗi lớp có ~ 500 bản ghi (tính năng đa giác) trong khu vực đại dương và tôi đang chạy một tập lệnh để loại bỏ vùng chồng lấp với bờ biển, sử dụng chức năng Xóa. Kịch bản đang chạy thành công, nhưng thực sự phải mất nhiều ngày để hoàn thành. Một số tệp mất vài giây để xử lý (Tôi cho rằng điều này là do thực tế, mà tôi đã xác minh, rằng chúng không trùng với đường bờ biển) trong khi một số lớp tính năng mất hơn một giờ để xử lý.

Tôi đang làm việc cục bộ trên máy của mình, chạy tập lệnh trong IDLE, với ArcGIS 10.1 (tất cả các giấy phép) trên Windows 7 32 bit, Intel DuoCore 3,33GHz, máy tính RAM 4GB.

Tôi đang học các sợi dây với Python và thực sự sẽ đánh giá cao các mẹo về kịch bản của tôi nếu có các bước tôi có thể thực hiện để tăng tốc thời gian xử lý. Cảm ơn bạn!

# Import modules
import arcpy
import sys
import os
from arcpy import env

arcpy.env.overwriteOutput = True
print arcpy.env.overwriteOutput

#Erase coastline from selected buffers.
workspace = "C:\\DIR\\points_buff\\"
arcpy.env.workspace = workspace
erase_output = workspace+"erased.gdb\\"
erasedirectorypath = "C:\\DIR\\points_buff\\selectedbuff.gdb"
fileList = []

for dirpath, dirnames, erases in arcpy.da.Walk(erasedirectorypath,
                                              datatype="FeatureClass",
                                              type="Polygon"):
    for erase in erases:
        fileList.append(os.path.join(dirpath, erase))
        filenameparts = erase.split('_')
        if int(filenameparts[1]) > int(1967):

            try:
        #Set variables for Erase tool
                in_features = erasedirectorypath+"\\"+erase
                coastline_feat = "C:\\DIR\\Basic_NE.gdb\\Coastline_Eastern_US"
                out_erase_feat = erase_output+erase[:-4]+"_er"
                arcpy.Erase_analysis(in_features, coastline_feat, out_erase_feat, '')
                print arcpy.GetMessages()
                print "Coastline has been erased from " + erase + " and saved to " + erase_output

            except:
                print arcpy.GetMessages()

Câu trả lời:


7

Mặc dù rất khó để khắc phục sự cố kịch bản của bạn mà không nhìn thấy dữ liệu không gian, một vài thủ thuật và ý tưởng có thể giúp ích cho công việc của bạn. Để bắt đầu, tập hợp dữ liệu của bạn và thử nghiệm với các phương pháp khác nhau. Kết hợp đồng hồ thời gian vào tập lệnh của bạn để có cảm giác thực sự về các hoạt động nhanh hay chậm. Hãy thử gói các lệnh của bạn với a time.clock. Ví dụ:

import time
StartTime = time.clock()
arcpy.Erase_analysis(in_features, coastline_feat, out_erase_feat, '')
EndTime = time.clock()
print "Erase finished in %s hours" % ((EndTime - StartTime)/3600)
time.sleep(2.5)
  • Hãy thử sử dụng sức mạnh của không gian làm việc in_memory . Nói chung, các hoạt động được thực hiện in_memorynhanh hơn các hoạt động được ghi vào đĩa. Sử dụng in_memorycho bất kỳ hoạt động trung gian.

  • Thay vì sử dụng lệnh Erase, hãy sử dụng nhóm lệnh sau để thực hiện quy trình công việc tương tự:

Tạo lớp tính năng (Quản lý dữ liệu)

Chọn lớp theo vị trí (Quản lý dữ liệu)

Xóa tính năng (Quản lý dữ liệu)

Sao chép tính năng (Quản lý dữ liệu)


2
Tính thời gian có thể là vô giá để so sánh các phương pháp, đặc biệt nếu bạn đang thử nhiều cách tiếp cận khác nhau trên một tập hợp con dữ liệu nhỏ.
Aaron

2
Có, hãy nhớ rằng bạn có thể dễ dàng xóa các tệp in_memory trong tập lệnh của mình bằng cách sử dụng Xóa (Quản lý dữ liệu).
Aaron

4
Có bao nhiêu tính năng trong tệp đường bờ biển và số đỉnh điển hình trong một tính năng là gì? Làm thế nào lớn của một khu vực nó bao gồm? Làm thế nào lớn của một khu vực mà các lớp tính năng của bạn thường bao gồm? Nếu bạn có các tính năng rất lớn và phức tạp trong tệp đường bờ biển của mình, đó có thể là nguồn gốc của sự chậm lại. Có một vài phương pháp để sử dụng để điều chỉnh nếu đó là vấn đề.
blord-castillo

2
Tôi thực sự sẽ đi theo con đường ngược lại. Đầu tiên hòa tan các tính năng, sau đó chia đa giác lớn thành nhiều lớp tính năng riêng biệt của mỗi đa giác. Hãy thử chạy chỉ một trong số các lớp đối tượng đường bờ đặc trưng được bổ sung này đối với một trong các lớp đối tượng của bạn mất một thời gian (và giao nhau). Xem nếu điều đó mang lại cho bạn bất kỳ cải thiện. Tôi nghĩ rằng phong bì giao lộ của bạn có thể đơn giản là quá lớn, lấy đi bất kỳ tinh chỉnh hiệu suất nào đã được tích hợp trong các phân tích lớp phủ.
blord-castillo

4
Một quy trình làm việc khác để kiểm tra. Chạy Minimum Bounding Geometrytrên lớp tính năng mục tiêu của bạn bằng cách sử dụng Tùy chọn nhóm ALLvà loại hình học ENVELOPE. Thực hiện xóa trên lớp tính năng phong bì kết quả bằng cách sử dụng đường bờ biển rộng lớn của bạn. Sử dụng đầu ra từ việc xóa đó để thực hiện Cliptrên lớp tính năng mục tiêu ban đầu của bạn. Điều này đơn giản hóa bước phức tạp, xóa và thay thế nó bằng Clip ít tốn kém hơn so với tính năng nhỏ hơn.
blord-castillo
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.