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

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

项目需要国产化,选择使用达梦数据库,在技术测试阶段,尝试基于达梦 8 来集成使用 Geoserver,在最新版(Geoserver2.22.2)的时候很顺利。

但是对于其他版本,遇到了一些问题,网络相关资源也非常少,笔者几乎把所有版本都测试一遍,这里总结记录一下。

这里先放上结论:Geoserver 2.8 以上版本,除了 2.13.*、2.14.* 不支持,其他版本均支持!


本文主要包括:系统环境版本、Geoserver 驱动对应版本、达梦 8 集成 Geoserver 过程、Geoserver 不同版本详解、试错过程问题。

注意:如果想节省时间,可直接查看 Geoserver 驱动对应版本,按照 达梦 8 集成 Geoserver 即可!


系统环境版本

系统版本:win10 专业版

在这里插入图片描述

java 版本:1.8.0_181

在这里插入图片描述

数据库版本:达梦8

在这里插入图片描述

Geoserver版本:

2.8.1、2.9.1、2.10.1、2.11.0、2.12.4、2.13.0、2.14.1、2.15.1、2.17.1、2.22.2
在这里插入图片描述

Geoserver 驱动对应版本

为了节省时间,这里先放上各个 Geoserver 版本对应驱动以及兼容情况。

1. Geoserver 2.15.* 至最新版(Geoserver 2.22.2)

驱动:gt-dameng-2.15.jar、DmJdbcDriver18.jar

2. Geoserver 2.8.* 至 Geoserver 2.12.*版

驱动:gt-dameng-2.11.jar、DmJdbcDriver18.jar

3. Geoserver 2.8.*版

驱动:gt-dameng-2.8.jar、DmJdbcDriver18.jar

这里可以发现 Geoserver 2.8,可以使用 gt-dameng-2.8.jar 或者 gt-dameng-2.11.jar 驱动

但是经过多次替换驱动发现 Geoserver 2.13、2.14 均不支持,报错原因大概是因为 Geotools 版本不兼容,估计只有修改源码才可能支持!


达梦 8 集成 Geoserver 过程

1. 安装达梦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);

2. Geoserver安装,下载解压即可

官方下载:https://geoserver.org/download/

官网教程:https://docs.geoserver.org/latest/zhCN/user/index.html

3. 找到达梦数据库驱动包:

一般路径为:达梦安装路径\dmdbms\drivers\jdbc\dialect

在这里插入图片描述

在这里插入图片描述

请选择合适的驱动包,本说明JDK为1.8,因此选择 DmJdbcDriver18.jar

Geoserver 为2.22.2,选择目前最新驱动: gt-dameng-2.15.jar

注意:Geoserver 2.15 以上选择 gt-dameng-2.15.jar;其他版本请对应选择。

4. 将两个驱动 (缺一不可) 包放入Geoserver 中:

如果缺少 gt-dameng-2.15.jar,则不显示达梦数据库连接数据源:
在这里插入图片描述

如果缺少 DmJdbcDriver18.jar,则只显示 JNDI 数据源:
在这里插入图片描述

驱动放置路径为:Geoserver安装路径\geoserver-2.22.2\webapps\geoserver\WEB-INF\lib
在这里插入图片描述

5. 添加达梦数据库连接:

Geoserver 访问地址:http://localhost:8080/geoserver/

可参考: https://webgis.blog.csdn.net/article/details/124005271

(1)建议先添加工作空间(非必须)
在这里插入图片描述

(2)添加达梦数据库,填写连接属性
在这里插入图片描述

在这里插入图片描述

6. 发布图层并预览:

注意:一般只操作前两个选项卡(数据、发布

在这里插入图片描述

(1)添加图层

在这里插入图片描述

(2)选择仓库

在这里插入图片描述

在这里插入图片描述

(3)填写图层信息:

在这里插入图片描述

(4)选择图层样式,保存:

在这里插入图片描述

(5)最后,预览:

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


试错过程问题

试错过程,基本就是 geoserver 2.13 和 2.14 的报错。

报错大概意思就是方言不对,或者是某个类不存在。

  1. 如果使用 gt-dameng-2.15.jar,可以添加数据源以及发布图层,但是预览报错:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE ServiceExceptionReport SYSTEM "http://localhost:8080/geoserver/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd"> <ServiceExceptionReport version="1.1.1" >   <ServiceException code="internalError">
      Rendering process failed
java.lang.AbstractMethodError: org.geotools.jdbc.SQLDialect.decodeGeometryValue(Lorg/opengis/feature/type/GeometryDescriptor;Ljava/sql/ResultSet;Ljava/lang/String;Lcom/vividsolutions/jts/geom/GeometryFactory;Ljava/sql/Connection;Lorg/geotools/factory/Hints;)Lcom/vividsolutions/jts/geom/Geometry;
org.geotools.jdbc.SQLDialect.decodeGeometryValue(Lorg/opengis/feature/type/GeometryDescriptor;Ljava/sql/ResultSet;Ljava/lang/String;Lcom/vividsolutions/jts/geom/GeometryFactory;Ljava/sql/Connection;Lorg/geotools/factory/Hints;)Lcom/vividsolutions/jts/geom/Geometry;
</ServiceException></ServiceExceptionReport>

在这里插入图片描述

在这里插入图片描述

  1. 如果使用 gt-dameng-2.11.jar,虽然可以显示数据源,但是添加会则报错:
org.apache.wicket.WicketRuntimeException: Method onRequest of interface org.apache.wicket.behavior.IBehaviorListener targeted at org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink$1@f3e85e2 on component [AjaxSubmitLink [Component id = save]] threw an exception
	at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:268)
	at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241)
	at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:248)
	at 
