小編寫這篇文章的主要目的,主要是來給大家做個詳細的解答,解答的內容主要是Python的相關內容,包括利用Python實現GeoServer矢量文件的批量發布,具體是怎么樣進行操作呢?下面就給大家詳細解答下。
0.前言
由于矢量圖層文件較多,手動發布費時費力,python支持的關于geoserver包(geoserver-restconfig)又由于年久失修,無法在較新的geoserver版本中正常使用。
查閱了很多資料,參考了下面這篇博客,我簡單寫了一個自動化發布矢量文件的代碼。
基本流程:獲取指定文件夾下所有的.shp文件,在通過模擬正常發布的流程逐個發布。
Python+Selenium實現在Geoserver批量發布Mongo矢量數據
1.環境
1.1基礎環境
首先你的電腦要有python環境、谷歌瀏覽器和geoserver2.19左右的版本
接著在命令行中通過如下指令,安裝Web自動化測試工具selenium
pip install selenium
1.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 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) #發布一個圖層服務 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-bindata_dirtest_res" files=getFiles(absolutePath,".shp") #啟動瀏覽器 driver=webdriver.Chrome() login() for file in files: publish_a_layer(workplace,absolutePath,file)
綜上所述,這篇內容就給大家介紹到這里了,希望可以給各位讀者帶來幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128441.html
小編寫這篇文章的一個主要目的,主要是來給大家做一個解答,解答的內容是Python+Selenium,具體的一個內容解釋是什么呢?比如,我們可以實現Geoserver批量發布Mongo矢量數據,具體的一個內容,下面就給大家詳細解答下。 首先,聲明一下,這里我完成的腳步屬于半自動化的,我戲稱它為有監督的半自動化腳本。具體原因后面會詳細說明。 一、安裝Selenium和ChromeDriver ...
摘要:它還使用執行所謂的鏈式索引,這通常會導致意外的結果。但這種方法的最大問題是計算的時間成本。這些都是一次產生一行的生成器方法,類似中使用的用法。在這種情況下,所花費的時間大約是方法的一半。根據每小時所屬的應用一組標簽。 作者:xiaoyu 微信公眾號:Python數據科學 知乎:python數據分析師 showImg(https://segmentfault.com/img/bVboe...
摘要:時間年月日星期日說明本文部分內容均來自慕課網。用戶可以在服務器端調用云存儲云檢索從而構建自己的存儲和檢索服務,甚至可以制作自己的數據管理臺。 時間:2017年08月13日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:云圖產品介紹 1-1 云圖產品介紹...
摘要:時間年月日星期日說明本文部分內容均來自慕課網。用戶可以在服務器端調用云存儲云檢索從而構建自己的存儲和檢索服務,甚至可以制作自己的數據管理臺。 時間:2017年08月13日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:云圖產品介紹 1-1 云圖產品介紹...
摘要:兩種方案中間件我沒搞成功把文件放進去之后改好了報,這個我沒搞成功就不多說了,需要的可以自行搜索一波。需要監聽的項目所在端口號就比如我的項目啟動端口是,這里就寫地址,本地和都可以項目中的路徑這個意思就是在項目中訪問的時候把請求轉到是轉發地址 兩種方案 coess中間件(我沒搞成功) 把class文件放進去之后改好了web.xml報504,這個我沒搞成功就不多說了,需要的可以自...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1983·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02