文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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 节,“Geometry 类” 中给出。

    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])

    如果只有一个参数表示有效的几何对象 g,则 ST_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 等任务很有用。