Bagaimana cara mempublikasikan banyak file MXD di ArcGIS Server 10.1 secara otomatis?

12

Bagaimana cara mempublikasikan banyak file mxd di ArcGIS Server 10.1 secara otomatis?

Saya memiliki sekitar 60 file mxd dan saya ingin mempublikasikannya secara otomatis. Apakah ada cara untuk melakukan ini?

pengguna7172
sumber
Btelliot, kode Anda juga bekerja 10,2! Jelas ada kebutuhan untuk mendefinisikan beberapa detail mengenai layanan ini, tetapi ini adalah titik awal yang luar biasa !!! 10X

Jawaban:

14

Anda dapat menggunakan arcpy untuk menerbitkan file mxd Anda.

untuk daftar file mxd Anda menggunakan 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

lalu pergi seperti ini:

1. Fungsi AnalyzeForMSD () ( info ): Menganalisis dokumen peta (.mxd) untuk menentukan sumber potensi kesesuaian dan masalah kinerja saat mengonversi peta ke file definisi layanan peta (MSD).

Contoh:

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

2. Fungsi ConvertToMSD () ( info ): Mengubah peta menjadi file definisi layanan peta (MSD).

Contoh:

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. Fungsi PublishMSDToServer () ( info ): Mempublikasikan file definisi layanan peta (MSD) yang ada ke Server ArcGIS yang ditunjuk.

Contoh:

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

hal terakhir yang harus Anda lakukan adalah menggabungkan semua fungsi untuk kebutuhan Anda. sebenarnya ada tutorial yang dapat membantu Anda di sini tentang Menggunakan Pemetaan ArcPy untuk Mempublikasikan Dokumen Peta ke ArcGIS Server . ini mirip dengan dokumentasi saya ...

Untuk meringkas (gambar dari tautan yang saya berikan di atas):

arcgis

Saya harap ini membantu Anda ...

Aragon
sumber
Akan dengan bekerja dengan AGS 10.1? Di 10.1 adalah * .sd bukan * .msd.
user7172
ya ini untuk 10 tetapi Anda dapat memperbarui busur baru untuk 10.1 ...
Aragon
1
Terima kasih Aragon, ini sangat membantu! Baru saja menyelesaikan penerbitan otomatis lebih dari 130 MXD. :) Hanya untuk anak cucu, alur kerja 10.1 adalah: arcpy.mapping.CreateMapSDDraft-> arcpy.StageService_server->arcpy.UploadServiceDefinition_server
Mintx
4

Aragon memiliki jawaban yang bagus, tetapi sayangnya itu tidak berhasil untuk ArcGIS / ArcServer 10.1.

Metode baru yang baru saja saya coba didasarkan pada bantuan ArcGIS 10.1. Anda dapat menemukan tautan ke file bantuan di sini: http://resources.arcgis.com/en/help/main/10.1/index.html#//00s30000006q000000

Inilah cara saya menggunakan kode untuk menerbitkan MXD berdasarkan folder yang ditentukan:

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

Mungkin ada cara yang lebih sederhana untuk menggunakan kode ini, tetapi itu berhasil untuk saya. Semoga ini membantu.

Btelliot
sumber