Wie kann ich viele mxd-Dateien in ArcGIS Server 10.1 automatisch veröffentlichen?
Ich habe ca. 60 mxd-Dateien und möchte diese automatisch veröffentlichen. Gibt es eine Möglichkeit, dies zu tun?
Wie kann ich viele mxd-Dateien in ArcGIS Server 10.1 automatisch veröffentlichen?
Ich habe ca. 60 mxd-Dateien und möchte diese automatisch veröffentlichen. Gibt es eine Möglichkeit, dies zu tun?
Antworten:
Sie können arcpy zum Veröffentlichen Ihrer MXD-Dateien verwenden.
Verwenden Sie os.walk, um Ihre MXD-Dateien aufzulisten:
import os
import arcpy
path= r"c:\path"
for (path, dirs, files) in os.walk(path):
for fl in files:
if fl.lower().endswith(".mxd"):
mxd = arcpy.mapping.MapDocument(os.path.join(path, fl))
print mxd.filePath
und dann geh diesen Weg:
1. AnalyzeForMSD () -Funktion ( Info ): Analysiert Kartendokumente (.mxd), um Quellen für potenzielle Eignungs- und Leistungsprobleme beim Konvertieren einer Karte in eine Kartendefinitionsdatei (MSD) zu ermitteln.
Beispiel:
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ReadyForMSD.mxd")
analysis = arcpy.mapping.AnalyzeForMSD(mxd)
2. ConvertToMSD () -Funktion ( Info ): Konvertiert eine Karte in eine MSD-Datei (Map Service Definition).
Beispiel:
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ReadyForMSD.mxd")
msd = r"C:\Project\Output\Project.msd"
df = arcpy.mapping.ListDataFrames(mxd, "County Maps")[0]
arcpy.mapping.ConvertToMSD(mxd, msd, df, "NORMAL", "NORMAL")
del mxd, msd
3. PublishMSDToServer () -Funktion ( Info ): Publiziert eine vorhandene MSD-Datei (Map Service Definition) auf einem bestimmten ArcGIS-Server.
Beispiel:
import arcpy
msd = r"C:\Project\Project.msd"
arcpy.mapping.PublishMSDToServer (msd, "http://<MyServer>/arcgis/services",
"<MyServer>", "MyMapService", "MyMapServiceFolder", ["WMS", "KML"])
Das letzte, was Sie tun sollten, ist, alle Funktionen für Ihre Bedürfnisse zusammenzuführen. tatsächlich gibt es ein Tutorial , das u helfen kann hier über Verwendung ArcPy Mapping Map Dokumente zu ArcGIS Server zu veröffentlichen . es ist meiner Dokumentation ähnlich ...
Zusammenfassend (Bild ist von Link, den ich oben gebe):
ich hoffe es hilft dir ...
arcpy.mapping.CreateMapSDDraft
-> arcpy.StageService_server
->arcpy.UploadServiceDefinition_server
Wenn Sie es in C # tun möchten, können Sie in meinem Blog sehen: http://nicogis.blogspot.it/2012/10/ags-101-restful-administrative-api.html
Für die Konvertierung mxd -> msd können Sie Python verwenden, das von c # aufgerufen wird.
Aragon hat eine gute Antwort, aber leider funktioniert es nicht für ArcGIS / ArcServer 10.1.
Die neue Methode, die ich gerade ausprobiert habe, basiert auf der ArcGIS 10.1-Hilfe. Den Link zur Hilfedatei finden Sie hier: http://resources.arcgis.com/de/help/main/10.1/index.html#//00s30000006q000000
So habe ich den Code zum Veröffentlichen von MXDs verwendet, die auf einem angegebenen Ordner basieren:
#import modules
import arcpy, sys, os, string
#specify folder containing MXDs
inFolder = raw_input("Please enter folder containing 10.1 MXDs to Publish to ArcServer: ")
#specify connection File Path
connectionFilePath = r'C:\Users\<your user name>\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog\<your connection file location.ags>'
#look in folder for mxds
MapPath= []
MapFolder = os.listdir(inFolder)
for file in MapFolder:
fileExt = os.path.splitext(file)[1]
if fileExt == ".mxd":
MapPath = os.path.join(inFolder, file)
file = MapPath.strip('\'')
mxd = arcpy.mapping.MapDocument(file)
base = os.path.basename(file)
serviceName = base[:-4]
SDDraft = file[:-4] + ".sddraft"
sd = file[:-4] + ".sd"
#Create Map SD Draft
print "\n" + "Publishing: " + base
analysis = arcpy.mapping.CreateMapSDDraft(mxd, SDDraft, serviceName, "FROM_CONNECTION_FILE", connectionFilePath, "False", <Service Folder Name>, "None", "None")
# stage and upload the service if the sddraft analysis did not contain errors
if analysis['errors'] == {}:
# Execute StageService
print "Staging Service"
arcpy.StageService_server(SDDraft, sd)
# Execute UploadServiceDefinition
print "Uploading Service Definition"
arcpy.UploadServiceDefinition_server(sd, connectionFilePath)
print "Publishing " + base +" succeeded" + "\n"
else:
# if the sddraft analysis contained errors, display them
print analysis['errors']
Es gibt möglicherweise eine einfachere Möglichkeit, diesen Code zu verwenden, aber sie funktioniert bei mir. Hoffe das hilft.