欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Python實現GeoServer矢量文件批量發(fā)布

 更新時間:2022年07月01日 11:19:37   作者:Toblerone_Wind  
由于矢量圖層文件較多,手動發(fā)布費時費力,python支持的關于geoserver包又由于年久失修,無法在較新的geoserver版本中正常使用。本文為大家準備了Python自動化發(fā)布矢量文件的代碼,需要的可以參考一下

0. 前言

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

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

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

Python+Selenium實現在Geoserver批量發(fā)布Mongo矢量數據

1. 環(huán)境

1.1 基礎環(huán)境

首先你的電腦要有python環(huán)境、谷歌瀏覽器和geoserver2.19左右的版本

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

pip install selenium

1.2 谷歌瀏覽器驅動

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

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

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

這里和我的谷歌瀏覽器最匹配的驅動是

下載windows版本的驅動

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

2. 基本流程

2.1 初始化

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

2.2 登錄

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

2.3 新建數據源

進入新建數據源發(fā)布頁面

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

選擇shapefile文件格式

2.4 保存數據存儲

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

2.5 發(fā)布圖層

首先點擊發(fā)布

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

最后點擊保存完成發(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ā)布一個圖層服務
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)
    # 選擇工作區(qū)
    driver.find_element_by_xpath("http://fieldset/div[1]/div/select").send_keys(workplace)
    # 輸入數據源名稱
    driver.find_element_by_xpath("http://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("http://fieldset/div[2]/div/select").send_keys("GB2312")
    # 點擊保存
    driver.find_element_by_link_text("保存").click()
    ## ----------------發(fā)布圖層--------------
    sleep(0.8)
    # 點擊發(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)
    # 輸入圖層標題
    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)
    # 發(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):  # =>當前根,根下目錄,目錄下的文件
        for filename in files:
            name, suf = os.path.splitext(filename) # =>文件名,文件后綴
            if suf == suffix:
                res.append(name) # =>把一串字符串組合成路徑
    return res
 
# 配置參數
username = "admin"       # 用戶名
password = "geoserver"   # 密碼
workplace = "test"       # 工作區(qū)名
 
# geoserver根網址
baseUrl = "http://localhost:8080/geoserver/"
 
# 發(fā)布文件所在文件夾的絕對路徑    
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矢量文件批量發(fā)布的詳細內容,更多關于Python GeoServer矢量文件發(fā)布的資料請關注腳本之家其它相關文章!

相關文章

  • python基礎之共有操作

    python基礎之共有操作

    這篇文章主要介紹了python函數的定義和調用,實例分析了Python中返回一個返回值與多個返回值的方法,需要的朋友可以參考下
    2021-10-10
  • 淺析python遞歸函數和河內塔問題

    淺析python遞歸函數和河內塔問題

    這篇文章主要介紹了python遞歸函數和河內塔問題,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-04-04
  • python實現測試工具(一)——命令行發(fā)送get請求

    python實現測試工具(一)——命令行發(fā)送get請求

    這篇文章主要介紹了python如何實現命令行發(fā)送get請求,幫助大家更好的利用python進行測試工作,感興趣的朋友可以了解下
    2020-10-10
  • Python 利用pydub庫操作音頻文件的方法

    Python 利用pydub庫操作音頻文件的方法

    今天小編就為大家分享一篇Python 利用pydub庫操作音頻文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python TKinter如何自動關閉主窗口

    Python TKinter如何自動關閉主窗口

    這篇文章主要介紹了Python TKinter如何自動關閉主窗口,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Python一行代碼識別增值稅發(fā)票實現示例

    Python一行代碼識別增值稅發(fā)票實現示例

    這篇文章主要為大家介紹了Python一行代碼識別增值稅發(fā)票實現示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Python八皇后問題解答過程詳解

    Python八皇后問題解答過程詳解

    這篇文章主要介紹了Python講解八皇后問題過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python錯誤+異常+模塊總結

    Python錯誤+異常+模塊總結

    這篇文章主要介紹了Python錯誤+異常+模塊總結,在編程時遇見錯誤信息在所難免,Python中會也有很多種錯誤信息,常見的兩種就是語法錯誤和邏輯錯誤,下文我們就來總結一下那些常見的異常,需要的小伙伴可以參考一下
    2022-05-05
  • 使用python將最新的測試報告以附件的形式發(fā)到指定郵箱

    使用python將最新的測試報告以附件的形式發(fā)到指定郵箱

    這篇文章主要介紹了使用python將最新的測試報告以附件的形式發(fā)到指定郵箱,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Python時間操作之pytz模塊使用詳解

    Python時間操作之pytz模塊使用詳解

    在學習Python過程中,我們已經了解了一些關于時間操作的庫,如:Python內置庫:time,datatime和第三方庫:dateutil,pytz等。本文將詳細講講pytz模塊的使用,需要的可以參考一下
    2022-06-06

最新評論