基于activiti和bpmn.js的wps服务链研究(毕设研究笔记)

1.IDEA导入geoserver源码项目

Intellij Idea启动GeoServer源码工程项目搭建_geoserver 源码部署-CSDN博客

IDEA导入geoserver项目_geoserver org.geoserver.wcs.kvp.rangesubset 文件不存在-CSDN博客

2.邻近分析

【QGIS】在Pycharm中使用pyqgis中的processing工具箱功能_qgis processing.core.processing_西米2231的博客-CSDN博客

【QGIS】在Pycharm中通过独立程序方式使用pyqgis里processing的工具箱功能 - 知乎 (zhihu.com)

栅格的邻近分析可计算一个栅格要素类中各点与另一要素类中最近的栅格像素值之间的距离

研究目的:利用Distance工具中的Euclidean Distance模型,计算菜子湖区每个栅格分别与湖泊、农田、草本沼泽、泥滩、圩堤、道路的距离。

方法实现:使用java封装wps模型调用python的QGIS库api实现邻近分析

具体做法:

1.PyCharm QGIS环境配置

设置解释器方式

新建一个项目,选择Python解释器为:D:\QGIS\bin\python-qgis.bat,这个批处理会自动设置环境变量,然后启动python解释器。

PyCharm可以读取到qgis相关的包,包括qgis.core、qgis.gui

注:此时的PyCharm无法使用processing工具包

解决办法:

在环境变量中创建 PYTHONPATH 字段,将以下地址引入环境变量中

将Processing进行初始化

scss 复制代码
from processing.core.Processing import Processing
qgs = QgsApplication([], False)
qgs.initQgis()
# qgs.initQgis()之后再进行Processing的初始化
Processing.initialize()

里遇到问题即我不能成功索引到sys.path.append(r'D:\Program Files\QGIS\apps\qgis\python\plugins')来成功引入这个Processing包中的py文件,因此我选择直接将processing文件复制到项目文件夹

发现通过以上方法设置后大部分工具箱的功能可以用,但是GDAL中的功能和部分插件不可用。如本次需要使用的gdal:proximity方法

解决方法:创建对 QgsApplication 的引用,以独立脚本的方式启动,并注册算法。

核心代码:

csharp 复制代码
params = {
    'INPUT': input_file,
    'BAND': 1,
    'VALUES': source_pixel_value,
    'UNITS': 1,
    'MAX_DISTANCE': 0,
    'REPLACE': 0,
    'NODATA': 0,
    'OPTIONS': '',
    'EXTRA': '',
    'DATA_TYPE': 5,
    'OUTPUT': output_file
}

result = processing.run("gdal:proximity", params)
  • 'INPUT': 'E:/Edge_download/outputGridCoverage (5).tiff':输入栅格数据集的路径。

  • 'BAND': 1:要计算距离的波段索引。

  • 'VALUES': '2':指定要计算距离的栅格像元值。(这个也是模型封装需要是输入参数,这样才能确定土地利用类型各个代表栅格点到其他土地利用类型的距离)

  • 'UNITS': 1:距离单位,1表示像素单位、0代表配置后的实际坐标。

  • 'MAX_DISTANCE': 0:最大距离,这里设置为0,表示只计算与指定像元值相邻的像元的距离。

2.geoserver对gdal的处理进行WPS封装

重点:Java进程ProcessBuilder类的使用,ProcessBuilder调用外部程序执行python命令

ini 复制代码
// 构造 ProcessBuilder 对象
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "D:\\Program Files\\QGIS\\bin\\python-qgis.bat", "./src/main/webapp/data/python/euclidean_Distance.py");
// 启动进程
process = pb.start();
//获取进程的输出流
OutputStreamWriter streamWriter = new OutputStreamWriter(process.getOutputStream());
BufferedWriter bufferedWriter = new BufferedWriter(streamWriter);
// 将 sourcePixelValue 发送给 Python
bufferedWriter.write(Integer.toString(sourcePixelValue));
bufferedWriter.newLine();
bufferedWriter.flush();
// 读取进程输出
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}
// 读取进程错误输出
BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String errorLine;
while ((errorLine = errorReader.readLine()) != null) {
    System.err.println(errorLine);
}
// 等待进程结束
int exitCode = process.waitFor();
if (exitCode == 0) {
    System.out.println("Python 脚本运行成功!");
} else {
    System.err.println("Python 脚本运行失败,错误码:" + exitCode);
}

ProcessBuilder 是一个用于创建和启动子进程的工具类。它允许你以 Java 代码的方式执行外部命令。 下面是对 ProcessBuilder 构造函数参数的解释:

1. "cmd.exe":指定要执行的命令解释器,这里使用 Windows 的 cmd.exe 命令提示符。

2. "/c":传递给 cmd.exe 的参数,表示在执行完命令后关闭 cmd.exe。

3. "python-qgis.bat":要执行的可执行脚本或命令,这里是 python-qgis.bat 脚本。

4. "your_script.py":要传递给 python-qgis.bat 的参数,这里是你的 Python 脚本的文件名。

传参到进程中

1.java进程里使用bufferedWriter.write(Integer.toString(sourcePixelValue));将传输传给python进程 2.python进程使用source_pixel_value = str(sys.stdin.readline())获取该传值 这样实现了source_pixel_value参数在两个进程之间的传递

3.适宜性分析和评价

毕设生态适宜性分析的几个步骤:

1.数据的预处理,得到标准化的环境因子数据产品

2.熵权法计算生态适宜性指数(评估点)

3.随机森林模型和主成分分析模型的拟合效果

相关推荐
勇闯逆流河25 分钟前
【数据结构】堆
c语言·数据结构·算法
pystraf1 小时前
LG P9844 [ICPC 2021 Nanjing R] Paimon Segment Tree Solution
数据结构·c++·算法·线段树·洛谷
my_styles2 小时前
docker-compose部署项目(springboot服务)以及基础环境(mysql、redis等)ruoyi-ry
spring boot·redis·后端·mysql·spring cloud·docker·容器
飞川撸码2 小时前
【LeetCode 热题100】739:每日温度(详细解析)(Go语言版)
算法·leetcode·golang
yuhao__z2 小时前
代码随想录算法训练营第六十六天| 图论11—卡码网97. 小明逛公园,127. 骑士的攻击
算法
Echo``2 小时前
3:OpenCV—视频播放
图像处理·人工智能·opencv·算法·机器学习·视觉检测·音视频
Nobkins3 小时前
2021ICPC四川省赛个人补题ABDHKLM
开发语言·数据结构·c++·算法·图论
88号技师3 小时前
2025年6月一区SCI-不实野燕麦优化算法Animated Oat Optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
免檒3 小时前
go语言协程调度器 GPM 模型
开发语言·后端·golang
不知道写什么的作者3 小时前
Flask快速入门和问答项目源码
后端·python·flask