Cắt hàng loạt trong ArcGIS Desktop bằng ArcPy?


12

Tôi đã bắt gặp một vài câu hỏi tương tự cho các phiên bản cũ hơn của ArcGIS, nhưng chưa tìm thấy câu trả lời phù hợp cho ArcGIS 10.

Tôi có hai hình dạng đa giác bao phủ một khu vực rộng lớn (ví dụ: toàn bộ Bang / Tỉnh). Shapefile đầu tiên đại diện cho độ che phủ đất cho toàn bộ Bang và thứ hai đại diện cho 50 lưu vực riêng lẻ. Tôi muốn quay clip shapefile che phủ đất dựa trên mỗi lưu vực sông (mỗi cái có một tên duy nhất được lưu trữ trong một trường). Sau đó, tôi muốn lưu các tệp bị cắt đầu ra (một cho mỗi trong số 50 lưu vực) bằng cách sử dụng tên đầu nguồn.

Cho rằng có 50 clip được thực hiện, quá trình này là một ứng cử viên tuyệt vời để xử lý hàng loạt.


1
Bạn đã tìm thấy gì cho các phiên bản cũ hơn của ArcGIS và điều gì khiến chúng không phù hợp để sử dụng với ArcGIS 10?
nmpeterson

2
@Radar Hãy xem câu hỏi này: gis.stackexchange.com/q/8104/1297 Nó bao gồm những gì bạn đang tìm kiếm. Nếu bạn cần bất kỳ trợ giúp sửa đổi cho nhu cầu của bạn, hãy cho tôi biết. Tôi đã đánh dấu đây là một bản sao có thể.
SaultDon

@SaultDon: Bạn có nói rằng (các) giải pháp tại gis.stackexchange.com/q/8104/1297 chắc chắn cũng sẽ hoạt động trong ArcGIS 10?
whuber

@SaultDon - Một số thay đổi đã được thực hiện đối với các con trỏ trong ArcGIS 10 khiến câu trả lời cụ thể đó bị lỗi thời. Tôi hy vọng sẽ tìm ra giải pháp tốt nhất cho Arc10 và không chỉ là phiên bản hack của tập lệnh 9.3.
Radar

@whuber Không phải như vậy, cần những thay đổi có thể không rõ ràng. Radar - Bạn nói đúng, chúng đơn giản hơn =)
SaultDon

Câu trả lời:


17

Kịch bản sau đây đưa các lưu vực đa giác vào ranh giới quận đa giác, đặt tên cho mỗi đầu ra featureclass giống như tên HspWBD_HU12_county. Đã thử nghiệm và nó hoạt động. Đảm bảo các giá trị của bạn trong trường NAME không có ký tự hoặc khoảng trắng đặc biệt (các phương thức chuỗi Python đơn giản có thể làm sạch nó cho bạn).

import arcpy

arcpy.env.workspace = r'D:\Projects\GDBs\slowbutter.gdb\IPAS'
rows = arcpy.SearchCursor('HspAOI')
for row in rows:
    feat = row.Shape
    arcpy.Clip_analysis('HspWBD_HU12', feat, 'HspWBD_HU12_' + str(row.getValue('NAME')), '')

Hoàn toàn hoàn hảo mặc dù con trỏ loại cổ điển !!
SIslam

8

Khi bạn sử dụng ArcGIS 10, tôi sẽ sử dụng modelbuilder với công cụ dựng sẵn: Lựa chọn tính năng lặp để thực hiện nhiệm vụ này. Xem mô hình giả trong hình. nó không cần biết trăn trăn chút nào. mô hình giả


Để giải thích sâu hơn về phương pháp này, hãy xem Dễ dàng cắt toàn bộ không gian làm việc cho một khu vực nghiên cứu cụ thể và gói công cụ xử lý địa lý Clip Workspace liên quan . Cũng được khám phá ở đây trên stack: gis.stackexchange.com/questions/84989/NH
matt wilkie

2

Điều này nghe giống như những gì công cụ Split từ hộp công cụ Phân tích thực hiện.

Tuy nhiên, nó yêu cầu giấy phép ArcInfo để chạy nên không có sẵn cho phần lớn người dùng ArcGIS Desktop nên tôi thích câu trả lời của Chad sẽ hoạt động cho người dùng ArcGIS 10 Desktop với giấy phép cấp ArcView và ArcEditor.


-1

Bạn có thể thực hiện việc này theo cách bạn muốn nếu trước tiên bạn chạy một công cụ khác trong chế độ hàng loạt: Công cụ chuyển đổi> Cơ sở dữ liệu địa lý> Lớp tính năng sang Lớp tính năng. Điều đó sẽ cho phép bạn sử dụng một biểu thức để lấy lớp đầu nguồn của bạn và rút từng cá thể đầu nguồn và lưu nó thành lớp tính năng riêng của nó, sau đó bạn sẽ có 50 lớp riêng lẻ bạn có thể sử dụng với công cụ Clip ở chế độ hàng loạt.


2
Tôi đánh giá cao câu trả lời, nhưng đây dường như không phải là một giải pháp rất hiệu quả. Tôi thà không tạo 50 tệp đầu nguồn riêng biệt và sau đó thêm 50 tệp bị cắt.
Radar

-1

Công cụ Split trong ArcGIS thực hiện chính xác điều này.

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.