Come pubblicare automaticamente molti file MXD in ArcGIS Server 10.1?


12

Come pubblicare automaticamente molti file mxd in ArcGIS Server 10.1?

Ho circa 60 file mxd e voglio pubblicarli automaticamente. C'è un modo per fare questo?


Btelliot, il tuo codice funziona anche 10.2! È ovviamente necessario definire alcuni dettagli relativi al servizio, ma questo è un punto di partenza straordinario !!! 10X

Risposte:


14

puoi usare arcpy per pubblicare i tuoi file mxd.

per elencare i tuoi file mxd usa 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

e poi vai in questo modo:

1. Funzione AnalyseForMSD () ( informazioni ): analizza i documenti della mappa (.mxd) per determinare le fonti per potenziali problemi di idoneità e prestazioni durante la conversione di una mappa in un file di definizione del servizio di mappa (MSD).

Esempio:

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

2. Funzione ConvertToMSD () ( informazioni ): converte una mappa in un file di definizione del servizio mappe (MSD).

Esempio:

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. Funzione PublishMSDToServer () ( informazioni ): pubblica un file di definizione del servizio mappe (MSD) esistente su un server ArcGIS designato.

Esempio:

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

l'ultima cosa che dovresti fare è quella di unire tutte le funzioni per le tue esigenze. in realtà c'è un tutorial che può aiutarti qui su Usa ArcPy Mapping per pubblicare documenti cartografici su ArcGIS Server . è simile alla mia documentazione ...

Riassumendo (l'immagine proviene dal link che do sopra):

ArcGIS

spero che ti aiuti ...


Lo farà lavorando con ags 10.1? In 10.1 è * .sd invece di * .msd.
user7172

sì, questo è per 10 ma è possibile aggiornare il nuovo arcpy per 10.1 ...
Aragon

1
Grazie Aragona, questo è stato molto utile! Ho appena finito di pubblicare automaticamente oltre 130 MXD. :) Solo per i posteri, il flusso di lavoro 10.1 è: arcpy.mapping.CreateMapSDDraft-> arcpy.StageService_server->arcpy.UploadServiceDefinition_server
Mintx


4

Aragon ha un'ottima risposta, ma sfortunatamente non funziona per ArcGIS / ArcServer 10.1.

Il nuovo metodo che ho appena provato si basa sull'aiuto di ArcGIS 10.1. Puoi trovare il link al file della guida qui: http://resources.arcgis.com/en/help/main/10.1/index.html#//00s30000006q000000

Ecco come ho usato il codice per pubblicare MXD in base a una cartella specificata:

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

Potrebbe esserci un modo più semplice di utilizzare questo codice, ma funziona per me. Spero che sia di aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.