Mehr

Gibt es ein Python-Skript, um zu ermitteln, welche Datenbank-Features in Karten-/Feature-Services enthalten sind?


Ich möchte Feature-Classes identifizieren, die in meinen Karten-Services vorhanden sind. Gibt es eine Möglichkeit, dies mit Python zu automatisieren?


Ja, Sie sollten dies tun können, indem Sie die Service-Definitionsdatei (.sd) entpacken. Im Inhalt befindet sich ein XML-Dokument namens "manifest.xml". Sie können das Python-Modul xml.tree verwenden, um den Namen jedes Layers (Name-Tag) und seine Datenquelle (OnPremisePath-Tag) zu lesen.

So sieht die manifest.xml aus:

Sie können Dateien mit dieser Funktion entpacken:

import os import zipfile def unzip(z, new): zfile = zipfile.ZipFile(z) for name in zfile.namelist(): (dirname, filename) = os.path.split(name) if not os.path.exists (neu): os.makedirs(neu) zfile.extract(name, neu)

Sie könnten den REST-Endpunkt des Kartendienstes verwenden:

import urllib2 import json content = urllib2.urlopen("http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/layers?f=pjson").read() service = json.loads(content) for layer in service['layers']: print layer['name'], ":", layer['type']

Oder verwenden Sie ConvertWebMapToMapDocument (arcpy.mapping), um auf vertrautere Weise ein MXD zu erhalten und Layer aufzulisten.