1 votos

Eliminación de capas duplicadas con ArcPy?

Trabajo con ArcGIS 10.3.1. En mi mapa tengo 200 capas, algunas de ellas se repiten varias veces. ¿Es posible con el código de python para eliminar todas las capas duplicadas de la tabla de contenido, que tienen el mismo nombre de la capa de grupo?

todas las capas están en diferentes grupos de capas - cada grupo de capas tiene un nombre diferente, excepto el duplicado. Conozco la herramienta "Borrar Idéntico" - sólo tengo la licencia básica.

Mi pregunta difiere de Eliminar elementos duplicados en la leyenda porque busco capas de grupo duplicadas (con el mismo nombre).

4voto

Mr. Che Puntos 356

Este código hará todo el trabajo por ti, este código está probado - funciona.

import arcpy

mxd = arcpy.mapping.MapDocument(r"G:\!Some_project_delete\!Some_project_delete.mxd")

groups_list = []

for df in arcpy.mapping.ListDataFrames(mxd): # iterate over dataframes
    for lyr in arcpy.mapping.ListLayers(mxd, "", df): # iterate over layers

        if lyr.isGroupLayer: # if object is group layer
            groups_list.append(lyr.name) # add it to list

    for lyr in arcpy.mapping.ListLayers(mxd, "", df): # iterate over layers again

        # count duplicates in lists
        if lyr.isGroupLayer: # if object is group layer
            print lyr.name, '\t', groups_list.count(lyr.name)

            if groups_list.count(lyr.name) >= 2: # if there are 2 or more duplictes
                arcpy.mapping.RemoveLayer(df, lyr)
                index = groups_list.index(lyr.name) # find object's index in list   
                del  groups_list[index] # delete object in list              

mxd.saveACopy(r"G:\!Some_project_delete\!Some_project_delete_NEW.mxd") # save project to new file
del mxd # release mxd file

4voto

Gavin Schulz Puntos 592

Algo como lo siguiente debería funcionar. Crea una lista de todas las capas en su MXD, luego hace un bucle a través de las capas de grupo y las añade a una lista. Si la capa de grupo ya existe en la lista (es decir, un duplicado), entonces se elimina en su lugar.

import arcpy

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

groupLyrList = list()

for layer in allLayers:
    if layer.isGroupLayer:
        if layer.name not in groupLyrList:
            groupLyrList.append(layer.name)
        elif layer.name in groupLyrList:
            arcpy.mapping.RemoveLayer(df, layer)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X