达梦数据库(DM8)集成使用 Geotools(27.2)

news/2024/4/19 8:13:43/文章来源:https://blog.csdn.net/linzi19900517/article/details/129201997

达梦数据库(DM8)集成使用 Geotools(27.2)

    • 系统环境版本
    • 达梦 8 集成 Geotools 环境
      • 安装达梦8,请参照
      • 项目 pom.xml 添加 geotools 配置
      • 项目 pom.xml 添加达梦数据库驱动包
    • Geotools 使用示例
      • Geotools 连接数据库
      • Geotools 空间查询
      • Geotools 查询结果
    • 试错过程问题
    • 总结

前几天搞了在达梦数据库集成使用 Geoserver,几乎支持 2.8 以上所有版本,继而又开始尝试 Geotools,毕竟是同源,综合问题不大。

因时间有限,本文只尝试了 23.5 和 最新版(27.2) 两个版本,均可正常集成使用,其他版本以后有时间在尝试。

本文主要包括:系统环境版本、达梦 8 集成 Geotools 环境、Geotools 使用示例、试错过程问题


系统环境版本

系统版本:win10 专业版

在这里插入图片描述

java 版本:1.8.0_181

在这里插入图片描述

数据库版本:达梦8

在这里插入图片描述

Geotools版本:

23.5、27.2
在这里插入图片描述
在这里插入图片描述

Geotools 与 Geoserver 对应版本:

在这里插入图片描述
在这里插入图片描述

Geotools 驱动对应版本版本:

gt-dameng-2.15

在这里插入图片描述


达梦 8 集成 Geotools 环境

安装达梦8,请参照

https://eco.dameng.com/document/dm/zh-cn/pm/install-uninstall.html

注意:数据库需要开启空间扩展:DMGEO,开启命令为:SP_INIT_GEO_SYS(1);

执行sql 测试:

select dmgeo.ST_GeoMFromText(‘POINT(116.10220150021966 39.778485532491445)’,4326);

在这里插入图片描述

项目 pom.xml 添加 geotools 配置

添加 geotools 配置,注意不要忘了 repositories 配置:

<!--=====geotools start=====================================================--><geotools.version>27.2</geotools.version><dependency><groupId>org.geotools</groupId><artifactId>gt-shapefile</artifactId><version>${geotools.version}</version>
</dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-swing</artifactId><version>${geotools.version}</version>
</dependency>
<dependency><groupId>org.geotools.jdbc</groupId><artifactId>gt-jdbc-postgis</artifactId><version>${geotools.version}</version>
</dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-main</artifactId><version>${geotools.version}</version>
</dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-epsg-wkt</artifactId><version>${geotools.version}</version>
</dependency>
<dependency><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId><version>1.18.2</version>
</dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-wms</artifactId><version>${geotools.version}</version>
</dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-geojson</artifactId><version>${geotools.version}</version>
</dependency><!--geotools 配置 Start ==========================================================-->
<repository><id>osgeo</id><name>OSGeo Release Repository</name><url>https://repo.osgeo.org/repository/release/</url><snapshots><enabled>false</enabled></snapshots><releases><enabled>true</enabled></releases>
</repository>
<repository><id>osgeo-snapshot</id><name>OSGeo Snapshot Repository</name><url>https://repo.osgeo.org/repository/snapshot/</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>false</enabled></releases>
</repository>
<!--geotools 配置 end ==========================================================-->

项目 pom.xml 添加达梦数据库驱动包

1. 安装达梦数据库驱动

达梦数据库驱动包可直接使用 maven 安装:

<!-- https://mvnrepository.com/artifact/com.dameng/DmJdbcDriver18 -->
<dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.2.141</version>
</dependency>

2. 安装达梦数据库 Geotools 驱动

达梦数据库 Geotools(Geoserver)驱动包,由于达梦官方未上传至 maven,因此需要手动导入

Geotools 为27.2,选择驱动包: gt-dameng-2.15.jar

首先需要找到驱动包,一般路径为:达梦安装路径\dmdbms\drivers\jdbc\dialect

在这里插入图片描述

执行 maven 安装命令:mvn install:

# mvn install:包路径、父目录、包名称、版本、包类型
mvn install:install-file -Dfile=包路径\gt-dameng-2.15.jar -DgroupId=org.geotools.data -DartifactId=gt-dameng -Dversion=2.15 -Dpackaging=jar 

