亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于Python實(shí)現(xiàn)GeoServer矢量文件批量發(fā)布

 更新時(shí)間:2022年07月01日 11:19:37   作者:Toblerone_Wind  
由于矢量圖層文件較多,手動(dòng)發(fā)布費(fèi)時(shí)費(fèi)力,python支持的關(guān)于geoserver包又由于年久失修,無法在較新的geoserver版本中正常使用。本文為大家準(zhǔn)備了Python自動(dòng)化發(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基礎(chǔ)之共有操作

    python基礎(chǔ)之共有操作

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

    淺析python遞歸函數(shù)和河內(nèi)塔問題

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

    python實(shí)現(xiàn)測試工具(一)——命令行發(fā)送get請(qǐng)求

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

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

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

    Python TKinter如何自動(dòng)關(guān)閉主窗口

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

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

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

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

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

    Python錯(cuò)誤+異常+模塊總結(jié)

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

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

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

    Python時(shí)間操作之pytz模塊使用詳解

    在學(xué)習(xí)Python過程中,我們已經(jīng)了解了一些關(guān)于時(shí)間操作的庫,如:Python內(nèi)置庫:time,datatime和第三方庫:dateutil,pytz等。本文將詳細(xì)講講pytz模塊的使用,需要的可以參考一下
    2022-06-06

最新評(píng)論