Loại bỏ lớp tính năng bằng cách sử dụng tập lệnh ArcPy?


13

Tôi có một tập lệnh dựa trên ArcPy nơi tôi đang cố gắng giao nhau hai lớp trong đó một lớp phải có tâm của nó trong lớp kia.

Vì tôi cần biết rằng một lớp (Feature_layer bên dưới) bao gồm trọng tâm của lớp kia, tôi đang sử dụng công cụ arcpy.SelectLayerByLocation_man Quản lý ().

Tôi không mở Tài liệu bản đồ (* .mxd) để thực hiện điều này, tôi phải sử dụng Make Feature Layer để cung cấp cho nó.

Tài liệu lưu ý rằng lớp tính năng sẽ biến mất khi chương trình thoát, nhưng tôi cần nó biến mất sớm hơn vì tôi có nó trong một vòng lặp tương tự như bên dưới

for feature_class in large_list_of_feature_classes:
    some_function(feature_class)

def some_function():
    feature = "{path to feature class}"
    feature_layer = "feature_layer"
    HUCs_layer = "all_HUCs" #HUCs being Hydrologic Unit Codes

    arcpy.MakeFeatureLayer_management(feature, feature_layer)
    arcpy.MakeFeatureLayer_management(feature, HUCs_layer)      
    arcpy.SelectLayerByLocation_management(HUCs_layer, "HAVE_THEIR_CENTER_IN", feature_layer, selection_type="NEW_SELECTION")

    arcpy.CopyFeatures_management(HUCs_layer, selection_name)

Tôi đang tìm kiếm một chức năng để loại bỏ các lớp tính năng và tôi không thể tìm thấy một lớp.

Tôi nhận ra rằng tôi có thể đặt một số loại trong đó hoặc một cái gì đó để làm cho mỗi cái duy nhất trong phạm vi của chương trình, nhưng điều đó không lý tưởng trừ khi không có cách nào để loại bỏ các lớp tính năng.

Câu trả lời:


21

Công cụ Xóa phải chấp nhận tên của một lớp đối tượng để xóa nó khỏi TOC.

Xóa vĩnh viễn dữ liệu khỏi đĩa. Tất cả các loại dữ liệu địa lý được ArcGIS hỗ trợ, cũng như các hộp công cụ và không gian làm việc (thư mục, cơ sở dữ liệu địa lý), có thể bị xóa. Nếu mục được chỉ định là không gian làm việc, tất cả các mục chứa cũng sẽ bị xóa.

và trong phần Cú pháp liệt kê các Kiểu Dữ liệu có thể bị xóa là:

Yếu tố dữ liệu; Đồ thị; Lớp ; Xem bảng


Tôi không biết tại sao tôi nên sử dụng công cụ xóa hai lần để chắc chắn rằng các lớp tính năng bị xóa và đôi khi chức năng này bị lỗi, mặc dù lớp tính năng không thực sự bị xóa, lỗi này xảy ra khi tôi cố xóa và tạo các lớp tính năng cùng tên
geogeek

2
Điều này không thực sự liên quan, nhưng đó là cách xử lý địa lý hoạt động - nó hy vọng mỗi lớp sẽ có một tên duy nhất bởi vì đó là cách nó đề cập đến chúng.
Jason Scheirer

1
Có lẽ việc sử dụng công cụ Xóa để xóa một lớp khỏi TOC có thể được ghi lại tốt hơn tại resource.arcgis.com/en/help/main/10.1/index.html#// Lỗi - nó nói rằng Layer là một loại dữ liệu có thể bị xóa, nhưng không có tài liệu tham khảo nào khác được thực hiện cho các lớp và câu mở đầu của nó "Xóa vĩnh viễn dữ liệu khỏi đĩa" sẽ khiến nhiều người dùng sợ hãi khi cố gắng xóa để xóa một lớp.
PolyGeo

7

Bạn có thể gọi arcpy.micking.RemoveLayer để xóa một lớp khỏi TOC.

Cung cấp khả năng loại bỏ một lớp trong khung dữ liệu trong tài liệu bản đồ (.mxd).


Cảm ơn lời đề nghị - Tôi đã không làm rõ rằng tôi đang tìm kiếm thứ gì đó để thực hiện điều này ngoài bối cảnh ánh xạ - đây chỉ là một kịch bản phân tích và tôi không (hoặc ít nhất là không biết) một TOC rõ ràng. Đề nghị của Jason dưới đây đã làm việc mặc dù. Cảm ơn! Nó vẫn sẽ là một chức năng hữu ích cho tôi sau này.
nicksan

3

Đây là những gì tôi sử dụng để loại bỏ các lớp.

arcpy.micking.RemoveLayer ("DataFrame", "Tên lớp")

Hoặc lặp:

mxd = arcpy.mapping.MapDocument("CURRENT")
for df in arcpy.mapping.ListDataFrames(mxd):
    for lyr in arcpy.mapping.ListLayers(mxd, "", df):
        arcpy.mapping.RemoveLayer(df, lyr)

3

Sử dụng mxd.save()nếu bạn đang sử dụng tài liệu bản đồ không CURRENTđảm bảo lớp đó không bị mất. Ngoài ra, thêm một tuyên bố in trong tập lệnh của bạn:

mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]

for i in arcpy.mapping.ListLayers(mxd , "TerraColor_SanFrancisco_US_15m.tif"):
    print "Deleting layer", i
    arcpy.mapping.RemoveLayer(df , i)

arcpy.RefreshActiveView()

Chỉ để chắc chắn rằng nó đang tìm một lớp để xóa.


-1

thử đi:

import arcpy
from arcpy import env
env.workspace = r"F:\Projects\ohad\derech_atankim\gis"   
for mxdname in arcpy.ListFiles("*.mxd"):
    print mxdname 
    mxd = arcpy.mapping.MapDocument(r"F:\Projects\ohad\derech_atankim\gis\\" + mxdname)
    df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
    for lyr in arcpy.mapping.ListLayers(mxd, "", df):
        if lyr.dataSource == r"F:\Projects\ohad\derech_atankim\gis\layers\roads.lyr":
            arcpy.mapping.RemoveLayer(df, lyr)
    mxd.save()
del mxd
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.