Supprimer la couche d'entités à l'aide du script ArcPy?

13

J'ai un script basé sur ArcPy où j'essaie d'intersecter deux couches où une couche doit avoir son centre de gravité dans l'autre couche.

Comme j'ai besoin de savoir qu'une couche (feature_layer ci-dessous) comprend le centroïde de l'autre, j'utilise l'outil arcpy.SelectLayerByLocation_management ().

Je n'ai pas de document ArcMap (* .mxd) ouvert, donc pour ce faire, je dois utiliser Make Feature Layer pour l'alimenter.

La documentation note que la couche d'entités disparaîtra à la fin du programme, mais j'ai besoin qu'elle disparaisse plus tôt car je l'ai dans une boucle similaire à ci-dessous

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)

Je recherche une fonction pour supprimer les couches d'entités et je n'ai pas pu en trouver une.

Je me rends compte que je pourrais y mettre une sorte de décompte ou quelque chose pour rendre chacun unique dans le cadre du programme, mais ce n'est pas idéal à moins qu'il n'y ait aucun moyen de supprimer les couches d'entités.

nicksan
la source

Réponses:

21

L'outil Supprimer doit accepter le nom d'une couche d'entités pour la supprimer de la table des matières.

Supprime définitivement les données du disque. Tous les types de données géographiques prises en charge par ArcGIS, ainsi que les boîtes à outils et les espaces de travail (dossiers, géodatabases), peuvent être supprimés. Si l'élément spécifié est un espace de travail, tous les éléments contenus sont également supprimés.

et sous la section Syntaxe répertorie les types de données qui peuvent être supprimés comme:

Élément de données; Graphique; Couche ; Vue de tableau

Jason Scheirer
la source
je ne sais pas pourquoi je devrais utiliser l'outil de suppression deux fois pour être sûr que les couches d'entités sont supprimées, et parfois cette fonction donne des erreurs, malgré la couche d'entités pas vraiment supprimée, ces erreurs se produisent lorsque j'essaie de supprimer et de créer des couches d'entités du même nom
geogeek
2
Ce n'est pas vraiment lié, mais c'est la façon dont le géotraitement fonctionne - il s'attend à ce que chaque couche ait un nom unique, car c'est ainsi qu'il s'y réfère.
Jason Scheirer
1
Peut-être que l'utilisation de l'outil Supprimer pour supprimer une couche de la table des matières pourrait être mieux documentée sur resources.arcgis.com/en/help/main/10.1/index.html#//… - il indique que la couche est un type de données qui peut être supprimé, mais aucune autre référence n'est faite aux couches et sa phrase d'ouverture "Supprime définitivement les données du disque" effrayerait de nombreux utilisateurs d'essayer Supprimer pour supprimer une couche.
PolyGeo
7

Vous pouvez appeler arcpy.mapping.RemoveLayer pour supprimer un calque de la table des matières.

Permet de supprimer une couche dans un bloc de données dans un document ArcMap (.mxd).

James Schek
la source
Merci pour la suggestion - je n'ai pas précisé que je cherchais quelque chose à faire en dehors du contexte de mappage - ce n'est qu'un script d'analyse et je n'ai pas (ou du moins ne sais pas) de table des matières explicite. La suggestion de Jason ci-dessous a fonctionné cependant. Merci! Ce sera toujours une fonction utile pour moi plus tard.
nicksan
3

C'est ce que j'utilise pour supprimer des calques.

arcpy.mapping.RemoveLayer ("DataFrame", "Layer Name")

Ou en boucle:

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)
Poilu
la source
3

À utiliser mxd.save()si vous utilisez un document ArcMap CURRENTpour ne pas vous assurer que la couche a disparu. Ajoutez également une instruction d'impression dans votre script:

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

Juste pour être sûr de trouver un calque à supprimer.

Jason Scheirer
la source
-1

essaye ça:

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
la source