写点什么

YashanDB ST_GEOMETRY 类型

作者:YashanDB
  • 2025-03-28
    广东
  • 本文字数:1725 字

    阅读完需:约 6 分钟

本文内容来自 YashanDB 官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C/SQL%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C/%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/ST_GEOMETRY.html


YashanDB 中的 ST_GEOMETRY 类型是数据库内置的一种自定义类型,用于存储和访问符合开放地理空间信息联盟(Open Geospatial Consortium,简称 OGC)制定的 SFA SQL 标准的几何对象。


此数据类型仅支持在单机 HEAP 表上使用。

存储属性


定义格式



ST_GEOEMTRY 属性



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 positionVALUES (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 类型数据是否相互作用的一种有效方法。

发布于: 刚刚阅读数: 4
用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB ST_GEOMETRY类型_数据库_YashanDB_InfoQ写作社区