目录
在地理信息系统和空间数据分析领域,空间函数是处理地理数据的关键工具。达梦数据库(DMDB)提供了一套完整的空间函数,这些函数封装在dmgeo2包中。本文将详细介绍这些空间函数及其应用,帮助你更高效地利用达梦数据库进行空间数据处理。
一、达梦数据库空间函数概述
达梦数据库的空间函数基于开源几何处理库(如GEOS、PROJ、SFCGAL)构建,提供了丰富的空间数据类型和几何计算函数。这些函数支持多种几何对象的操作,包括点、线、多边形等。
二、dmgeo2包的主要功能
1. 创建空间对象
dmgeo2包提供了多种创建空间对象的函数,如:
-
ST_GeomFromText:根据文本表示创建几何对象。 -
ST_PointFromText:根据文本表示创建点对象。 -
ST_LineFromText:根据文本表示创建线对象。 -
ST_PolyFromText:根据文本表示创建多边形对象。
2. 几何对象操作
-
ST_Contains:判断一个几何对象是否包含另一个几何对象。 -
ST_Intersection:计算两个几何对象的交集。 -
ST_Union:计算两个几何对象的并集。 -
ST_Difference:计算两个几何对象的差集。
3. 几何信息获取
-
ST_GeometryType:返回几何对象的类型。 -
ST_CoordDim:返回几何对象的维数。 -
ST_SRID:返回几何对象的空间参考标识码。 -
ST_AsText:获取几何对象的文本描述。
三、空间对象定义(WKT格式)
在SQL语句中,可以使用WKT格式定义几何对象:
sql复制
POINT(0 0) -- 点
LINESTRING(0 0,1 1,1 2) -- 线
POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)) -- 面
MULTIPOINT(0 0,1 2) -- 多点
MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4)) -- 多线
MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1))) -- 多面
GEOMETRYCOLLECTION(point (1 1),linestring(0 0,1 1,2 2,3 3))-- 几何集合
四、几何体构造函数
达梦实现的几何体函数以包中方法的形式提供给用户,包名为dmgeo。使用几何体构造函数时,必须加上包名dmgeo。下面介绍通过WKT信息与SRID信息构造的相关函数方法:
| 函数名 | 说明 |
|---|---|
| ST_GeomFromText | 根据 wkt 信息和 srid 信息构造空间 数据基础类 |
| ST_PointFromText | 根据 wkt 信息和 srid 信息构造 点类 |
| ST_LineFromText | 根据 wkt 信息和 srid 信息构造 线类 |
| ST_PolyFromText | 根据 wkt 信息和 srid 信息构造 面类 |
| ST_MPointFromText | 根据 wkt 信息和 srid 信息构造 多点类 |
| ST_MLineFromText | 根据 wkt 信息和 srid 信息构造 多线类 |
| ST_MPolyFromText | 根据 wkt 信息和 srid 信息构造 多面类 |
五、几何数据类型定义及对应构造函数的使用
1. 点(ST_Point)
sql复制
drop table if exists dmpoint;
create table dmpoint(name varchar(100),geom sysgeo2.ST_Point);
insert into dmpoint VALUES ('p1',dmgeo2.ST_PointFromText('point (1 1)',4326));
insert into dmpoint VALUES ('p2',dmgeo2.ST_PointFromText('point (2 2)',4326));
2. 线(ST_LineString)
sql复制
drop table if exists dmLine;
create table dmLine(name varchar(100),geom sysgeo2.ST_LineString);
insert into dmLine VALUES ('L1',dmgeo2.ST_LineFromText('linestring(0 0,1 1,2 1,2 2)' ,4326));
insert into dmLine VALUES ('L1',dmgeo2.ST_LineFromText('line(0 0,1 1,2 2,3 3)' ,4326));
3. 面(ST_POLYGON)
sql复制
drop table if exists dmPOLYGON;
create table dmPOLYGON(name varchar(100),geom sysgeo2.ST_POLYGON);
insert into dmPOLYGON VALUES ('Polygon1',dmgeo2.ST_PolygonFromText('polygon ((0 0, 1 0, 1 1, 0 1, 0 0))', 4326));
insert into dmPOLYGON VALUES ('Polygon1',dmgeo2.ST_PolygonFromText('POLYGON(0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))', 4326));
4. 多点(ST_Multipoint)
sql复制
drop table if exists dmMpoint;
create table dmMpoint(name varchar(100),geom sysgeo2.ST_Multipoint);
insert into dmMpoint VALUES ('mp1',dmgeo2.ST_MPointFromText('multipoint (0int (1 1, 2 2)',4326));
insert into dmMpoint VALUES ('mp2',dmgeo2.ST_MPointFromText('MULTIPOINT(0 0,1 2)',4326));
5. 多线(ST_Multilinestring)
sql复制
drop table if exists dmMline;
create table dmMline(name varchar(100),geom sysgeo2.ST_Multilinestring);
insert into dmMline VALUES ('mltline1',dmgeo2.ST_MLineFromText('multilinestring ((1 1,2 1),(4 4, 3 3))',4326));
insert into dmMline VALUES ('mltline2',dmgeo2.ST_MLineFromText('MULTILINESTRING(0 0,1 1,1 2),(2 3,3 2,5 4))', 4326));
6. 多面(ST_Multipolygon)
sql复制
drop table if exists dmMpolygon;
create table dmMpolygon(name varchar(100),geom sysgeo2.ST_Multipolygon);
insert into dmMpolygon VALUES ('mpolygon1',dmgeo2.ST_MPolyFromText ('multipolygon (((1 1, 1 2, 2 2, 2 1, 1 1)), ((3 3, 3 4, 4 4, 4 3, 3 3)))', 4326));
insert into dmMpolygon VALUES ('mpolygon2',dmgeo2.ST_MPolyFromText ('MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))', 4326));
7. 几何集合
sql复制
drop table if exists dmCOLLECTION;
CREATE TABLE dmCOLLECTION (name varchar(100), geom sysgeo2.ST_Geometry);
insert into dmCOLLECTION VALUES ('Col1',dmgeo2.ST_GeomFromText('GEOMETRYCOLLECTION(point(2 0),POLYGON(0 0,1 0,1 1,0 0)))',4326));
1103

被折叠的 条评论
为什么被折叠?



