Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 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)

    返回一个二进制字符串,表示.geometry实例g的几何类型名称。该名称对应于可实例化的<code class="literal">Geometry</code>子类。

    ST_GeometryType() 按照本节介绍中描述处理其参数。

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

    该函数是一个占位符,返回1表示空geometry集合值,否则返回0。

    MySQL 不支持GIS<code class="literal">EMPTY</code>值,如<code class="literal">POINT EMPTY</code>。唯一有效的空geometry是以empty geometry collection值形式表示的。

    ST_IsEmpty() 按照本节介绍中描述处理其参数。

  • ST_IsSimple(g)

    返回1,如果.geometry值g根据ISOSQL/MM Part 3: Spatial标准是简单的。<a class="link" href="gis-一般属性函数.html#function_st-issimple">ST_IsSimple() 返回0,如果参数不是简单的。

    《OpenGIS 几何模型》第13.4.2节中关于可实例化几何类的描述包括了导致类实例被分类为非简单的特定条件。

    ST_IsSimple() 按照本节介绍中描述处理其参数,以下是例外:

  • ST_SRID(g [srid])

    单个参数表示有效几何对象g,<a class="link" href="gis-general-property-functions.html#function_st-srid"><code class="literal">ST_SRID()</code></a>返回表示与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 的几何体非常有用。