วิธีการเผยแพร่ไฟล์ MXD จำนวนมากใน ArcGIS Server 10.1 โดยอัตโนมัติ?


12

วิธีการเผยแพร่ไฟล์ mxd จำนวนมากใน ArcGIS Server 10.1 โดยอัตโนมัติ?

ฉันมีไฟล์ประมาณ 60 mxd และฉันต้องการเผยแพร่โดยอัตโนมัติ มีวิธีการทำเช่นนี้?


Btelliot รหัสของคุณก็ใช้งานได้ 10.2! เห็นได้ชัดว่าจำเป็นต้องกำหนดรายละเอียดบางอย่างเกี่ยวกับบริการ แต่นี่เป็นจุดเริ่มต้นที่น่าทึ่ง !!! 10X

คำตอบ:


14

คุณสามารถใช้ arcpy เพื่อเผยแพร่ไฟล์ mxd ของคุณ

สำหรับการแสดงรายการไฟล์ mxd ของคุณใช้ 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

และจากนั้นไปทางนี้:

1. AnalyzeForMSD () ฟังก์ชัน ( ข้อมูล ): วิเคราะห์เอกสารแผนที่ (.mxd) เพื่อกำหนดแหล่งที่มาสำหรับความเหมาะสมและปัญหาด้านประสิทธิภาพเมื่อแปลงแผนที่เป็นไฟล์ map service definition (MSD)

ตัวอย่าง:

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

2. ConvertToMSD () ฟังก์ชัน ( ข้อมูล ): แปลงแผนที่เป็นไฟล์ map service definition (MSD)

ตัวอย่าง:

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 () ฟังก์ชัน ( ข้อมูล ): ประกาศไฟล์ map service definition (MSD) ที่มีอยู่ไปยัง ArcGIS Server ที่กำหนด

ตัวอย่าง:

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

สิ่งสุดท้ายคือคุณควรทำเช่นนั้นรวม funcitons ทั้งหมดสำหรับความต้องการของคุณ ที่จริงมีการกวดวิชาที่สามารถช่วยให้ยูที่นี่เกี่ยวกับการใช้ ArcPy แมปเพื่อเผยแพร่แผนที่เอกสาร ArcGIS เซิร์ฟเวอร์ มันคล้ายกับเอกสารของฉัน ...

เพื่อสรุป (ภาพจากลิงค์ที่ฉันให้ไว้ด้านบน):

ArcGIS

ฉันหวังว่ามันจะช่วยคุณ ...


มันจะทำงานร่วมกับ ags 10.1 หรือไม่ ใน 10.1 คือ * .sd แทนที่จะเป็น * .msd
7172

ใช่นี้เป็น 10 แต่คุณสามารถอัปเดตใหม่สำหรับ arcpy 10.1 ...
อารากอน

1
ขอบคุณอารากอนสิ่งนี้มีประโยชน์มาก! เพิ่งเผยแพร่อัตโนมัติมากกว่า 130 MXDs :) เพียงเพื่อลูกหลานเวิร์กโฟลว์ 10.1 คือ: arcpy.mapping.CreateMapSDDraft-> arcpy.StageService_server->arcpy.UploadServiceDefinition_server
Mintx


4

Aragon มีคำตอบที่ดี แต่น่าเสียดายที่มันไม่สามารถใช้งานได้กับ ArcGIS / ArcServer 10.1

วิธีการใหม่ที่ฉันลองใช้นั้นขึ้นอยู่กับความช่วยเหลือของ ArcGIS 10.1 คุณสามารถค้นหาลิงก์ไปยังไฟล์ช่วยเหลือได้ที่นี่: http://resources.arcgis.com/th/help/main/10.1/index.html#//00s30000006q000000

นี่คือวิธีที่ฉันใช้รหัสเพื่อเผยแพร่ MXD ตามโฟลเดอร์ที่ระบุ:

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

อาจมีวิธีที่ง่ายกว่าในการใช้รหัสนี้ แต่ใช้งานได้สำหรับฉัน หวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.