Entfernen des Feature-Layers mithilfe von ArcPy-Skript?

13

Ich habe ein ArcPy-basiertes Skript, bei dem ich versuche, zwei Ebenen zu schneiden, wobei eine Ebene ihren Schwerpunkt in der anderen Ebene haben muss.

Da ich wissen muss, dass eine Ebene (Feature_Layer unten) den Schwerpunkt der anderen enthält, verwende ich das Tool arcpy.SelectLayerByLocation_management ().

Ich habe kein Kartendokument (* .mxd) geöffnet, daher muss ich Make Feature Layer verwenden , um es einzugeben .

In der Dokumentation wird darauf hingewiesen, dass der Feature-Layer beim Beenden des Programms nicht mehr angezeigt wird. Er muss jedoch früher ausgeblendet werden, da er sich in einer Schleife befindet, die der folgenden ähnelt

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)

Ich suche nach einer Funktion zum Entfernen von Feature-Layern und konnte keine finden.

Mir ist klar, dass ich dort eine Art Zählung anbringen könnte oder etwas, um jede im Rahmen des Programms einzigartig zu machen, aber das ist nicht ideal, es sei denn, es gibt keine Möglichkeit, Feature-Layer zu entfernen.

Nicksan
quelle

Antworten:

21

Das Löschtool sollte den Namen eines Feature-Layers akzeptieren, um ihn aus dem Inhaltsverzeichnis zu entfernen.

Löscht dauerhaft Daten von der Festplatte. Alle von ArcGIS unterstützten Arten von geografischen Daten sowie Toolboxes und Arbeitsbereiche (Ordner, Geodatabases) können gelöscht werden. Wenn das angegebene Element ein Arbeitsbereich ist, werden auch alle enthaltenen Elemente gelöscht.

und im Abschnitt Syntax werden die Datentypen aufgelistet, die gelöscht werden können als:

Datenelement; Graph; Schicht ; Tabellenansicht

Jason Scheirer
quelle
Ich weiß nicht, warum ich das Löschtool zweimal verwenden sollte, um sicherzustellen, dass die Feature-Layer entfernt werden. Manchmal gibt diese Funktion Fehler aus, obwohl der Feature-Layer nicht wirklich entfernt wurde. Dieser Fehler tritt auf, wenn ich versuche, Feature-Layer zu löschen und zu erstellen mit dem gleichen Namen
Geogeek
2
Dies ist nicht wirklich verwandt, aber es ist die Art und Weise, wie die Geoverarbeitung funktioniert. Es wird erwartet, dass jeder Layer einen eindeutigen Namen hat, da er auf diese Weise auf sie verweist.
Jason Scheirer
1
Möglicherweise könnte die Verwendung des Löschtools zum Entfernen einer Ebene aus dem Inhaltsverzeichnis unter resources.arcgis.com/en/help/main/10.1/index.html#//… besser dokumentiert werden - es wird angegeben, dass es sich bei der Ebene um einen Datentyp handelt, der dies kann gelöscht werden, es werden jedoch keine weiteren Verweise auf Ebenen vorgenommen, und der Anfangssatz "Daten endgültig von der Festplatte löschen" würde viele Benutzer davon abhalten, das Löschen einer Ebene zu versuchen.
PolyGeo
7

Sie können arcpy.mapping.RemoveLayer aufrufen , um eine Ebene aus dem Inhaltsverzeichnis zu entfernen.

Bietet die Möglichkeit, einen Layer innerhalb eines Datenrahmens in einem Kartendokument (.mxd) zu entfernen.

James Schek
quelle
Vielen Dank für den Vorschlag - ich habe nicht klargestellt, dass ich außerhalb des Mapping-Kontexts nach einer Möglichkeit gesucht habe - dies ist nur ein Analyseskript, und ich habe kein explizites Inhaltsverzeichnis (oder kenne es zumindest nicht). Jasons Vorschlag unten funktionierte jedoch. Vielen Dank! Es wird später noch eine nützliche Funktion für mich sein.
nicksan
3

Dies ist, was ich benutze, um Ebenen zu entfernen.

arcpy.mapping.RemoveLayer ("DataFrame", "Layername")

Oder Looping:

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)
Behaart
quelle
3

Verwenden mxd.save()Sie diese Option, wenn Sie ein Kartendokument verwenden, das nicht CURRENTsicherstellt, dass der Layer nicht angezeigt wird. Fügen Sie außerdem eine print-Anweisung in Ihr Skript ein:

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

Nur um sicherzugehen, dass eine Ebene gefunden wird, die überhaupt gelöscht werden kann.

Jason Scheirer
quelle
-1

Versuche dies:

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
newGIS
quelle