最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
基于Python实现GeoServer矢量文件批量发布代码示例
时间:2022-07-01 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下基于Python实现GeoServer矢量文件批量发布代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
1. 环境
1.1 基础环境
首先你的电脑要有python环境、谷歌浏览器和geoserver2.19左右的版本
接着在命令行中通过如下指令,安装Web自动化测试工具selenium
pip install selenium
1.2 谷歌浏览器驱动
此外,还需要谷歌浏览器的对应驱动。
首先需要查询你的谷歌浏览器的版本,在谷歌浏览器的网址栏输入chrome://version/,第一行就是版本号
在这个网址(https://registry.npmmirror.com/binary.html?path=chromedriver/)中找到对应版本号的驱动
这里和我的谷歌浏览器最匹配的驱动是
下载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-bin\data_dir\test_res\" files = getFiles(absolutePath, ".shp") # 启动浏览器 driver = webdriver.Chrome() login() for file in files: publish_a_layer(workplace, absolutePath, file)
相关文章
- Golang ProtoBuf的基本语法详解 10-20
- Python识别MySQL中的冗余索引解析 10-20
- Python+Pygame绘制小球代码展示 10-18
- Python中的数据精度问题介绍 10-18
- Python随机值生成的常用方法介绍 10-18
- python3解压缩.gz文件分析 09-27