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?
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?
Jawaban:
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):
Saya harap ini membantu Anda ...
arcpy.mapping.CreateMapSDDraft
-> arcpy.StageService_server
->arcpy.UploadServiceDefinition_server
jika Anda ingin melakukannya di c # Anda dapat melihat di blog saya: http://nicogis.blogspot.it/2012/10/ags-101-restful-administrative-api.html
untuk konversi mxd -> msd Anda dapat menggunakan python dipanggil dari c #
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.