Jak automatycznie publikować wiele plików MXD w ArcGIS Server 10.1?

12

Jak automatycznie publikować wiele plików MXD w ArcGIS Server 10.1?

Mam około 60 plików MXD i chcę je opublikować automatycznie. Czy jest na to sposób?

użytkownik7172
źródło
Btelliot, twój kod działa również 10.2! Oczywiście istnieje potrzeba zdefiniowania niektórych szczegółów dotyczących usługi, ale jest to niesamowity punkt wyjścia !!! 10X

Odpowiedzi:

14

możesz użyć Arcpy do publikowania plików MXD.

do wyświetlania plików mxd użyj 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

a następnie idź w tę stronę:

1. Funkcja AnalyzeForMSD () ( informacje ): Analizuje dokumenty mapy (.mxd) w celu ustalenia źródeł potencjalnych problemów z przydatnością i wydajnością podczas konwersji mapy do pliku definicji usługi mapy (MSD).

Przykład:

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ReadyForMSD.mxd")
analysis = arcpy.mapping.AnalyzeForMSD(mxd)

2. Funkcja ConvertToMSD () ( informacje ): Konwertuje mapę na plik definicji usługi mapowej (MSD).

Przykład:

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. Funkcja PublishMSDToServer () ( informacje ): Publikuje istniejący plik definicji usługi mapowej ( MSD) na wyznaczonym serwerze ArcGIS.

Przykład:

import arcpy
msd = r"C:\Project\Project.msd"
arcpy.mapping.PublishMSDToServer (msd, "http://<MyServer>/arcgis/services", 
              "<MyServer>", "MyMapService", "MyMapServiceFolder", ["WMS", "KML"])

ostatnią rzeczą, którą powinieneś zrobić, aby połączyć wszystkie funkcje dla swoich potrzeb. w rzeczywistości istnieje samouczek, który może pomóc ci tutaj o używaniu mapowania ArcPy do publikowania dokumentów map na serwerze ArcGIS . jest podobny do mojej dokumentacji ...

Podsumowując (zdjęcie pochodzi z linku, który podam powyżej):

Arcgis

Mam nadzieję, że Ci to pomoże...

Aragonia
źródło
Będzie działał z ags 10.1? W wersji 10.1 jest * .sd zamiast * .msd.
user7172
tak, dotyczy to 10, ale możesz zaktualizować nowy arcpy dla 10.1 ...
Aragon
1
Dzięki Aragon, to było bardzo pomocne! Właśnie zakończyłem automatyczne publikowanie ponad 130 MXD. :) Dla potomności przepływ pracy w wersji 10.1: arcpy.mapping.CreateMapSDDraft-> arcpy.StageService_server->arcpy.UploadServiceDefinition_server
Mintx
4

Aragon ma świetną odpowiedź, ale niestety nie działa w ArcGIS / ArcServer 10.1.

Nowa metoda, którą właśnie wypróbowałem, opiera się na pomocy ArcGIS 10.1. Link do pliku pomocy można znaleźć tutaj: http://resources.arcgis.com/en/help/main/10.1/index.html#//00s30000006q000000

Oto jak wykorzystałem kod do opublikowania MXD na podstawie określonego folderu:

#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']

Może być prostszy sposób na użycie tego kodu, ale działa on dla mnie. Mam nadzieję że to pomoże.

Btelliot
źródło