Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  General Geometry Property Functions

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 Class” 中给出。

    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)

    如果geometry值 g 根据ISO SQL/MM Part 3: Spatial 标准是简单的,则返回 1。ST_IsSimple() 如果参数不是简单的,则返回 0。

    第 13.4.2 节,“OpenGIS 几何模型” 中,instantiable 几何类的描述包括特定条件,导致类实例被分类为不简单。

    ST_IsSimple() 按照本节的介绍处理其参数,除了以下情况:

    • 如果几何体具有地理 SRS,其中的经度或纬度超出范围,将发生错误:

      显示的范围以度为单位。由于浮点算术,实际范围限制略有偏差。

  • 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 特定的函数结果传递给 ST_SRID(),连同 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 很有用。