7 votos

Obtención de capas a partir de .msd utilizando ArcPy?

Necesito el nombre de cada capa en un .msd, pero no he podido encontrar soporte usando arcpy (ArcGIS 10.0). Hay un método que me perdí?

En el flujo de trabajo actual, como estoy publicando el documento, utilizo el servicio REST:

descriptionUrl = url + "/ArcGIS/rest/services/" + mapServer + "/MapServer?f=json"  
restResponseFp = urllib.urlopen(descriptionUrl)
mapDescription =json.load(restResponseFp)
layerNames = [str(layer["name"]) for layer in mapDescription["layers"]]

7voto

Azim Puntos 4541
import zipfile
from xml.etree.cElementTree import iterparse

zz = zipfile.ZipFile('C:\\Temp\\Untitled.msd')

serviceNames = []
for name in zz.namelist():
    if name == "DocumentInfo.xml" or name == "layers/layers.xml":
        pass
    else:
        for _event, elem in iterparse(zz.open(name)):
            if elem.tag == "Name":
                serviceNames.append(elem.text)
                break
zz.close()

Los archivos asociados a las capas se denominan así: capas/nombreclase.xml

Los nombres de servicio largos se truncan para hacer el nombre del archivo, por lo que debemos analizar el contenido del archivo para manejar todos los casos.

0 votos

Gracias. En realidad, observo que como los nombres de mis servicios son muy largos, el nombre del archivo xml se trunca. Cada archivo asociado a una capa debe ser analizado para que el elemento "Nombre" maneje de forma fiable los nombres de servicio largos.

0 votos

@theJones ¿hay alguna forma de obtener el servicio del DocumentInfo.xml? ¿Conoces alguna propiedad que pueda imprimir el nombre del servicio?

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