通過Python指令碼自動發布ArcGIS服務

來源:互聯網
上載者:User

通常我們使用ArcCatalog或者ArcGIS Server Manager等圖形介面工具來發布ArcGIS服務,然而有些情況下,比如需要發布的服務數量很多,而且需要不定期隨時發布的時候,再使用這些工具進行人工操作就顯得力不從心了。ArcGIS的強大之處就在於其為我們提供了多種選擇,我們可以通過Python編寫指令碼,調用ArcPy模組中的功能來實現自動掃描檔案夾並將其中的地圖文檔發布為地圖服務。

本文將建立一個publishHelper.py檔案,在其中編寫兩個方法,一個是PublishAll,用來遍曆檔案夾並調用另一個方法PublishMxd,後者完成具體的服務發布工作。

在服務發布之前,需要首先檢查mxd文檔路徑,讀取mxd文檔,轉為msd,分析文檔等,最後才是發布服務。

# -*- coding: utf-8 -*-import arcpy, os__name__ = 'publishHelper'# 將指定目錄下所有的.mxd文檔發布為地圖服務# folder:包含mxd文檔的檔案夾路徑# serviceDir:服務類別目錄URL,例如http://localhost/arcgis/rest/services# serviceFolder:服務所在檔案夾,如果為空白,則表示根目錄def PublishAll(folder,serviceDir,serviceFolder):    print "檢查檔案夾路徑……"    if os.path.isdir(folder) == False:        print "輸入的檔案夾路徑無效!"        return    print "遍曆檔案夾……"    files = os.listdir(folder)    for f in files:        if f.endswith(".mxd"):            mxdPath = os.path.join(folder, f)            print "publishing: " + f            PublishMxd(mxdPath, serviceDir, serviceFolder)        else:            continue#將mxd文檔發布為服務:1.將mxd轉為msd;2.分析msd;3.發布msddef PublishMxd(mxdPath, serviceDir, serviceFolder):    #檢查mxd和msd檔案是否存在    print "檢查檔案路徑……"    if os.path.exists(mxdPath) == False:        print "指定路徑的mxd文檔不存在!"        return        # 開啟mxd文檔    try:        print "正在開啟mxd文檔……"        mxd = arcpy.mapping.MapDocument(mxdPath)    except Exception, e:        print "open mxd error: ", e        return    else:        print "mxd文檔開啟成功……"    # 擷取預設的資料框    print "正在讀取mxd文檔預設資料框……"    df = ""    try:        frames = arcpy.mapping.ListDataFrames(mxd, "圖層")        if len(frames) == 0:           frames = arcpy.mapping.ListDataFrames(mxd, "Layers")         df = frames[0]    except Exception, e:        print "讀取mxd文檔預設資料框失敗:", e        return    # 構造msd文檔名稱    msdPath = mxdPath.replace(".mxd", ".msd")    # 將mxd轉為msd    print "正在將mxd文檔轉換為msd文檔……"    arcpy.mapping.ConvertToMSD(mxd, msdPath, df, "NORMAL", "NORMAL")    # 分析msd    print "正在分析文檔……"    analysis = arcpy.mapping.AnalyzeForMSD(mxd)    # 列出分析結果資訊    for key in ('messages', 'warnings', 'errors'):      print "----" + key.upper() + "---"      vars = analysis[key]      for ((message, code), layerlist) in vars.iteritems():        print "    ", message, " (CODE %i)" % code        print "       applies to:",        for layer in layerlist:            print layer.name,        print    #擷取伺服器資訊    serviceName = os.path.basename(msdPath).replace(".msd", "")    serverName = serviceDir.split("/")[2]    try:        #發布msd        print "正在發布服務……"        arcpy.mapping.PublishMSDToServer (msdPath, serviceDir, serverName, serviceName, serviceFolder, ["WMS", "KML"])    except Exception, e:        print "發布服務失敗:", e    else:        print "服務發布成功!"

調用代碼:

import syssys.path.append("E:\\Codes\\Python")from publishHelper import PublishAll # 必須要有正確的許可,否則匯入失敗PublishAll("D:\\TestData", "http://localhost/ArcGIS/rest/services", "sichuan")

如此即可通過Python指令碼去遍曆檔案夾,並發布其中的mxd文檔為地圖服務。稍作完善,還可作為windows服務自動運行,實現服務的隨到隨發。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.