最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于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)文章

最新評(píng)論

甘孜县| 商洛市| 汕头市| 阜康市| 墨玉县| 乳源| 上蔡县| 海伦市| 安阳市| 赤城县| 基隆市| 都昌县| 文成县| 海盐县| 济阳县| 惠安县| 洞头县| 海宁市| 兴海县| 中牟县| 咸丰县| 安多县| 师宗县| 西乌珠穆沁旗| 卫辉市| 如皋市| 平陆县| 青铜峡市| 柳州市| 沂水县| 马公市| 郓城县| 昌宁县| 科尔| 七台河市| 简阳市| 墨脱县| 娄烦县| 新昌县| 孟津县| 子洲县|