文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  通用几何属性函数

14.16.7.1 通用几何属性函数

本节列出的函数不限制其参数,并接受任何类型的几何值。

除非另有说明,本节中的函数处理其几何参数如下

  • 如果任何参数为 NULL,则返回值为 NULL

  • 如果任何几何参数不是语法上格式良好的几何,则会发生 ER_GIS_INVALID_DATA 错误。

  • 如果任何几何参数是未定义空间参考系统 (SRS) 中的语法上格式良好的几何,则会发生 ER_SRS_NOT_FOUND 错误。

  • 如果任何 SRID 参数不在 32 位无符号整数范围内,则会发生 ER_DATA_OUT_OF_RANGE 错误。

  • 如果任何 SRID 参数引用未定义的 SRS,则会发生 ER_SRS_NOT_FOUND 错误。

  • 否则,返回值为非 NULL

以下函数可用于获取几何属性

  • ST_Dimension(g)

    返回几何值 g 的固有维数。维数可以是 -1、0、1 或 2。这些值的含义在 第 13.4.2.2 节,“几何类” 中给出。

    ST_Dimension() 按本节介绍部分所述处理其参数。

    mysql> SELECT ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)'));
    +------------------------------------------------------+
    | ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)')) |
    +------------------------------------------------------+
    |                                                    1 |
    +------------------------------------------------------+
  • ST_Envelope(g)

    返回几何值 g 的最小包围矩形 (MBR)。结果以 Polygon 值形式返回,该值由包围盒的角点定义

    POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
    mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)')));
    +----------------------------------------------------------------+
    | ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)'))) |
    +----------------------------------------------------------------+
    | POLYGON((1 1,2 1,2 2,1 2,1 1))                                 |
    +----------------------------------------------------------------+

    如果参数是点或垂直或水平线段,则 ST_Envelope() 返回该点或线段作为其 MBR,而不是返回无效多边形

    mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)')));
    +----------------------------------------------------------------+
    | ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)'))) |
    +----------------------------------------------------------------+
    | LINESTRING(1 1,1 2)                                            |
    +----------------------------------------------------------------+

    ST_Envelope() 按本节介绍部分所述处理其参数,但有以下例外

  • ST_GeometryType(g)

    返回一个二进制字符串,指示几何实例 g 所属的几何类型的名称。该名称对应于可实例化的 Geometry 子类之一。

    ST_GeometryType() 按本节介绍部分所述处理其参数。

    mysql> SELECT ST_GeometryType(ST_GeomFromText('POINT(1 1)'));
    +------------------------------------------------+
    | ST_GeometryType(ST_GeomFromText('POINT(1 1)')) |
    +------------------------------------------------+
    | POINT                                          |
    +------------------------------------------------+
  • ST_IsEmpty(g)

    此函数是一个占位符,对于空几何集合值返回 1,否则返回 0。

    唯一的有效空几何用空几何集合值的形式表示。MySQL 不支持 GIS EMPTY 值,例如 POINT EMPTY

    ST_IsEmpty() 按本节介绍部分所述处理其参数。

  • ST_IsSimple(g)

    如果几何值 g 根据 ISO SQL/MM 第 3 部分:空间 标准是简单的,则返回 1。如果参数不是简单的,则 ST_IsSimple() 返回 0。

    第 13.4.2 节,“OpenGIS 几何模型” 下给出的可实例化几何类的描述包括导致类实例被分类为非简单的特定条件。

    ST_IsSimple() 按本节介绍部分所述处理其参数,但有以下例外

  • ST_SRID(g [, srid])

    使用表示有效几何对象的单个参数 gST_SRID() 返回一个整数,指示与 g 关联的空间参考系统 (SRS) 的 ID。

    使用可选的第二个参数表示有效的 SRID 值,ST_SRID() 返回一个对象,其类型与第一个参数相同,其 SRID 值等于第二个参数。这只会设置对象的 SRID 值;它不会执行任何坐标值的转换。

    ST_SRID() 按本节介绍部分所述处理其参数,但有以下例外

    • 对于单参数语法,ST_SRID() 返回几何体的 SRID,即使它引用的是未定义的 SRS。不会出现 ER_SRS_NOT_FOUND 错误。

    ST_SRID(g, target_srid)ST_Transform(g, target_srid) 的区别如下

    • ST_SRID() 更改几何体的 SRID 值,但不转换其坐标。

    • ST_Transform() 除了更改几何体的 SRID 值之外,还会转换其坐标。

    mysql> SET @g = ST_GeomFromText('LineString(1 1,2 2)', 0);
    mysql> SELECT ST_SRID(@g);
    +-------------+
    | ST_SRID(@g) |
    +-------------+
    |           0 |
    +-------------+
    mysql> SET @g = ST_SRID(@g, 4326);
    mysql> SELECT ST_SRID(@g);
    +-------------+
    | ST_SRID(@g) |
    +-------------+
    |        4326 |
    +-------------+

    可以通过将 MySQL 特定函数用于创建空间值的返回值以及 SRID 值传递给 ST_SRID() 来在特定 SRID 中创建几何体。例如

    SET @g1 = ST_SRID(Point(1, 1), 4326);

    但是,该方法在 SRID 0 中创建几何体,然后将其强制转换为 SRID 4326(WGS 84)。更好的方法是从一开始就使用正确的空间参考系统创建几何体。例如

    SET @g1 = ST_PointFromText('POINT(1 1)', 4326);
    SET @g1 = ST_GeomFromText('POINT(1 1)', 4326);

    ST_SRID() 的双参数形式对于纠正或更改具有不正确 SRID 的几何体的 SRS 等任务非常有用。