ArcGIS Server 10.1에서 많은 MXD 파일을 자동으로 게시하는 방법은 무엇입니까?


12

ArcGIS Server 10.1에서 많은 mxd 파일을 자동으로 게시하는 방법은 무엇입니까?

약 60 mxd 파일이 있으며 자동으로 게시하고 싶습니다. 이것을 할 수있는 방법이 있습니까?


Btelliot, 코드도 10.2로 작동합니다! 서비스에 관한 세부 사항을 정의 할 필요가 있지만, 이것은 놀라운 출발점입니다 !!! 10X

답변:


14

mxd 파일을 게시하기 위해 arcpy를 사용할 수 있습니다.

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 () 함수 ( info ) : 맵을 맵 서비스 정의 (MSD) 파일로 변환 할 때 잠재적 적합성 및 성능 문제에 대한 소스를 판별하기 위해 맵 문서 (.mxd)를 분석합니다.

예:

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

2. ConvertToMSD () 함수 ( info ) : 맵을 MSD (Map Service Definition) 파일로 변환합니다.

예:

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 () 함수 ( info ) : 기존 맵 서비스 정의 (MSD) 파일을 지정된 ArcGIS Server에 게시합니다.

예:

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

마지막으로 모든 기능을 필요에 맞게 병합해야합니다. 실제로 유를 도울 수있는 튜토리얼이 여기 에 대해 는 ArcGIS Server에 대한지도 문서를 게시하는 데 사용 ArcPy 매핑 . 내 문서와 비슷합니다 ...

요약하면 (이미지는 위의 링크에서 가져온 것입니다) :

Arcgis

나는 그것이 당신에게 도움이되기를 바랍니다 ...


ags 10.1과의 협력으로 의지가 있습니까? 10.1에서 * .msd 대신 * .sd입니다.
user7172

네 이것은 10을위한 것이지만 당신은 10.1을위한 새로운 arcpy를 업데이트 할 수 있습니다 ...
Aragon

1
감사합니다 Aragon, 이것은 매우 도움이되었습니다! 130 개 이상의 MXD 자동 게시를 마쳤습니다. :) 후손을 위해 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/en/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.