通常我們使用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.發布msd
def publishmxd(mxdpath, servicedir, servicefolder):
#檢查mxd和msd檔案是否存在
print "檢查檔案路徑……"
if os.path.exists(mxdpath) == false:
print "指定路徑的mxd文件不存在!"
return
# 開啟mxd文件
try:
print "正在開啟mxd文件……"
except exception, e:
print "open mxd error: ", e
return
else:
print "mxd文件開啟成功……"
# 獲取預設的資料框
print "正在讀取mxd文件預設資料框……"
df = ""
try:
if len(frames) == 0:
df = frames[0]
except exception, e:
print "讀取mxd文件預設資料框失敗:", e
return
# 構造msd文件名稱
msdpath = mxdpath.replace(".mxd", ".msd")
# 將mxd轉為msd
print "正在將mxd文件轉換為msd文件……"
# 分析msd
print "正在分析文件……"
# 列出分析結果資訊
for key in ('messages', 'warnings', 'errors'):
print "----" + key.upper() + "---"
vars = analysis[key]
for ((message, code), layerlist) in vars.iteritems():
print " ", message, " (code %i)" % code
for layer in layerlist:
print layer.name,
print
#獲取伺服器資訊
servicename = os.path.basename(msdpath).replace(".msd", "")
servername = servicedir.split("/")[2]
try:
#發布msd
print "正在發布服務……"
except exception, e:
print "發布服務失敗:", e
else:
print "服務發布成功!"
呼叫**:
import sys
from publishhelper import publishall # 必須要有正確的許可,否則匯入失敗
如此即可通過python指令碼去遍歷資料夾,並發布其中的mxd文件為地圖服務。稍作完善,還可作為windows服務自動執行,實現服務的隨到隨發。
ant指令碼 自動發布版本包
先簡單說一下這個指令碼的作用吧,指令碼的作用為自動shutdown服務 自動備份專案到指定的目錄 自動備份上次上傳的版本包 自動將新的版本包上傳到伺服器上 自動解壓 自動重啟服務。指令碼的所有引數都是在ant.properties中配置的,所以指令碼非常靈活,如果要上傳其他專案的版本包,只需要在配置...
iOS自動構建打包發布指令碼
原文 tomczhen的部落格 建議根據實際情況安裝 如專案中沒有使用cocoapods管理類庫則不用安裝cocoapods xctool是乙個很好的構建工具,有更加友好的log輸出和使用方法.如使用xcode自帶的xcodebuild構建則不需要安裝xctool.更新rubygem update ...
shell自動化指令碼發布
關於指令碼發布 部分,將這個 流程拆分為兩個部分 簡單指令碼 遠端主機上執行 和大型指令碼 線上機器執行 簡單指令碼從四個方面來學習 1 命令羅列實現功能 2 固定內容變數實現 3 功能函式實現 4 遠端執行命令 簡單的命令羅列 例項 cd data codes f django.tar.gz rm...