GeoServer矢量文件发布如何实现,方法是什么
Admin 2022-08-03 群英技术资讯 1038 次浏览
今天小编跟大家讲解下有关“GeoServer矢量文件发布如何实现,方法是什么”的内容 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了相关资料,希望小伙伴们看了有所帮助。由于矢量图层文件较多,手动发布费时费力,python支持的关于geoserver包(geoserver-restconfig)又由于年久失修,无法在较新的geoserver版本中正常使用。
查阅了很多资料,参考了下面这篇博客,我简单写了一个自动化发布矢量文件的代码。
基本流程:获取指定文件夹下所有的.shp文件,在通过模拟正常发布的流程逐个发布。
Python+Selenium实现在Geoserver批量发布Mongo矢量数据
首先你的电脑要有python环境、谷歌浏览器和geoserver2.19左右的版本
接着在命令行中通过如下指令,安装Web自动化测试工具selenium
pip install selenium
此外,还需要谷歌浏览器的对应驱动。
首先需要查询你的谷歌浏览器的版本,在谷歌浏览器的网址栏输入chrome://version/,第一行就是版本号

在这个网址中找到对应版本号的驱动
这里和我的谷歌浏览器最匹配的驱动是

下载windows版本的驱动

解压后将exe文件放置在main.py文件所在的目录下。
运行代码后,程序会自动开启一个google浏览器窗口,接着进入geoserver。

自动输入用户名和密码,并点击登录

进入新建数据源发布页面
http://localhost:8080/geoserver/web/wicket/bookmarkable/org.geoserver.web.data.store.NewDataPage
选择shapefile文件格式
选择工作区,数据源名称,shapefile文件的位置,设置DBF字符集,点击保存

首先点击发布

接着设置源坐标系,目标坐标系,原始边界和目标边界

最后点击保存完成发布
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-bin\\data_dir\\test_res\\"
files = getFiles(absolutePath, ".shp")
# 启动浏览器
driver = webdriver.Chrome()
login()
for file in files:
publish_a_layer(workplace, absolutePath, file)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
当我们处理图像的时候避免不了要对访问,或是读取某一个像素点的值,下面这篇文章主要给大家介绍了关于利用Python如何获取图像中像素点坐标的相关资料,需要的朋友可以参考下
最近进行python基础培训,课下作业制作万年历,之前没做过,感觉里面还是有很多需要学的,下面这篇文章主要给大家介绍了关于python新手练习实例之万年历的相关资料,需要的朋友可以参考下
这篇文章主要介绍了使用python获取cpu每秒的使用率,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
这篇文章主要介绍了Python Asyncio调度原理详情,Python.Asyncio是一个大而全的库,它包括很多功能,而跟核心调度相关的逻辑除了三种可等待对象外,还有其它一些功能,它们分别位于runners.py,base_event.py,event.py三个文件中
在求公约数的时候,一般分析会当成数阶,数论中的最常用的欧几里得算法就和斐波那契数列有关。斐波那契数列是什么呢?是如何实现的呢?阶乘又是怎么求的呢?别急,跟着小编的脚步来看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008