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

2021-08-26 22:04:01 字數 2733 閱讀 4359

通常我們使用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...