基于Python實(shí)現(xiàn)GeoServer矢量文件批量發(fā)布
0. 前言
由于矢量圖層文件較多,手動(dòng)發(fā)布費(fèi)時(shí)費(fèi)力,python支持的關(guān)于geoserver包(geoserver-restconfig)又由于年久失修,無法在較新的geoserver版本中正常使用。
查閱了很多資料,參考了下面這篇博客,我簡單寫了一個(gè)自動(dòng)化發(fā)布矢量文件的代碼。
基本流程:獲取指定文件夾下所有的.shp文件,在通過模擬正常發(fā)布的流程逐個(gè)發(fā)布。
Python+Selenium實(shí)現(xiàn)在Geoserver批量發(fā)布Mongo矢量數(shù)據(jù)
1. 環(huán)境
1.1 基礎(chǔ)環(huán)境
首先你的電腦要有python環(huán)境、谷歌瀏覽器和geoserver2.19左右的版本
接著在命令行中通過如下指令,安裝Web自動(dòng)化測試工具selenium
pip install selenium
1.2 谷歌瀏覽器驅(qū)動(dòng)
此外,還需要谷歌瀏覽器的對(duì)應(yīng)驅(qū)動(dòng)。
首先需要查詢你的谷歌瀏覽器的版本,在谷歌瀏覽器的網(wǎng)址欄輸入chrome://version/,第一行就是版本號(hào)
在這個(gè)網(wǎng)址中找到對(duì)應(yīng)版本號(hào)的驅(qū)動(dòng)
這里和我的谷歌瀏覽器最匹配的驅(qū)動(dòng)是
下載windows版本的驅(qū)動(dòng)
解壓后將exe文件放置在main.py文件所在的目錄下。
2. 基本流程
2.1 初始化
運(yùn)行代碼后,程序會(huì)自動(dòng)開啟一個(gè)google瀏覽器窗口,接著進(jìn)入geoserver。
2.2 登錄
自動(dòng)輸入用戶名和密碼,并點(diǎn)擊登錄
2.3 新建數(shù)據(jù)源
進(jìn)入新建數(shù)據(jù)源發(fā)布頁面
http://localhost:8080/geoserver/web/wicket/bookmarkable/org.geoserver.web.data.store.NewDataPage
選擇shapefile文件格式
2.4 保存數(shù)據(jù)存儲(chǔ)
選擇工作區(qū),數(shù)據(jù)源名稱,shapefile文件的位置,設(shè)置DBF字符集,點(diǎn)擊保存
2.5 發(fā)布圖層
首先點(diǎn)擊發(fā)布
接著設(shè)置源坐標(biāo)系,目標(biāo)坐標(biāo)系,原始邊界和目標(biāo)邊界
最后點(diǎn)擊保存完成發(fā)布
3. 完整代碼
main.py
from time import sleep from selenium import webdriver import 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) # 發(fā)布一個(gè)圖層服務(wù) def publish_a_layer(workplace, path, file, defined_srs="EPSG:3857"): ## ------------ 存儲(chǔ)數(shù)據(jù)---------------- # 進(jìn)入數(shù)據(jù)存儲(chǔ) driver.get(baseUrl+"web/wicket/bookmarkable/org.geoserver.web.data.store.NewDataPage") # 選擇shapefile格式 driver.find_element_by_link_text("Shapefile").click() sleep(0.8) # 選擇工作區(qū) driver.find_element_by_xpath("http://fieldset/div[1]/div/select").send_keys(workplace) # 輸入數(shù)據(jù)源名稱 driver.find_element_by_xpath("http://fieldset/div[2]/div/input").send_keys(file) # 清空原有的連接參數(shù) 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("http://fieldset/div[2]/div/select").send_keys("GB2312") # 點(diǎn)擊保存 driver.find_element_by_link_text("保存").click() ## ----------------發(fā)布圖層-------------- sleep(0.8) # 點(diǎn)擊發(fā)布 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) # 輸入圖層標(biāo)題 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) # 設(shè)置邊界 driver.find_element_by_link_text("從數(shù)據(jù)中計(jì)算").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("從數(shù)據(jù)中計(jì)算").click() driver.find_element_by_link_text("Compute from native bounds").click() sleep(0.8) # 發(fā)布圖層 driver.find_element_by_link_text("保存").click() sleep(1) # 查找dir目錄中文件后綴為suffix的文件 def getFiles(dir, suffix): res = [] for root, directory, files in os.walk(dir): # =>當(dāng)前根,根下目錄,目錄下的文件 for filename in files: name, suf = os.path.splitext(filename) # =>文件名,文件后綴 if suf == suffix: res.append(name) # =>把一串字符串組合成路徑 return res # 配置參數(shù) username = "admin" # 用戶名 password = "geoserver" # 密碼 workplace = "test" # 工作區(qū)名 # geoserver根網(wǎng)址 baseUrl = "http://localhost:8080/geoserver/" # 發(fā)布文件所在文件夾的絕對(duì)路徑 absolutePath = "D:\\geoserver-2.19.1-bin\\data_dir\\test_res\\" files = getFiles(absolutePath, ".shp") # 啟動(dòng)瀏覽器 driver = webdriver.Chrome() login() for file in files: publish_a_layer(workplace, absolutePath, file)
以上就是基于Python實(shí)現(xiàn)GeoServer矢量文件批量發(fā)布的詳細(xì)內(nèi)容,更多關(guān)于Python GeoServer矢量文件發(fā)布的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實(shí)現(xiàn)測試工具(一)——命令行發(fā)送get請(qǐng)求
這篇文章主要介紹了python如何實(shí)現(xiàn)命令行發(fā)送get請(qǐng)求,幫助大家更好的利用python進(jìn)行測試工作,感興趣的朋友可以了解下2020-10-10Python TKinter如何自動(dòng)關(guān)閉主窗口
這篇文章主要介紹了Python TKinter如何自動(dòng)關(guān)閉主窗口,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02Python一行代碼識(shí)別增值稅發(fā)票實(shí)現(xiàn)示例
這篇文章主要為大家介紹了Python一行代碼識(shí)別增值稅發(fā)票實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03使用python將最新的測試報(bào)告以附件的形式發(fā)到指定郵箱
這篇文章主要介紹了使用python將最新的測試報(bào)告以附件的形式發(fā)到指定郵箱,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09