Comment publier automatiquement de nombreux fichiers mxd dans ArcGIS Server 10.1?
J'ai environ 60 fichiers mxd et je souhaite les publier automatiquement. Est-ce qu'il y a un moyen de faire ça?
Comment publier automatiquement de nombreux fichiers mxd dans ArcGIS Server 10.1?
J'ai environ 60 fichiers mxd et je souhaite les publier automatiquement. Est-ce qu'il y a un moyen de faire ça?
Réponses:
vous pouvez utiliser arcpy pour publier vos fichiers mxd.
pour lister vos fichiers mxd, utilisez 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
puis procédez comme suit:
1. Fonction AnalyzeForMSD () ( info ): analyse les documents cartographiques (.mxd) pour déterminer les sources de problèmes potentiels d'adéquation et de performances lors de la conversion d'une carte en fichier de définition de service de carte (MSD).
Exemple:
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ReadyForMSD.mxd")
analysis = arcpy.mapping.AnalyzeForMSD(mxd)
2. Fonction ConvertToMSD () ( info ): convertit une carte en un fichier de définition de service de carte (MSD).
Exemple:
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. Fonction PublishMSDToServer () ( info ): publie un fichier de définition de service de carte (MSD) existant sur un serveur ArcGIS désigné.
Exemple:
import arcpy
msd = r"C:\Project\Project.msd"
arcpy.mapping.PublishMSDToServer (msd, "http://<MyServer>/arcgis/services",
"<MyServer>", "MyMapService", "MyMapServiceFolder", ["WMS", "KML"])
la dernière chose à faire est de fusionner toutes les fonctions selon vos besoins. en fait, il existe un didacticiel qui peut vous aider ici à propos de l' utilisation d'ArcPy Mapping pour publier des documents cartographiques sur ArcGIS Server . c'est similaire à ma documentation ...
Pour résumer (l'image provient du lien que je donne ci-dessus):
J'espère que ça t'aide...
arcpy.mapping.CreateMapSDDraft
-> arcpy.StageService_server
->arcpy.UploadServiceDefinition_server
si vous voulez le faire en c # vous pouvez le voir sur mon blog: http://nicogis.blogspot.it/2012/10/ags-101-restful-administrative-api.html
pour la conversion mxd -> msd vous pouvez utiliser python appelé depuis c #
Aragon a une excellente réponse, mais malheureusement, cela ne fonctionne pas pour ArcGIS / ArcServer 10.1.
La nouvelle méthode que je viens d'essayer est basée sur l'aide d'ArcGIS 10.1. Vous pouvez trouver le lien vers le fichier d'aide ici: http://resources.arcgis.com/en/help/main/10.1/index.html#//00s30000006q000000
Voici comment j'ai utilisé le code pour publier des MXD basés sur un dossier spécifié:
#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']
Il pourrait y avoir un moyen plus simple d'utiliser ce code, mais cela fonctionne pour moi. J'espère que cela t'aides.