Más

Mover una capa de grupo de servicios de mapas fuera de una capa de grupo con ArcPy

Mover una capa de grupo de servicios de mapas fuera de una capa de grupo con ArcPy


Estoy luchando por mover servicios web (mapas base en mosaico) fuera de capas de grupo en el marco de datos. He usado arcpy.mapping.ListLayers para componer una lista de capas, luego he averiguado qué es una capa de grupo con .isGroupLayer y he probado las capas de grupo nombre y luego que es "apoya". Sin embargo, fallé miserablemente al recoger la extraña capa de grupo de servicios web y moverlos. He probado arcpy.mapping.AddLayer entre un puñado de cosas.

Cualquier idea es bienvenida. Mi resultado deseado es no tener servicios web en capas de grupo.

import arcpy mxd = "C:  Data  native.mxd" OriginMxd = arcpy.mapping.MapDocument (mxd) df = arcpy.mapping.ListDataFrames (OriginMxd) [0] para OPFSLyr en arcpy.mapping.ListLayers (OriginMxd, "", df): if str (OPFSLyr) == "Basemap": # si se llama basemap if OPFSLyr.isGroupLayer: para subLayer en OPFSLyr: print subLayer arcpy.mapping.AddLayer (df, subLayer, "BOTTOM") OriginMxd. salvar()

Estás cerca. En lugar de AddLayer, puede utilizar MoveLayer. El código de ejemplo de ESRI, junto con algunos ajustes a sus propias estructuras de datos, se pueden modificar para mover las capas que desee hasta la raíz del marco de datos. Ver código:

mxd = arcpy.mapping.MapDocument (r "C:  peendata  MoveLayers.mxd") df = arcpy.mapping.ListDataFrames (mxd) [0] moveThese = [] para la capa en arcpy.mapping.ListLayers (mxd, "" , df): print str (layer.name) + ">>>" si layer.isServiceLayer: print str (layer) + "es una capa de servicio" si layer.isFeatureLayer: print str (layer) + "es una capa de características "if layer.isRasterLayer: print str (layer) +" es una capa ráster "if layer.isGroupLayer: print str (layer) +" es una capa de grupo "if str (layer) ==" Group Layer 1 ": refLayer = layer if (layer.isServiceLayer y no layer.isGroupLayer): print "califica para el movimiento" moveThese.append (layer) para la capa en moveThese: print "moviendo" + str (layer) arcpy.mapping.MoveLayer (df, refLayer, layer , "ANTES") mxd.saveACopy (r "C:  peendata  MoveLayersDone.mxd") del mxd

Algunas advertencias: no todos los servicios web son definido como servicios web. Por ejemplo, OpenStreetMap, que también agrega como un enlace externo, es un paquete de capas, por lo que el código anterior no lo moverá. No encontré una manera de detectar si se trata de un paquete de capas de la web, así que asegúrese de que las capas que desea mover sean las que espera en cuanto al código.

En lo que respecta a su estructura de capa particular, tenga en cuenta que Imágenes_globales es un conjunto de capas bloqueado, por lo que no puede separar sus subcapas incluso en ArcMap a mano. De hecho, el código todavía lo hace (más o menos), pero las capas movidas están rotas y las originales todavía están en su lugar. Asegúrese de que las capas que está tratando de mover se puedan mover a mano.

Finalmente, el código obviamente debe ajustarse a lo que está buscando exactamente: es posible que no los desee en el nivel de la raíz, su capa de grupo superior podría llamarse de otra manera, etc. Se incluyen algunas funciones que puede usar para probar el propiedades de la capa.

Ah, sí. A veces, las capas de servicio también son capas de grupo, así que pruébelo con cuidado.

Como referencia, mi estructura de capas antes y después:


Ver el vídeo: CREATING A GROUP LAYER AND LABELLING THEM