项目pom.xml 添加 geotools 驱动包

<!-- geotools 达梦驱动,注意:如果未执行 mvn install,pom 文件会报错 -->
<dependency><groupId>org.geotools.data</groupId><artifactId>gt-dameng</artifactId><version>2.15</version>
</dependency>

运行 reload project:

在这里插入图片描述


Geotools 使用示例

达梦数据库环境配置完成之后,连接数据库以及数据库操作与其他数据库(PostgreSQL)基本一致。

Geotools 连接数据库

通过 DataStoreFinder.getDataStore 建立数据库连接:

/*** @todo 创建 geotools 数据连接* @return* @throws IOException*/
public DataStore getDataStore() throws IOException {Map<String, Object> params = new HashMap<>();// 数据库类型params.put(JDBCDataStoreFactory.DBTYPE.key, "dm");// 数据库地址,请输入自己的数据库params.put(JDBCDataStoreFactory.HOST.key, "192.*.*.60");// 数据库端口params.put(JDBCDataStoreFactory.PORT.key, "5236");// 数据库模式params.put(JDBCDataStoreFactory.SCHEMA.key, "moshi");// 数据库表名params.put(JDBCDataStoreFactory.DATABASE.key, "biaoming");// 数据库用户名params.put(JDBCDataStoreFactory.USER.key, "SYSDBA");// 数据库密码params.put(JDBCDataStoreFactory.PASSWD.key, "mima123456");// 暴露查询主键params.put(JDBCDataStoreFactory.EXPOSE_PK.key, "true");// 验证连接params.put(JDBCDataStoreFactory.VALIDATECONN.key, "true");// 最大连接数params.put(JDBCDataStoreFactory.MAXCONN.key, 25);// 最小连接数params.put(JDBCDataStoreFactory.MINCONN.key, 10);DataStore _dataStore = DataStoreFinder.getDataStore(params);if (_dataStore != null) {System.out.println("系统连接到位于:192.168.242.60的空间数据库成功!");} else {System.out.println("系统连接到位于:192.168.242.60的空间数据库失败!请检查相关参数");}return _dataStore;
}

Geotools 空间查询

使用已经建立的 Geotools 数据库对象,根据表名和传入的几何图形的空间数据(WKT字符串),查询符合条件的数据:

/*** @param {String} queryTableName - 表名* @param {String} geom - 多边形,WKT 格式字符串* @return* @todo 空间查询*/
private String getSpaceDataIntersectsGeoTools(String queryTableName, String geom) throws IOException, ParseException {Map<String, Object> queryResult = new HashMap();// 定位过滤器FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null);// 根据表名获取数据集合SimpleFeatureSource featureSource = _dataStore.getFeatureSource(queryTableName);// 获取模式对象SimpleFeatureType schema = featureSource.getSchema();// 获取模式属性String geometryAttributeName = schema.getGeometryDescriptor().getLocalName();// 查询对象Query query = null;// 过滤对象Filter filter1 = null;// 查询类型 - 相交String queryType = "intersect";// 设置查询类型queryResult.put("QueryType", queryType);// 设置相交字段以及相交几何对象filter1 = ff.intersects(ff.property(geometryAttributeName), ff.literal(createPolygonByWKT(geom)));// 查询对象赋值query = new Query(queryTableName, filter1);// 得到当前符合查询条件的记录集SimpleFeatureCollection result = featureSource.getFeatures(query);// 定义写入器StringWriter writerFull = new StringWriter();// 定义 geojson 对象,注意 GeometryJSON(8) 为设置精度FeatureJSON featureJSONFullWkt = new FeatureJSON(new GeometryJSON(8));// 写入featureJSONFullWkt.writeFeatureCollection(result, writerFull);// 替换 null 为 null 字符串String fullWKTString = StringUtils.isEmpty(writerFull.toString()) ? "": writerFull.toString().replaceAll("null", "\"" + "null" + "\"");queryResult.put("GeoJsonWktFullString", fullWKTString);return queryResult.toString();
}

Geotools 查询结果

查询测试结果:

在这里插入图片描述


试错过程问题

