2 votos

Arcgis 10.2.2 Python Addin - Añadir capa a la vista de diseño?

He desarrollado una barra de herramientas python addin que añade un archivo de capa deseado (elegido desde un botón anidado en un menú en la barra de herramientas) a la tabla de contenidos en un proyecto. La funcionalidad sólo funciona, sin embargo, cuando el proyecto está en la vista de marco de datos - haciendo clic en una capa en el menú no hace nada si el proyecto está en la vista de diseño. He buscado en Google, pero no he encontrado una solución a este problema. ¿Alguien tiene alguna idea?

Utilizando: ArcGIS 10.2.2, Python 2.7

Código de ejemplo de trabajo para añadir una capa en la vista de marco de datos:

import arcpy
import pythonaddins

class FD_Bau_Fischaufstiege(object):
    """Implementation for Themenmanager_addin.button (Button)"""
    def __init__(self):
        self.enabled = True
##        self.checked = False
        self.mxd = arcpy.mapping.MapDocument('current')
    def onClick(self):
##        layer = r'\\msds.wv.de\dfsroot\HV\GROUP\Gis\DATEN\wvdat\Querbauwerke\Fischaufstieg.lyr'
        layer = r'G:\Gis\DATEN\wvdat\Querbauwerke\Fischaufstieg.lyr'
        activeDataFrame = self.mxd.activeView
        df = arcpy.mapping.ListDataFrames(self.mxd, activeDataFrame)[0]
        if arcpy.Exists(layer):
            layerToAdd = arcpy.mapping.Layer(layer)
            arcpy.mapping.AddLayer(df, layerToAdd, 'TOP')
        else:
            warningButton = pythonaddins.MessageBox("Die Datei ist nicht verfugbar.\nBitte kontaktieren Sie die GIS Abteilung.", "Datei nicht verfugbar", 0)
        pass

He probado lo siguiente, pero sigue sin añadir la capa cuando estoy en la vista de diseño:

import arcpy
import pythonaddins

class ButtonClass1(object):
    """Implementation for TEST_addin.button (Button)"""
    def __init__(self):
        self.enabled = True
##        self.checked = False
        self.mxd = arcpy.mapping.MapDocument('current')
    def onClick(self):
##        layer = r'\\msds.wv.de\dfsroot\HV\GROUP\Gis\DATEN\wvdat\Querbauwerke\Fischaufstieg.lyr'
        layer = r'G:\Gis\DATEN\wvdat\Querbauwerke\Fischaufstieg.lyr'
        activeDataFrame = self.mxd.activeView
        df = arcpy.mapping.ListDataFrames(self.mxd, activeDataFrame)[0]
        if activeDataFrame == 'PAGE_LAYOUT':
            if arcpy.Exists(layer):
                layerToAdd = arcpy.mapping.Layer(layer)
                arcpy.mapping.AddLayer(df, layerToAdd, 'TOP')
            else:
                warningButton = pythonaddins.MessageBox("Die Datei ist nicht verfugbar.\nBitte kontaktieren Sie die GIS Abteilung.", "Datei nicht verfugbar", 0)
        else:
            if arcpy.Exists(layer):
                layerToAdd = arcpy.mapping.Layer(layer)
                arcpy.mapping.AddLayer(df, layerToAdd, 'TOP')
            else:
                warningButton = pythonaddins.MessageBox("Die Datei ist nicht verfugbar.\nBitte kontaktieren Sie die GIS Abteilung.", "Datei nicht verfugbar", 0)
        pass

1voto

Xetius Puntos 10445

Puedes simplificar un poco tu código utilizando:

df = self.mxd.activeDataFrame
layer = r'G:\Gis\DATEN\wvdat\Querbauwerke\Fischaufstieg.lyr'
if arcpy.Exists(layer):
    layerToAdd = arcpy.mapping.Layer(layer)
    arcpy.mapping.AddLayer(df, layerToAdd, 'TOP')
else:
    warningButton = pythonaddins.MessageBox("warning")

También es posible que desee establecer la variable mxd en la función OnClick en lugar de en init . No puedo asegurarlo, pero sé que en algunos casos ArcGIS crea varias instancias de una clase de python antes de ser utilizada.

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