¿Cómo publicar muchos archivos mxd en ArcGIS Server 10.1 automáticamente?
Tengo alrededor de 60 archivos mxd y quiero publicarlos automáticamente. ¿Hay alguna forma de hacer esto?
¿Cómo publicar muchos archivos mxd en ArcGIS Server 10.1 automáticamente?
Tengo alrededor de 60 archivos mxd y quiero publicarlos automáticamente. ¿Hay alguna forma de hacer esto?
Respuestas:
puede usar arcpy para publicar sus archivos mxd.
para listar sus archivos mxd use os.walk:
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
y luego ve de esta manera:
1. Función AnalyzeForMSD () ( información ): analiza documentos de mapa (.mxd) para determinar las fuentes de problemas potenciales de idoneidad y rendimiento al convertir un mapa en un archivo de definición de servicio de mapa (MSD).
Ejemplo:
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ReadyForMSD.mxd")
analysis = arcpy.mapping.AnalyzeForMSD(mxd)
2. Función ConvertToMSD () ( información ): Convierte un mapa en un archivo de definición de servicio de mapas (MSD).
Ejemplo:
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. Función PublishMSDToServer () ( información ): publica un archivo de definición de servicio de mapas (MSD) existente en un servidor ArcGIS designado.
Ejemplo:
import arcpy
msd = r"C:\Project\Project.msd"
arcpy.mapping.PublishMSDToServer (msd, "http://<MyServer>/arcgis/services",
"<MyServer>", "MyMapService", "MyMapServiceFolder", ["WMS", "KML"])
Lo último es que debe hacer que fusionar todas las funciones para sus necesidades. En realidad, hay un tutorial que puede ayudarlo aquí sobre el uso de la asignación de ArcPy para publicar documentos de mapa en ArcGIS Server . es similar a mi documentación ...
Para resumir (la imagen es del enlace que doy arriba):
Espero que te ayude...
arcpy.mapping.CreateMapSDDraft
-> arcpy.StageService_server
->arcpy.UploadServiceDefinition_server
si quieres hacerlo en c # puedes verlo en mi blog: http://nicogis.blogspot.it/2012/10/ags-101-restful-administrative-api.html
para la conversión mxd -> msd puede usar python llamado desde c #
Aragón tiene una gran respuesta, pero desafortunadamente no funciona para ArcGIS / ArcServer 10.1.
El nuevo método que acabo de probar se basa en la ayuda de ArcGIS 10.1. Puede encontrar el enlace al archivo de ayuda aquí: http://resources.arcgis.com/en/help/main/10.1/index.html#//00s30000006q000000
Así es como usé el código para publicar MXDs basados en una carpeta específica:
#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']
Puede haber una forma más simple de usar este código, pero funciona para mí. Espero que esto ayude.