错误的话,只遇到一个,即数据库连接失败,但是由于 Geotools 内部做了处理,因此不会报错

在这里插入图片描述
经过调试,发现 Geotools 方言库中并没有达梦数据库(dameng

在这里插入图片描述
后来发现是忘记运行 maven 的 reload project 了,运行并重启项目即可:

在这里插入图片描述

总结

目前只实验了 Geotools 23.5 和 27.2 版本,理论上来讲,23.5-27.2 之间的版本应该都可以正常使用!

一定要注意 gt-dameng 的导入方式!

一定要记得 maven 的 reload project!



参考博客:

Geoserver 版本对应 Geotools 版本
达梦数据库(DM8)集成使用 Geoserver(2.22.2) 以及其他对应版本详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_74782.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CLion Remote Debug CrossCompile

CLion远程Docker调试ROS(交叉编译)的设置步骤 准备一个好用的docker&#xff0c;运行起来&#xff08;Docker Image一定可以跑cuda和图形界面的&#xff0c;否则启动不了CLion&#xff0c;可以不用浪费时间看本教程了&#xff09; 在docker镜像中配置好ssh和rsync&#xff0c;…

测量 R 代码运行时间的 5 种方法

简介 平常在撰写论文时&#xff0c;会需要比较算法之间的计算时间。本篇文章给出几种测量 R 代码运行时间的方法。本文是小编学习过程中的笔记&#xff0c;主要参考博客1&#xff0c;2。 1. 使用 Sys.time() 小编通常使用 Sys.time() 函数来计算时间。首先记录当前运行时刻&…

数据结构与算法之Huffman tree(赫夫曼树 / 霍夫曼树 / 哈夫曼树 / 最优二叉树)

目录赫夫曼树概述定义构造赫夫曼树步骤代码实现赫夫曼树概述 HuffmanTree因为翻译不同所以有其他的名字&#xff1a;赫夫曼树、霍夫曼树、哈夫曼树 赫夫曼树又称最优二叉树&#xff0c;是一种带权路径长度最短的二叉树。所谓树的带权路径长度&#xff0c;就是树中所有的叶结点…

如何在logback.xml中自定义动态属性

原文地址&#xff1a;http://blog.jboost.cn/trick-logback-prop.html 当使用logback来记录Web应用的日志时&#xff0c;我们通过在logback.xml中配置appender来指定日志输出格式及输出文件路径&#xff0c;这在一台主机或一个文件系统上部署单个实例没有问题&#xff0c;但是…

超店有数分享:2023还有哪些tiktok数据值得关注?

目前&#xff0c;tiktok是全球增长最迅猛的社交媒体软件之一。很多商家瞄准了tiktok的变现转化潜力&#xff0c;纷纷入局tiktok电商赛道。在入局这个赛道之前&#xff0c;我们需要了解一些tiktok的相关数据&#xff0c;这样才能更好的了解大局&#xff0c;及时调整自己的业务情…

Python 简单可变、复杂可变、简单不可变、复杂不可变类型的copy、deepcopy的行为

copy模块&#xff1a;copy&#xff1a;浅拷贝deepcopy&#xff1a;深拷贝简单可变类型、复杂可变的copy()、deepcopy()&#xff1a;简单不可变、复杂不可变类型的copy()、deepcopy()&#xff1a;结论&#xff1a;对于简单类型的可变类型copy是深拷贝&#xff0c;改变了该拷贝变…

TIA博途Wincc中自定义配方画面的具体方法示例

TIA博途Wincc中自定义配方画面的具体方法示例 前面和大家分享了通过TIA博途自带的配方视图组态配方功能的具体方法,具体内容可参考以下链接中的内容: TIA PORTAL wincc中配方recipe组态及配方视图的使用方法 但是,使用配方视图的时候感觉不是很方便,同时一部分使用人员也感…

机房运维6大隐患,你中了几个?

随着医院的看诊预约、缴费、打印报告等众多业务转至线上进行&#xff0c;对医院的网络及数据处理能力提出越来越高的要求&#xff0c;那么&#xff0c;机房的稳定、安全运行是医院网络信息系统的关键因素。 机房运维6大隐患 01.电源电力系统不稳定&#xff0c;网络设备运转遭到…

C/C++语法练习之顺序结构篇

名人说&#xff1a; 如果你问一个善于溜冰的人怎样获得成功时&#xff0c; 他会告诉你&#xff1a;“跌倒了&#xff0c;爬起来”&#xff0c;这就是成功。——牛顿 专栏&#xff1a;牛客刷题 顺序结构篇〇、知识引入一、内容1004-学姐的“Helloworld”1005-乘法表1019-hellowo…

TCP粘包|拆包和解决方案

1 产生原因TCP是面向连接的&#xff0c;面向流的&#xff0c;提供高可靠性服务。收发两端&#xff08;客户端和服务端&#xff09;都要有一一成对的socket&#xff0c;因此&#xff0c;发送端为了将多个发给接收端的包&#xff0c;更有效的发给对方&#xff0c;使用了优化算法&…

【算法题】最大矩形面积,单调栈解法

力扣&#xff1a;84. 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 题意很简单&#xff0c;翻译一下就是&#xff1a;求该图中…

预训练BERT

与PTB数据集相比&#xff0c;WikiText-2数据集保留了原来的标点符号、大小写和数字&#xff0c;并且比PTB数据集大了两倍多。 我们可以任意访问从WikiText-2语料库中的一对句子生成的预训练&#xff08;遮蔽语言模型和下一句预测&#xff09;样本。 原始的BERT有两个版本&…

BI的作用,体现在企业的哪些方面

对市场异常敏感的商业世界自然不会放过获取数字经济的机会&#xff0c;以国企和央企为首的众多企业开始进行数字化转型&#xff0c;通过信息化建设&#xff0c;部署商业智能BI来完成转型工作。 为什么会出现BI 有一点可能出乎很多人意料&#xff0c;虽然 BI 是因为信息化、数…

智能家居项目(六)之摄像头模块

目录 一、树莓派mipg-streamer实现监控功能调试 1、实现基本思路 2、安装摄像头模块 2.1、在安装sudo apt-get install libv4l-dev 的命令时报错 3、开启摄像头 以下内容是针对树莓派是stretch版本的修改办法&#xff1a; 一、树莓派mipg-streamer实现监控功能调试 1、…

spring boot maven打包jar包太大,怎么办?这个方法解决你的烦恼

在springboot maven项目中&#xff0c;有两种打包方式&#xff0c;一种是war包&#xff0c;一种是jar&#xff0c;今天我们讲一下jar的打包方式。但是在jar包打包只要我们发现&#xff0c;我们的项目jar太大了&#xff0c;每次上传到服务器的时候非常的慢&#xff0c;接下来我们…

大数据处理各组件概念及作用

一、数据采集&#xff1a; 1.1 Flume集群&#xff1a;数据采集工具&#xff0c;如写脚本将不同源端的数据采集后进行数据存储&#xff0c;或推送至Kafka等&#xff1b; 1.2 FTP集群&#xff1a;文件传输工具&#xff1b; 1.3 Kafka集群&#xff1a;消息队列&#xff0c;未避免…

高压放大器在应力波法套筒灌浆密实度检测研究中的应用

实验名称&#xff1a;高压放大器在应力波法套筒灌浆密实度检测研究中的应用研究方向&#xff1a;无损检测测试目的&#xff1a;钢筋套筒灌浆连接技术被广泛应用于装配式建筑节点连接中&#xff0c;但灌浆不密实将导致节点失效的风险。因此&#xff0c;施工中对套筒灌浆的密实度…

Spark 分析计算连续三周登录的用户数

前言&#xff1a;本文用到了窗口函数 range between&#xff0c;可以参考这篇博客进行了解——窗口函数rows between 、range between的使用 创建数据环境 在 MySQL 中创建数据测试表 log_data&#xff1a; create table if not exists log_data( log_id varchar(200) comm…

代码随想录【Day27】| 39. 组合总和、40. 组合总和 II、131. 分割回文串

39. 组合总和 题目链接 题目描述&#xff1a; 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明&#xff1a; 所有数字&#xff08;包括 tar…

taobao.top.secret.bill.detail( 服务商的商家解密账单详情查询 )

&#xffe5;免费必须用户授权 服务商的商家解密账单详情查询&#xff0c;仅对90天内的账单提供SLA保障。 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请求参数 响应参数 点击获取key和secret 请求示例 TaobaoClient…