Sunday, 23 September 2018

python - Getting layers from .msd using ArcPy?


I need the name of each layer in an .msd, but I could not find support using arcpy (ArcGIS 10.0). Is there a method I missed?


In the current workflow, since I am publishing the document, I use the REST service:


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"]]

Answer



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


Files associated with layers are named like this: layers/featureclassname.xml


Long service names are truncated to make the file name, so we must parse the file contents to handle all cases.


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...