#### 删除部分无用错误信息
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258)
	... 103 more
Caused by: java.lang.NoClassDefFoundError: com/vividsolutions/jts/io/ParseException
	at org.geotools.data.dameng.DamengDataStoreFactory.createSQLDialect(DamengDataStoreFactory.java:47)
	at org.geotools.jdbc.JDBCDataStoreFactory.createDataStore(JDBCDataStoreFactory.java:301)
	at org.geotools.jdbc.JDBCDataStoreFactory.createDataStore(JDBCDataStoreFactory.java:49)
	at org.vfny.geoserver.util.DataStoreUtils.getDataAccess(DataStoreUtils.java:81)
	at org.geoserver.catalog.ResourcePool.getDataStore(ResourcePool.java:629)
	at org.geoserver.web.data.store.DataAccessEditPage.onSaveDataStore(DataAccessEditPage.java:130)
	at org.geoserver.web.data.store.AbstractDataAccessPage$1.onSubmit(AbstractDataAccessPage.java:176)
	at org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink$1.onSubmit(AjaxSubmitLink.java:111)
	at org.apache.wicket.ajax.form.AjaxFormSubmitBehavior$AjaxFormSubmitter.onSubmit(AjaxFormSubmitBehavior.java:215)
	at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1309)
	at org.apache.wicket.markup.html.form.Form.process(Form.java:976)
	at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:797)
	at org.apache.wicket.ajax.form.AjaxFormSubmitBehavior.onEvent(AjaxFormSubmitBehavior.java:171)
	at org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:155)
	at org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:601)
	... 108 more
Caused by: java.lang.ClassNotFoundException: com.vividsolutions.jts.io.ParseException
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:450)
	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:403)
	... 123 more
An error occurred while loading the page

总结

再强调一下,经测试,只有 Geoserver 2.13 和 2.14 不支持,其他均可正常添加发布图层!



参考博客:

Geoserver 版本对应 Geotools 版本
使用 DM 数据库发布空间类型数据到 GEOSERVER
GeoServer:Rendering process failed java.lang.AbstractMethodError

  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
Geoserver是一个开源的地理空间数据服务器,用于存储、发布和管理地理数据。它支持多种地理数据格式,并提供了一系列的功能,如地图渲染、空间分析和数据传输等。下面是对Geoserver使用详解: 1. 安装和配置:首先,你需要下载并安装Geoserver。安装完成后,你可以通过访问Geoserver的管理界面,在该界面上配置数据存储、发布服务和设置权限等。 2. 数据导入:在Geoserver中,你可以导入各种地理数据格式,如Shapefile、GeoTIFF、PostGIS等。导入数据时,你需要指定数据存储类型和连接参数,并选择要导入的图层。 3. 图层发布:一旦数据导入完成,你可以发布图层供其他用户访问。在Geoserver的管理界面上,你可以设置图层样式、投影方式和渲染规则等。发布后,你可以通过访问Geoserver的WMS或WFS服务来获取地理数据。 4. 样式编辑:Geoserver提供了一个样式编辑器,用于创建和编辑图层的样式。你可以选择不同的渲染方式(如单一符号、分类符号或渐变符号),并设置符号大小、颜色和透明度等属性。 5. 空间分析:Geoserver还提供了一些空间分析功能,如缓冲区分析、叠加分析和查询等。你可以使用这些功能对地理数据进行处理和分析,以满足特定的需求。 6. 安全设置:为了保护地理数据的安全性,Geoserver支持用户身份验证和访问控制。你可以设置用户角色和权限,限制用户对数据的访问和操作。 总结来说,Geoserver是一个功能强大的地理空间数据服务器,它提供了丰富的功能和灵活的配置选项,可以满足不同使用场景下的需求。无论是进行地图渲染、空间分析还是数据发布,Geoserver都是一个值得考虑的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非科班Java出身GISer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值