Видалення функціонального шару за допомогою ArcPy script?


13

У мене є сценарій на основі ArcPy, де я намагаюся перетинати два шари, де один шар повинен мати свій центр в іншому.

Оскільки мені потрібно знати, що один шар (feature_layer внизу) включає центроїд іншого, я використовую інструмент arcpy.SelectLayerByLocation_management ().

У мене немає відкритого документа з картою (* .mxd), тому для цього мені потрібно скористатися шаром Make Feature Layer .

У документації зазначається, що шар функції зникне, коли програма закінчується, але мені потрібно, щоб він зникнув раніше, оскільки я маю його в циклі, подібному нижче

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)

Я шукаю функцію для видалення функціональних шарів, і я не зміг її знайти.

Я усвідомлюю, що я міг би помістити туди якусь кількість чи щось, щоб зробити кожен унікальний в межах програми, але це не ідеально, якщо немає способу видалити функціональні шари.

Відповіді:


21

Інструмент "Видалити" повинен прийняти ім'я функціонального шару, щоб видалити його з TOC.

Постійно видаляє дані з диска. Усі типи географічних даних, що підтримуються ArcGIS, а також панелі інструментів та робочі простори (папки, бази даних геоданих) можна видалити. Якщо вказаний елемент є робочим простором, всі елементи, що містяться, також видаляються.

а в розділі Синтаксис перераховані типи даних, які можна видалити як:

Елемент даних; Графік; Шар ; Перегляд таблиці


я не знаю, чому я повинен використовувати інструмент видалення двічі, щоб бути впевненим, що шари функцій видалено, а іноді помилки дають функцію, незважаючи на те, що шар функції насправді не видалено, ці помилки виникають, коли я намагаюся видалити та створити елементи шарів з такою ж назвою
geogeek

2
Це насправді не пов’язано, але географічна обробка працює так, як очікується, що кожен шар має унікальну назву, оскільки саме так він відноситься до них.
Jason Scheirer

1
Можливо, використання інструмента «Видалити» для видалення шару з TOC може бути краще задокументовано на ресурсах.arcgis.com/ en/help/main/10.1/index.html#//… - це говорить, що Шар - це тип даних, який може видалити, але ніяких інших посилань на шари не робиться, і його вступне речення "Постійно видаляє дані з диска" відлякує багатьох користувачів від спроби Видалити, щоб видалити шар.
PolyGeo

7

Ви можете викликати arcpy.mapping.RemoveLayer для видалення шару з TOC.

Забезпечує можливість видалення шару в кадрі даних у картографічному документі (.mxd).


Дякую за пропозицію - я не уточнив, що шукаю щось для цього поза контекстом відображення - це лише сценарій аналізу, і я не маю (або принаймні не знаю) явного TOC. Пропозиція Джейсона нижче працює, хоча. Спасибі! Це все ще стане корисною функцією для мене згодом.
nicksan

3

Це те, що я використовую для видалення шарів.

arcpy.mapping.RemoveLayer ("DataFrame", "Ім'я шару")

Або петлі:

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

Використовуйте, mxd.save()якщо ви використовуєте документ з картою, щоб не CURRENTпереконатися, що шар не залишився. Крім того, додайте заяву про друк у свій сценарій:

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()

Просто щоб переконатися, що він взагалі знаходить шар, який потрібно видалити.


-1

спробуйте це:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.