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ı?
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ı?
Yanıtlar:
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):
umarım sana yardımcı olur ...
arcpy.mapping.CreateMapSDDraft
-> arcpy.StageService_server
->arcpy.UploadServiceDefinition_server
c # 'da yapmak isterseniz blogumda görebilirsiniz: http://nicogis.blogspot.it/2012/10/ags-101-restful-administrative-api.html
dönüşüm mxd -> msd için c # denilen python kullanabilirsiniz
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.