我的编程空间,编程开发者的网络收藏夹
学习永远不晚

基于Python实现GeoServer矢量文件批量发布

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

基于Python实现GeoServer矢量文件批量发布

0. 前言

由于矢量图层文件较多,手动发布费时费力,python支持的关于geoserver包(geoserver-restconfig)又由于年久失修,无法在较新的geoserver版本中正常使用。

查阅了很多资料,参考了下面这篇博客,我简单写了一个自动化发布矢量文件的代码。

基本流程:获取指定文件夹下所有的.shp文件,在通过模拟正常发布的流程逐个发布。

Python+Selenium实现在Geoserver批量发布Mongo矢量数据

1. 环境

1.1 基础环境

首先你的电脑要有python环境、谷歌浏览器和geoserver2.19左右的版本

接着在命令行中通过如下指令,安装Web自动化测试工具selenium

pip install selenium

1.2 谷歌浏览器驱动

此外,还需要谷歌浏览器的对应驱动。

首先需要查询你的谷歌浏览器的版本,在谷歌浏览器的网址栏输入chrome://version/,第一行就是版本号

在这个网址中找到对应版本号的驱动

这里和我的谷歌浏览器最匹配的驱动是

下载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)
 

以上就是基于Python实现GeoServer矢量文件批量发布的详细内容,更多关于Python GeoServer矢量文件发布的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

基于Python实现GeoServer矢量文件批量发布

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

基于paramiko的文件批量分发和命令批量执行

在实际工作环境中,有可能需要去运维百台服务器,甚至更多。以应用升级为例,对应用做升级操作,首先得停止应用服务,防止新的应用数据写入,并备份应用部署目录,然后替换成新的代码文件、配置文件等。替换完成后,启动应用服务。但是由于应用服务器
2023-06-02

Python实现文件名批量处理

我们知道文件名是可以手动修改的,但是如果要同时修改多个文件名,那一个一个修改会浪费掉很多时间,此时我们就可以考虑使用python来实现文件名的批量处理。想要批量处理文件名首先确定需要处理的文件名,以及确定处理后新的文件名,这样就可以开始处理
2023-06-02

python实现批量重命名文件

#!/usr/bin/env python# -*- coding:UTF-8 -*-import os# 第一种方法files = os.listdir('.')i = 1for f in files:    filename, extn
2023-01-31

python 实现批量文件加密功能

目录一、源码1、结果展示2、源码二、源码注释1、所使用依赖包2、函数功能3、代码拓展三、可运行环境一、源码 1、结果展示 python自动化办公现在可不是一个陌生的词,也随着人们对自己隐私越来越看重,就会出现这样的需求:每人一个PDF文件,
2022-06-02

Python+wxPython实现文件名批量处理

正文本文档展示了如何使用wxPython创建一个简单的批量文件处理应用程序。该应用程序包括一个文本框,允许用户输入要处理的文件名。当用户单击"处理"按钮时,应用程序会对每个文件名执行指定的操作。可以根据文件扩展名定制处理过程。此外,本文档还提供了其他注意事项和扩展功能。
Python+wxPython实现文件名批量处理
2024-04-23

python实现批量文件内容替换

使用python实现批量文件内容替换,如下:#!/usr/bin/env pythonimport fileinputfor line in fileinput.input('test.txt',inplace=1,backup='.bak
2023-01-31

基于Python实现批量缩放图片(视频)尺寸

这篇文章主要为大家详细介绍了如何通过Python语言实现批量缩放图片(视频)尺寸的功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起了解一下
2023-03-24

基于Python如何实现批量缩放图片尺寸

今天小编给大家分享一下基于Python如何实现批量缩放图片尺寸的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。方法一在 Pil
2023-07-05

基于pdf2docx模块怎么用Python实现批量将PDF转Word文档

这篇“基于pdf2docx模块怎么用Python实现批量将PDF转Word文档”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“
2023-07-06

Python实现自动批量修改文件名称

这篇文章主要为大家详细介绍了如何基于Python语言,实现按照一定命名规则批量修改多个文件的文件名的效果,文中的示例代讲解详细,感兴趣的可以了解一下
2023-01-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录