Wie kann ich viele MXD-Dateien in ArcGIS Server 10.1 automatisch veröffentlichen?

12

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?

user7172
quelle
Btelliot, Ihr Code funktioniert auch 10.2! Es ist offensichtlich notwendig, einige Details in Bezug auf den Service zu definieren, aber dies ist ein erstaunlicher Ausgangspunkt !!! 10X

Antworten:

14

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

arcgis

ich hoffe es hilft dir ...

Aragon
quelle
Sein Wille, mit ags 10.1 zu arbeiten? In 10.1 steht * .sd statt * .msd.
User7172
Ja, dies ist für 10, aber Sie können den neuen Arcpy für 10.1 ...
Aragon
1
Danke Aragon, das war sehr hilfreich! Gerade die automatische Veröffentlichung von über 130 MXDs abgeschlossen. :) Nur für die Nachwelt ist der 10.1 Workflow: arcpy.mapping.CreateMapSDDraft-> arcpy.StageService_server->arcpy.UploadServiceDefinition_server
Mintx
4

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.

Btelliot
quelle