【第五章 空间数据库】达梦数据库DMGEO 包

3

主题

6

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2022-12-31 19:41:29 | 显示全部楼层
随着政府项目对信创要求的不断推进,国产化数据库也大势所趋,很多项目要求使用达梦数据库。数据库迁移的过程中,对于空间数据的支持也是非常重要的一项内容。
实际应用中,主要考虑这几个方面:
(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));
0(4)空间索引
         官方文档实在没找到多余的描述,应该就是常规的R树索引。
CREATE TABLE testdmgeo(id int, name varchar(20), geom ST_polygon);  
create spatial index  idxtestdmspatial on testdmgeo(geom);

(5)空间数据入库
通过dmshp2st命令行入库,但是测试一直报错,还没找到问题
通过ArcGIS软件入库,经测试没有问题
(6)geoserver地图服务发布
回复

举报 使用道具

您需要登录后才可以回帖 登录 | 立即注册
快速回复 返回顶部 返回列表