随着政府项目对信创要求的不断推进,国产化数据库也大势所趋,很多项目要求使用达梦数据库。数据库迁移的过程中,对于空间数据的支持也是非常重要的一项内容。

实际应用中,主要考虑这几个方面:

(1)空间数据的入库和导出;

(2)空间索引和基础空间函数的支持;

(3)地图服务的发布支持;

满足这几个需求的话,项目中大部分的问题基本都能得到解决。

达梦的空间模块支持通过DMGEO库进行实现

官方文档 https://eco.dameng.com/document/dm/zh-cn/pm/dmgeo-package#2.3.2%20SF_CHECK_GEO_SYS

(1)空间模块扩展支持

执行 SP_INIT_GEO_SYS(1);即可

(2)空间数据类型

基本参照postgis,二维矢量数据支持没有问题。

(3)空间函数

支持的函数并不多,不可能有postgis那样强大。但是最基础的几何要素的定义、空间关系判断、简单的空间分析、geojson等格式转换、坐标转换等都有。

#插入要素

INSERT  INTO testdmgeo VALUES(1,'test1',dmgeo.ST_PolyFromText('polygon((114 22,114.5 22,114.5 22.5,114 22.5,114 22))',4326));

#计算面积,直接根据坐标系统单位计算

select  dmgeo.ST_Area(dmgeo.ST_PolyFromText('polygon((114 22,114.5 22,114.5 22.5,114 22.5,114 22))',4326));

0.25

#距离也一样

select dmgeo.ST_Distance(dmgeo.ST_PointFromText('point(113 22)',4326),dmgeo.ST_PolyFromText('polygon((114 22,114.5 22,114.5 22.5,114 22.5,114 22))',4326));   

1.0

#进行投影转换后,返回平面坐标值,单位是米

select  dmgeo.ST_Area(dmgeo.ST_TRANSFORM(dmgeo.ST_PolyFromText('polygon((114 22,114.5 22,114.5 22.5,114 22.5,114 22))',4326),4547))

2.8536572519374533E9

#生成geojson

select dmgeo.ST_AsGEOJSON(dmgeo.ST_PointFromText('point(113 22)',4326))

{"type": "Point","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"coordinates":[[113.000000000000000,22.000000000000000]]}

#判断是否相交

select dmgeo.ST_Intersects(dmgeo.ST_PointFromText('point(113 22)',4326),dmgeo.ST_PolyFromText('polygon((114 22,114.5 22,114.5 22.5,114 22.5,114 22))',4326));

(4)空间索引

官方文档实在没找到多余的描述,应该就是常规的R树索引。

CREATE TABLE testdmgeo(id int, name varchar(20), geom ST_polygon);  

create spatial index  idxtestdmspatial on testdmgeo(geom); 

(5)空间数据入库

通过dmshp2st命令行入库

GIS小砖家:【第五章 空间数据库】dmshp2st实现shp数据入库

评论可见,请评论后查看内容,谢谢!!!

通过ArcGIS软件入库,经测试没有问题

GIS小砖家:【第五章 空间数据库】ArcGIS将shp导入达梦数据库

评论可见,请评论后查看内容,谢谢!!!

(6)geoserver地图服务发布

GIS小砖家:【第五章 空间数据库】达梦数据库发布geoserver地图服务

评论可见,请评论后查看内容,谢谢!!!

原文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: