程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

基於Python實現GeoServer矢量文件批量發布

編輯:Python

目錄

0. 前言

1. 環境

1.1 基礎環境

1.2 谷歌浏覽器驅動

2. 基本流程

2.1 初始化

2.2 登錄

2.3 新建數據源

2.4 保存數據存儲

2.5 發布圖層

3. 完整代碼

0. 前言

由於矢量圖層文件較多,手動發布費時費力,python支持的關於geoserver包(geoserver-restconfig)又由於年久失修,無法在較新的geoserver版本中正常使用。

查閱了很多資料,參考了下面這篇博客,我簡單寫了一個自動化發布矢量文件的代碼。

基本流程:獲取指定文件夾下所有的.shp文件,在通過模擬正常發布的流程逐個發布。

Python+Selenium實現在Geoserver批量發布Mongo矢量數據

1. 環境1.1 基礎環境

首先你的電腦要有python環境、谷歌浏覽器和geoserver2.19左右的版本

接著在命令行中通過如下指令,安裝Web自動化測試工具selenium

pip install selenium1.2 谷歌浏覽器驅動

此外,還需要谷歌浏覽器的對應驅動。

首先需要查詢你的谷歌浏覽器的版本,在谷歌浏覽器的網址欄輸入chrome://version/,第一行就是版本號

在這個網址中找到對應版本號的驅動

這裡和我的谷歌浏覽器最匹配的驅動是

下載windows版本的驅動

解壓後將exe文件放置在main.py文件所在的目錄下。

2. 基本流程2.1 初始化

運行代碼後,程序會自動開啟一個google浏覽器窗口,接著進入geoserver。

2.2 登錄

自動輸入用戶名和密碼,並點擊登錄

2.3 新建數據源

進入新建數據源發布頁面

http://localhost:8080/geoserver/web/wicket/bookmarkable/org.geoserver.web.data.store.NewDataPage

選擇shapefile文件格式

2.4 保存數據存儲

選擇工作區,數據源名稱,shapefile文件的位置,設置DBF字符集,點擊保存

2.5 發布圖層

首先點擊發布

接著設置源坐標系,目標坐標系,原始邊界和目標邊界

最後點擊保存完成發布

3. 完整代碼

main.py

from time import sleepfrom selenium import webdriverimport os# 登錄def login(): driver.get(baseUrl) driver.find_element_by_id("username").send_keys(username) # 填入用戶名 driver.find_element_by_id("password").send_keys(password) # 填入密碼 driver.find_element_by_css_selector(".positive").click() sleep(0.8)# 發布一個圖層服務def publish_a_layer(workplace, path, file, defined_srs="EPSG:3857"): ## ------------ 存儲數據---------------- # 進入數據存儲 driver.get(baseUrl+"web/wicket/bookmarkable/org.geoserver.web.data.store.NewDataPage") # 選擇shapefile格式 driver.find_element_by_link_text("Shapefile").click() sleep(0.8) # 選擇工作區 driver.find_element_by_xpath("//fieldset/div[1]/div/select").send_keys(workplace) # 輸入數據源名稱 driver.find_element_by_xpath("//fieldset/div[2]/div/input").send_keys(file) # 清空原有的連接參數 driver.find_element_by_css_selector(".longtext").clear() # 輸入Shapefile文件的位置 driver.find_element_by_css_selector(".longtext").send_keys("file:" + path + file + ".shp") # 選擇DBF的字符集 driver.find_element_by_xpath("//fieldset/div[2]/div/select").send_keys("GB2312") # 點擊保存 driver.find_element_by_link_text("保存").click() ## ----------------發布圖層-------------- sleep(0.8) # 點擊發布 driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/div/div[2]/div/table/tbody/tr/td[3]/span/a").click() sleep(0.8) # 輸入圖層命名 driver.find_element_by_css_selector("input#name").clear() driver.find_element_by_css_selector("input#name").send_keys(file) # 輸入圖層標題 driver.find_element_by_css_selector("input#title").clear() driver.find_element_by_css_selector("input#title").send_keys(file) # 輸入定義SRS driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/form/div[2]/div[2]/div[1]/div/ul/div/li[1]/fieldset/ul/li[2]/span/input").clear() driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/form/div[2]/div[2]/div[1]/div/ul/div/li[1]/fieldset/ul/li[2]/span/input").send_keys(defined_srs) # 設置邊界 driver.find_element_by_link_text("從數據中計算").click() driver.find_element_by_link_text("Compute from native bounds").click() driver.find_element_by_id("srsHandling").send_keys("Reproject native to declared") driver.find_element_by_link_text("從數據中計算").click() driver.find_element_by_link_text("Compute from native bounds").click() sleep(0.8) # 發布圖層 driver.find_element_by_link_text("保存").click() sleep(1)# 查找dir目錄中文件後綴為suffix的文件def getFiles(dir, suffix): res = [] for root, directory, files in os.walk(dir): # =>當前根,根下目錄,目錄下的文件 for filename in files: name, suf = os.path.splitext(filename) # =>文件名,文件後綴 if suf == suffix: res.append(name) # =>把一串字符串組合成路徑 return res# 配置參數username = "admin" # 用戶名password = "geoserver" # 密碼workplace = "test" # 工作區名# geoserver根網址baseUrl = "http://localhost:8080/geoserver/"# 發布文件所在文件夾的絕對路徑 absolutePath = "D:\\geoserver-2.19.1-bin\\data_dir\\test_res\\"files = getFiles(absolutePath, ".shp")# 啟動浏覽器driver = webdriver.Chrome()login()for file in files: publish_a_layer(workplace, absolutePath, file)

以上就是基於Python實現GeoServer矢量文件批量發布的詳細內容,更多關於Python GeoServer矢量文件發布的資料請關注軟件開發網其它相關文章!



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved