本文内容来自YashanDB官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/%E5%BC%80%E5%8F%91%...
YashanDB中的ST\_GEOMETRY类型是数据库内置的一种自定义类型,用于存储和访问符合开放地理空间信息联盟(Open Geospatial Consortium,简称OGC)制定的SFA SQL标准的几何对象。
此数据类型仅支持在单机HEAP表上使用。
存储属性
定义格式
类型 | 格式 | 规则 |
---|---|---|
ST\_GEOMETRY | ST\_GEOMETRY | 自定义对象类型,无需指定size |
ST\_GEOEMTRY属性
属性名称 | 类型 | 长度 |
---|---|---|
HEAD | RAW | 40字节 |
GEOM | BLOB | < 4G |
ST\_GEOMETRY支持的子类型
POINT
点代表坐标系空间中的单个坐标。
POINT (1 2) POINT Z (1 2 3)
Copied!
LINESTRING
线是由连续的线段组成,且一条线段由两点定义,点之间需要使用逗号隔开。
LINESTRING (1 2,4 5)
Copied!
POLYGON
多边形是由外环(闭合的LINESTRING)及0条或多条内环(闭环的LINESTRING)组成,外环与内环之间需要使用逗号隔开。
POLYGON ((1 0,1 1,2 2,1 0),(0 0,6 6,8 8,0 0))
Copied!
MULTIPOINT
表示点的集合,点之间需要使用逗号隔开。
MULTIPOINT ((1 1),(2 2))
Copied!
MULTILINESTRING
表示线的集合,线之间需要使用逗号隔开。
MULTILINESTRING ((1 2,4 5),(2 3,5 6))
Copied!
MULTIPOLYGON
表示多边形的集合,多边形之间需要使用逗号隔开。
MULTIPOLYGON (((1 5, 4 3, 6 6, 2 6, 1 5)), ((6 5, 8 8, 6 9, 6 5)))
Copied!
GEOMETRYCOLLECTION
GEOMETRYCOLLECTION可由不同的ST\_GEOMETRY子类型组成一个集合,且子类型之间需要使用逗号隔开。
GEOMETRYCOLLECTION (POINT (1 0),LINESTRING (1 2,4 5))
Copied!
使用规则
使用限制
对于ST\_GEOMETRY类型数据的使用限制如下:
- 不能作为分区表的分区键。
- 仅适用于单机HEAP表。
- 在ST\_GEOMETRY类型上只能创建RTREE索引,不能创建其他类型索引。
使用格式
ST\_GEOMETRY类型可通过符合OGC规范的交换格式(如WKT、WKB)输入,也可以将其转换成WKT、WKB等交换格式。
WKT
WKT(Well-Known Text)格式为描述空间数据的标准格式,格式样例如下:
POINT(2 5)
LINESTRING((1 3),(4 5))
POLYGON ((1 0,1 1,2 2,1 0),(0 0,6 6,8 8,0 0))
Copied!
WKB
WKB(Well-Known Binary)格式为描述空间数据的二进制格式,本格式与对应的WKT格式如下:
WKT:POINT(5 0)
WKB:010100000000000000000014400000000000000000
WKT:LINESTRING (1 2,4 5)
WKB:010200000002000000000000000000F03F000000000000004000000000000010400000000000001440
Copied!
示例(单机HEAP表)
CREATE TABLE position (id INT, pos ST_GEOMETRY);
INSERT INTO position
VALUES (1, ST_GEOMFROMTEXT('POINT(0 0)'));
COMMIT;
INSERT INTO position
VALUES (2, ST_GEOMFROMWKB('0101000000000000000000F03F000000000000F03F'));
COMMIT;
SELECT id, ST_ASTEXT(pos) FROM position;
ID ST_ASTEXT(POS)
1 POINT (0.000000000000000 0.000000000000000)
2 POINT (1.000000000000000 1.000000000000000)
Copied!
ST\_GEOMETRY的特性
坐标
每个坐标都有一个X和Y坐标值,以确定其在平面中的位置。形状由点或线段构造,其中点由单个坐标指定,线段由两个坐标指定。
坐标可以包含可选的Z和M坐标值。Z常被用来表示高度。M是一个测量值,可以表示时间或距离。如果Z或M值出现在ST\_GEOMETRY值中,则必须为ST\_GEOMETRY值的每个点定义它们。如果ST\_GEOMETRY类型数据有Z或M坐标,则坐标维度为3D;如果它既有Z又有M,那么坐标维度就是4D。
坐标参考系
对ST\_GEOMETRY类型数据的所有空间操作都使用该数据所在的坐标参考系的单位。坐标参考系由SRID编号标识。X轴和Y轴的单位由坐标参照系确定。在平面参考系统中,X和Y坐标通常代表东方和北方,而在大地测量系统中,它们代表经度和纬度。SRID=0表示一个无限的笛卡尔平面,它的轴上没有单位。
维度
维度是ST\_GEOMETRY类型的属性。点类型的维度为0,线性类型的维度为1,多边形类型的维度为2。集合的维度为最大元素维度。
YashanDB目前最高仅支持到三维坐标,如输入四维坐标则会忽略第四个坐标。
外包框
包含ST\_GEOMETRY坐标的二维或三维方框,它是表示ST\_GEOMETRY类型数据在坐标空间中的范围以及检验两个ST\_GEOMETRY类型数据是否相互作用的一种有效方法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。