ArcGIS Server 10.1'de birçok MXD dosyasını otomatik olarak nasıl yayınlayabilirim?


12

ArcGIS Server 10.1'de birçok mxd dosyasını otomatik olarak nasıl yayınlayabilirim?

Yaklaşık 60 mxd dosyam var ve bunları otomatik olarak yayınlamak istiyorum. Bunu yapmanın bir yolu var mı?


Btelliot, kodunuz da 10.2 çalışıyor! Açıkçası hizmet ile ilgili bazı ayrıntıları tanımlamak için bir ihtiyaç var, ama bu inanılmaz bir başlangıç ​​noktası !!! 10X

Yanıtlar:


14

mxd dosyalarınızı yayınlamak için arcpy kullanabilirsiniz.

mxd dosyalarınızı listelemek için os.walk kullanın:

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

ve sonra şu şekilde gidin:

1. AnalyzeForMSD () işlevi ( info ): Bir haritayı bir harita hizmeti tanımı (MSD) dosyasına dönüştürürken olası uygunluk ve performans sorunları için kaynakları belirlemek amacıyla harita belgelerini (.mxd) analiz eder.

Misal:

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

2. ConvertToMSD () işlevi ( info ): Bir haritayı bir harita hizmeti tanımı (MSD) dosyasına dönüştürür.

Misal:

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 () işlevi ( info ): Varolan bir harita hizmeti tanımı (MSD) dosyasını belirtilen ArcGIS Sunucusuna yayınlar .

Misal:

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

son şey, ihtiyaçlarınız için tüm funcitons birleştirmek gerekir. aslında harita belgelerini ArcGIS Server'da yayınlamak için ArcPy Mapping'i kullanma hakkında burada size yardımcı olabilecek bir öğretici var . belgelerime benzer ...

Özetlemek için (resim yukarıda verdiğim bağlantıdan):

arcgis

umarım sana yardımcı olur ...


Ags 10.1 ile çalışacak mı? 10.1'de * .msd yerine * .sd kullanılır.
user7172

evet bu 10 için ama 10.1 için yeni arcpy güncelleyebilirsiniz ...
Aragon

1
Teşekkürler Aragon, bu çok yardımcı oldu! 130'dan fazla MXD'yi otomatik olarak yayınlamayı bitirdim. :) Sadece gelecek nesiller için, 10.1 iş akışı: arcpy.mapping.CreateMapSDDraft-> arcpy.StageService_server->arcpy.UploadServiceDefinition_server
Mintx


4

Aragon'un harika bir cevabı var, ancak ne yazık ki ArcGIS / ArcServer 10.1 için çalışmıyor.

Az önce denediğim yeni yöntem ArcGIS 10.1 yardımına dayanıyor. Yardım dosyasının bağlantısını şu adreste bulabilirsiniz: http://resources.arcgis.com/en/help/main/10.1/index.html#//00s30000006q000000

Kodu, belirli bir klasöre dayalı MXD'leri yayınlamak için nasıl kullandım:

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

Bu kodu kullanmanın daha basit bir yolu olabilir, ancak benim için çalışıyor. Bu yardımcı olur umarım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.