### 12.17.8 空间运算符函数

OpenGIS 提出了许多可以生成几何图形的函数。它们旨在实现空间运算符。这些函数支持所有参数类型组合，除了那些根据[开放地理空间联盟](http://www.opengeospatial.org)规格。

MySQL 还实现了某些作为 OpenGIS 扩展的函数，如函数描述中所述。此外，[第 12.17.7 节，“几何属性函数”](gis-property-functions.html)，讨论了从现有几何构造新几何的几个函数。有关这些功能的说明，请参阅该部分：

-   [`ST_信封（*`g`*)`](gis-general-property-functions.html#function_st-envelope)

-   [`ST_起点（*`ls`*)`](gis-linestring-property-functions.html#function_st-startpoint)

-   [`ST_EndPoint(*`ls`*)`](gis-linestring-property-functions.html#function_st-endpoint)

-   [`ST_PointN(*`ls`*, *`ñ`*)`](gis-linestring-property-functions.html#function_st-pointn)

-   [`ST_ExteriorRing(*`聚`*)`](gis-polygon-property-functions.html#function_st-exteriorring)

-   [`ST_InteriorRingN(*`聚`*, *`ñ`*)`](gis-polygon-property-functions.html#function_st-interiorringn)

-   [`ST_GeometryN(*`gc`*, *`ñ`*)`](gis-geometrycollection-property-functions.html#function_st-geometryn)

    除非另有说明，否则本节中的函数按如下方式处理其几何参数：

-   如果有任何论据`空值`，返回值为`空值`.

-   如果任何几何参数不是语法上格式良好的几何，则[`ER_GIS_INVALID_DATA`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_gis_invalid_data)发生错误。

-   如果任何几何参数是未定义的空间参考系统 (SRS) 中的语法结构良好的几何，则[`ER_SRS_NOT_FOUND`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_srs_not_found)发生错误。

-   对于采用多个几何参数的函数，如果这些参数不在同一个 SRS 中，则[`ER_GIS_DIFFERENT_SRIDS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_gis_different_srids)发生错误。

-   如果任何几何参数具有地理 SRS 的 SRID 值并且该函数不处理地理几何，则[`ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_not_implemented_for_geographic_srs)发生错误。

-   对于地理 SRS 几何参数，如果任何参数的经度或纬度超出范围，则会发生错误：

    -   如果经度值不在 (−180, 180] 范围内，则[`ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_geometry_param_longitude_out_of_range)发生错误（[`ER_LONGITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_longitude_out_of_range)在 MySQL 8.0.12 之前）。

    -   如果纬度值不在范围内[−90, 90]， 一个[`ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_geometry_param_latitude_out_of_range)发生错误（[`ER_LATITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_latitude_out_of_range)在 MySQL 8.0.12 之前）。

        显示的范围以度为单位。如果 SRS 使用另一个单位，则范围使用其单位中的相应值。由于浮点运算，确切的范围限制略有偏差。

-   否则，返回值为非`空值`.

    这些空间算子函数可用：

-   [](<>)

    [`ST_Buffer(*`g`*, *`d`* [, *`策略1`* [, *`策略2`* [, *`策略3`*]]])`](spatial-operator-functions.html#function_st-buffer)

    [](<>)

    返回一个几何图形，该几何图形表示其与几何值的距离的所有点*`g`*小于或等于距离*`d`*.结果与几何参数位于相同的 SRS 中。

    如果几何参数为空，[`ST_Buffer()`](spatial-operator-functions.html#function_st-buffer)返回一个空几何。

    如果距离为 0，[`ST_Buffer()`](spatial-operator-functions.html#function_st-buffer)返回几何参数不变：

    ```
    mysql> SET @pt = ST_GeomFromText('POINT(0 0)');
    mysql> SELECT ST_AsText(ST_Buffer(@pt, 0));
    +------------------------------+
    | ST_AsText(ST_Buffer(@pt, 0)) |
    +------------------------------+
    | POINT(0 0)                   |
    +------------------------------+
    ```

    如果几何参数在笛卡尔 SRS 中：

    -   [`ST_Buffer()`](spatial-operator-functions.html#function_st-buffer)支持负距离`多边形`和`多多边形`值，并且对于包含`多边形`要么`多多边形`价值观。

    -   如果结果减少太多以至于消失，则结果是空几何。

    -   一个[`ER_WRONG_ARGUMENTS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_wrong_arguments)发生错误[`ST_Buffer()`](spatial-operator-functions.html#function_st-buffer)负距离为`观点`, `多点`, `线串`， 和`多行字符串`值，并且对于不包含任何值的几何集合`多边形`要么`多多边形`价值观。

        如果几何参数在地理 SRS 中：

    -   在 MySQL 8.0.26 之前，一个[`ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_not_implemented_for_geographic_srs)发生错误。

    -   从 MySQL 8.0.26 开始，`观点`地理 SRS 中的几何图形是允许的。对于非`观点`几何学，一个[`ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_not_implemented_for_geographic_srs)错误仍然发生。

        对于允许地理的 MySQL 版本`观点`几何形状：

    -   如果距离不为负且未指定策略，则函数返回`观点`在其 SRS 中。距离参数必须采用 SRS 距离单位（目前总是米）。

    -   如果距离为负或任何策略（除了`空值`) 被指定，一个[`ER_WRONG_ARGUMENTS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_wrong_arguments)发生错误。

    [`ST_Buffer()`](spatial-operator-functions.html#function_st-buffer)在距离参数之后最多允许三个可选策略参数。策略影响缓冲区计算。这些参数是由[`ST_Buffer_Strategy()`](spatial-operator-functions.html#function_st-buffer-strategy)函数，用于点、连接和结束策略：

    -   积分策略适用于`观点`和`多点`几何形状。如果没有指定点策略，则默认为[`ST_Buffer_Strategy('point_circle', 32)`](spatial-operator-functions.html#function_st-buffer-strategy).

    -   加入策略适用于`线串`,`多行字符串`,`多边形`， 和`多多边形`几何形状。如果没有指定加入策略，则默认为[`ST_Buffer_Strategy('join_round', 32)`](spatial-operator-functions.html#function_st-buffer-strategy).

    -   最终策略适用于`线串`和`多行字符串`几何形状。如果没有指定结束策略，则默认为[`ST_Buffer_Strategy('end_round', 32)`](spatial-operator-functions.html#function_st-buffer-strategy).

        每种类型最多可以指定一个策略，并且可以以任何顺序给出它们。

        如果缓冲策略无效，则[`ER_WRONG_ARGUMENTS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_wrong_arguments)发生错误。在以下任何情况下，策略均无效：

    -   指定了给定类型（点、连接或结束）的多个策略。

    -   不是策略的值（例如任意二进制字符串或数字）作为策略传递。

    -   一种`观点`策略通过并且几何不包含`观点`要么`多点`价值观。

    -   传递了结束或连接策略，并且几何不包含`线串`, `多边形`, `多线串`要么`多多边形`价值观。

    ```
    mysql> SET @pt = ST_GeomFromText('POINT(0 0)');
    mysql> SET @pt_strategy = ST_Buffer_Strategy('point_square');
    mysql> SELECT ST_AsText(ST_Buffer(@pt, 2, @pt_strategy));
    +--------------------------------------------+
    | ST_AsText(ST_Buffer(@pt, 2, @pt_strategy)) |
    +--------------------------------------------+
    | POLYGON((-2 -2,2 -2,2 2,-2 2,-2 -2))       |
    +--------------------------------------------+
    ```

    ```
    mysql> SET @ls = ST_GeomFromText('LINESTRING(0 0,0 5,5 5)');
    mysql> SET @end_strategy = ST_Buffer_Strategy('end_flat');
    mysql> SET @join_strategy = ST_Buffer_Strategy('join_round', 10);
    mysql> SELECT ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy))
    +---------------------------------------------------------------+
    | ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy))   |
    +---------------------------------------------------------------+
    | POLYGON((5 5,5 10,0 10,-3.5355339059327373 8.535533905932738, |
    | -5 5,-5 0,0 0,5 0,5 5))                                       |
    +---------------------------------------------------------------+
    ```

-   [](<>)

    [`ST_Buffer_Strategy(*`战略`* [, *`points_per_circle`*])`](spatial-operator-functions.html#function_st-buffer-strategy)

    [](<>)

    此函数返回一个策略字节字符串以用于[`ST_Buffer()`](spatial-operator-functions.html#function_st-buffer)影响缓冲区计算。

    有关策略的信息可在[Boost.org](http://www.boost.org).

    第一个参数必须是指示策略选项的字符串：

    -   对于点策略，允许的值为`'point_circle'`和`'point_square'`.

    -   对于连接策略，允许的值为`'join_round'`和`'join_miter'`.

    -   对于最终策略，允许的值为`'end_round'`和`'end_flat'`.

        如果第一个参数是`'point_circle'`,`'join_round'`,`'join_miter'`， 要么`'end_round'`， 这*`points_per_circle`*参数必须以正数值形式给出。最大值*`points_per_circle`*价值是的价值[`max_points_in_geometry`](server-system-variables.html#sysvar_max_points_in_geometry)系统变量。

        例如，参见描述[`ST_Buffer()`](spatial-operator-functions.html#function_st-buffer).

    [`ST_Buffer_Strategy()`](spatial-operator-functions.html#function_st-buffer-strategy)如本节介绍中所述处理其参数，但有以下例外：

    -   如果任何参数无效，则[`ER_WRONG_ARGUMENTS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_wrong_arguments)发生错误。

    -   如果第一个参数是`'point_square'`要么`'end_flat'`， 这*`points_per_circle`*不得给出论据或[`ER_WRONG_ARGUMENTS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_wrong_arguments)发生错误。

-   [](<>)

    [`ST_ConvexHull(*`g`*)`](spatial-operator-functions.html#function_st-convexhull)

    [](<>)

    返回表示几何值的凸包的几何*`g`*.

    此函数通过首先检查其顶点是否共线来计算几何的凸包。如果是，该函数返回一个线性外壳，否则返回一个多边形外壳。此函数通过提取集合的所有组件的所有顶点来处理几何集合，创建一个`多点`他们的价值，并计算其凸包。

    [`ST_ConvexHull()`](spatial-operator-functions.html#function_st-convexhull)如本节介绍中所述处理其参数，但有以下例外：

    -   返回值为`空值`对于参数是空几何集合的附加条件。

    ```
    mysql> SET @g = 'MULTIPOINT(5 0,25 0,15 10,15 25)';
    mysql> SELECT ST_AsText(ST_ConvexHull(ST_GeomFromText(@g)));
    +-----------------------------------------------+
    | ST_AsText(ST_ConvexHull(ST_GeomFromText(@g))) |
    +-----------------------------------------------+
    | POLYGON((5 0,25 0,15 25,5 0))                 |
    +-----------------------------------------------+
    ```

-   [](<>)

    [`ST_差异（*`g1`*, *`g2`*)`](spatial-operator-functions.html#function_st-difference)

    [](<>)

    返回表示几何值的点集差异的几何*`g1`*和*`g2`*.结果与几何参数在相同的 SRS 中。

    从 MySQL 8.0.26 开始，[`ST_Difference()`](spatial-operator-functions.html#function_st-difference)允许在笛卡尔或地理 SRS 中使用参数。在 MySQL 8.0.26 之前，[`ST_Difference()`](spatial-operator-functions.html#function_st-difference)仅允许笛卡尔 SRS 中的参数；对于地理 SRS 中的参数，[`ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_not_implemented_for_geographic_srs)发生错误。

    [`ST_Difference()`](spatial-operator-functions.html#function_st-difference)如本节介绍中所述处理其参数。

    ```
    mysql> SET @g1 = Point(1,1), @g2 = Point(2,2);
    mysql> SELECT ST_AsText(ST_Difference(@g1, @g2));
    +------------------------------------+
    | ST_AsText(ST_Difference(@g1, @g2)) |
    +------------------------------------+
    | POINT(1 1)                         |
    +------------------------------------+
    ```

-   [](<>)

    [`ST_Intersection(*`g1`*, *`g2`*)`](spatial-operator-functions.html#function_st-intersection)

    [](<>)

    返回表示几何值的点集交集的几何*`g1`*和*`g2`*.结果与几何参数在相同的 SRS 中。

    从 MySQL 8.0.27 开始，[`ST_Intersection()`](spatial-operator-functions.html#function_st-intersection)允许在笛卡尔或地理 SRS 中使用参数。在 MySQL 8.0.27 之前，[`ST_Intersection()`](spatial-operator-functions.html#function_st-intersection)仅允许笛卡尔 SRS 中的参数；对于地理 SRS 中的参数，[`ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_not_implemented_for_geographic_srs)发生错误。

    [`ST_Intersection()`](spatial-operator-functions.html#function_st-intersection)如本节介绍中所述处理其参数。

    ```
    mysql> SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)');
    mysql> SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)');
    mysql> SELECT ST_AsText(ST_Intersection(@g1, @g2));
    +--------------------------------------+
    | ST_AsText(ST_Intersection(@g1, @g2)) |
    +--------------------------------------+
    | POINT(2 2)                           |
    +--------------------------------------+
    ```

-   [](<>)

    [`ST_LineInterpolatePoint(*`ls`*, *`分数距离`*)`](spatial-operator-functions.html#function_st-lineinterpolatepoint)

    [](<>)

    这个函数需要一个`线串`几何和范围内的小数距离[0.0, 1.0]并返回`观点`沿着`线串`在从起点到终点的距离的给定分数处。它可以用来回答诸如哪个`观点`位于几何参数所描述的道路的中途。

    该功能实现为`线串`所有空间参考系统中的几何图形，包括笛卡尔和地理。

    如果*`分数距离`*参数为 1.0，结果可能不完全是`线串`论点，但由于近似值计算中的数值不准确而接近它。

    一个相关的功能，[`ST_LineInterpolatePoints()`](spatial-operator-functions.html#function_st-lineinterpolatepoints), 接受类似的参数，但返回一个`多点`包含由...组成`观点`沿值`线串`在从起点到终点的距离的每一部分。有关这两个函数的示例，请参见[`ST_LineInterpolatePoints()`](spatial-operator-functions.html#function_st-lineinterpolatepoints)描述。

    [`ST_LineInterpolatePoint()`](spatial-operator-functions.html#function_st-lineinterpolatepoint)如本节介绍中所述处理其参数，但有以下例外：

    -   如果几何参数不是`线串`， 一个[`ER_UNEXPECTED_GEOMETRY_TYPE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_unexpected_geometry_type)发生错误。

    -   如果小数距离参数超出范围[0.0, 1.0]， 一个[`ER_DATA_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_data_out_of_range)发生错误。

    [`ST_LineInterpolatePoint()`](spatial-operator-functions.html#function_st-lineinterpolatepoint)是 OpenGIS 的 MySQL 扩展。此功能是在 MySQL 8.0.24 中添加的。

-   [](<>)

    [`ST_LineInterpolatePoints(*`ls`*, *`分数距离`*)`](spatial-operator-functions.html#function_st-lineinterpolatepoints)

    [](<>)

    这个函数需要一个`线串`几何和范围内的小数距离 (0.0, 1.0] 并返回`多点`由`线串`起点，加`观点`沿值`线串`在从起点到终点的距离的每一部分。它可以用来回答诸如哪个`观点`值位于几何参数所描述的道路上的每 10%。

    该功能实现为`线串`所有空间参考系统中的几何图形，包括笛卡尔和地理。

    如果*`分数距离`*参数将 1.0 除以零余数结果可能不包含最后一个点`线串`论点，但由于近似值计算中的数值不准确而接近它。

    一个相关的功能，[`ST_LineInterpolatePoint()`](spatial-operator-functions.html#function_st-lineinterpolatepoint), 接受类似的参数，但返回`观点`沿着`线串`在从起点到终点的距离的给定分数处。

    [`ST_LineInterpolatePoints()`](spatial-operator-functions.html#function_st-lineinterpolatepoints)如本节介绍中所述处理其参数，但有以下例外：

    -   如果几何参数不是`线串`， 一个[`ER_UNEXPECTED_GEOMETRY_TYPE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_unexpected_geometry_type)发生错误。

    -   如果小数距离参数超出范围[0.0, 1.0]， 一个[`ER_DATA_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_data_out_of_range)发生错误。

    ```
    mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0,0 5,5 5)');
    mysql> SELECT ST_AsText(ST_LineInterpolatePoint(@ls1, .5));
    +----------------------------------------------+
    | ST_AsText(ST_LineInterpolatePoint(@ls1, .5)) |
    +----------------------------------------------+
    | POINT(0 5)                                   |
    +----------------------------------------------+
    mysql> SELECT ST_AsText(ST_LineInterpolatePoint(@ls1, .75));
    +-----------------------------------------------+
    | ST_AsText(ST_LineInterpolatePoint(@ls1, .75)) |
    +-----------------------------------------------+
    | POINT(2.5 5)                                  |
    +-----------------------------------------------+
    mysql> SELECT ST_AsText(ST_LineInterpolatePoint(@ls1, 1));
    +---------------------------------------------+
    | ST_AsText(ST_LineInterpolatePoint(@ls1, 1)) |
    +---------------------------------------------+
    | POINT(5 5)                                  |
    +---------------------------------------------+
    mysql> SELECT ST_AsText(ST_LineInterpolatePoints(@ls1, .25));
    +------------------------------------------------+
    | ST_AsText(ST_LineInterpolatePoints(@ls1, .25)) |
    +------------------------------------------------+
    | MULTIPOINT((0 2.5),(0 5),(2.5 5),(5 5))        |
    +------------------------------------------------+
    ```

    [`ST_LineInterpolatePoints()`](spatial-operator-functions.html#function_st-lineinterpolatepoints)是 OpenGIS 的 MySQL 扩展。此功能是在 MySQL 8.0.24 中添加的。

-   [](<>)

    [`ST_PointAtDistance(*`ls`*, *`距离`*)`](spatial-operator-functions.html#function_st-pointatdistance)

    [](<>)

    这个函数需要一个`线串`几何和距离在 \[0.0,[`ST_长度（*`ls`*)`](gis-linestring-property-functions.html#function_st-length)] 以空间参考系统 (SRS) 为单位测量`线串`，并返回`观点`沿着`线串`在距起点的那个距离。它可以用来回答诸如哪个`观点`值是距离几何参数描述的道路起点 400 米。

    该功能实现为`线串`所有空间参考系统中的几何图形，包括笛卡尔和地理。

    [`ST_PointAtDistance()`](spatial-operator-functions.html#function_st-pointatdistance)如本节介绍中所述处理其参数，但有以下例外：

    -   如果几何参数不是`线串`， 一个[`ER_UNEXPECTED_GEOMETRY_TYPE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_unexpected_geometry_type)发生错误。

    -   如果小数距离参数超出范围 \[0.0,[`ST_长度（*`ls`*)`](gis-linestring-property-functions.html#function_st-length)]， 一个[`ER_DATA_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_data_out_of_range)发生错误。

    [`ST_PointAtDistance()`](spatial-operator-functions.html#function_st-pointatdistance)是 OpenGIS 的 MySQL 扩展。此功能是在 MySQL 8.0.24 中添加的。

-   [](<>)

    [`ST_SymDifference(*`g1`*, *`g2`*)`](spatial-operator-functions.html#function_st-symdifference)

    [](<>)

    返回表示几何值的点集对称差的几何*`g1`*和*`g2`*，其定义为：

    ```
    g1 symdifference g2 := (g1 union g2) difference (g1 intersection g2)
    ```

    或者，在函数调用表示法中：

    ```
    ST_SymDifference(g1, g2) = ST_Difference(ST_Union(g1, g2), ST_Intersection(g1, g2))
    ```

    结果与几何参数在相同的 SRS 中。

    从 MySQL 8.0.27 开始，[`ST_SymDifference()`](spatial-operator-functions.html#function_st-symdifference)允许在笛卡尔或地理 SRS 中使用参数。在 MySQL 8.0.27 之前，[`ST_SymDifference()`](spatial-operator-functions.html#function_st-symdifference)仅允许笛卡尔 SRS 中的参数；对于地理 SRS 中的参数，[`ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_not_implemented_for_geographic_srs)发生错误。

    [`ST_SymDifference()`](spatial-operator-functions.html#function_st-symdifference)如本节介绍中所述处理其参数。

    ```
    mysql> SET @g1 = ST_GeomFromText('MULTIPOINT(5 0,15 10,15 25)');
    mysql> SET @g2 = ST_GeomFromText('MULTIPOINT(1 1,15 10,15 25)');
    mysql> SELECT ST_AsText(ST_SymDifference(@g1, @g2));
    +---------------------------------------+
    | ST_AsText(ST_SymDifference(@g1, @g2)) |
    +---------------------------------------+
    | MULTIPOINT((1 1),(5 0))               |
    +---------------------------------------+
    ```

-   [](<>)

    [`ST_Transform(*`g`*, *`target_srid`*)`](spatial-operator-functions.html#function_st-transform)

    [](<>)

    将几何图形从一个空间参考系统 (SRS) 转换为另一个。返回值是与输入几何具有相同类型的几何，所有坐标都转换为目标 SRID，*`target_srid`*.转换支持仅限于地理 SRS，除非几何参数的 SRID 与目标 SRID 值相同，在这种情况下，返回值是任何有效 SRS 的输入几何。

    [`ST_Transform()`](spatial-operator-functions.html#function_st-transform)如本节介绍中所述处理其参数，但有以下例外：

    -   具有地理 SRS 的 SRID 值的几何参数不会产生错误。

    -   如果几何或目标 SRID 参数具有引用未定义空间参考系统 (SRS) 的 SRID 值，则[`ER_SRS_NOT_FOUND`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_srs_not_found)发生错误。

    -   如果几何在 SRS 中[`ST_Transform()`](spatial-operator-functions.html#function_st-transform)不能从，一个[`ER_TRANSFORM_SOURCE_SRS_NOT_SUPPORTED`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_transform_source_srs_not_supported)发生错误。

    -   如果目标 SRID 在 SRS 中[`ST_Transform()`](spatial-operator-functions.html#function_st-transform)不能转换为，一个[`ER_TRANSFORM_TARGET_SRS_NOT_SUPPORTED`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_transform_target_srs_not_supported)发生错误。

    -   如果几何位于不是 WGS 84 且没有 TOWGS84 子句的 SRS 中，则[`ER_TRANSFORM_SOURCE_SRS_MISSING_TOWGS84`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_transform_source_srs_missing_towgs84)发生错误。

    -   如果目标 SRID 位于不是 WGS 84 且没有 TOWGS84 子句的 SRS 中，则[`ER_TRANSFORM_TARGET_SRS_MISSING_TOWGS84`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_transform_target_srs_missing_towgs84)发生错误。

    [`ST_SRID(*`g`*, *`target_srid`*)`](gis-general-property-functions.html#function_st-srid)和[`ST_Transform(*`g`*, *`target_srid`*)`](spatial-operator-functions.html#function_st-transform)区别如下：

    -   [`ST_SRID()`](gis-general-property-functions.html#function_st-srid)更改几何 SRID 值而不转换其坐标。

    -   [`ST_Transform()`](spatial-operator-functions.html#function_st-transform)除了更改其 SRID 值之外，还转换几何坐标。

    ```
    mysql> SET @p = ST_GeomFromText('POINT(52.381389 13.064444)', 4326);
    mysql> SELECT ST_AsText(@p);
    +----------------------------+
    | ST_AsText(@p)              |
    +----------------------------+
    | POINT(52.381389 13.064444) |
    +----------------------------+
    mysql> SET @p = ST_Transform(@p, 4230);
    mysql> SELECT ST_AsText(@p);
    +---------------------------------------------+
    | ST_AsText(@p)                               |
    +---------------------------------------------+
    | POINT(52.38208611407426 13.065520672345304) |
    +---------------------------------------------+
    ```

-   [](<>)

    [`ST_联合（*`g1`*, *`g2`*)`](spatial-operator-functions.html#function_st-union)

    [](<>)

    返回表示几何值的点集并集的几何*`g1`*和*`g2`*.结果与几何参数在相同的 SRS 中。

    从 MySQL 8.0.26 开始，[`ST_Union()`](spatial-operator-functions.html#function_st-union)允许在笛卡尔或地理 SRS 中使用参数。在 MySQL 8.0.26 之前，[`ST_Union()`](spatial-operator-functions.html#function_st-union)仅允许笛卡尔 SRS 中的参数；对于地理 SRS 中的参数，[`ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_not_implemented_for_geographic_srs)发生错误。

    [`ST_Union()`](spatial-operator-functions.html#function_st-union)如本节介绍中所述处理其参数。

    ```
    mysql> SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)');
    mysql> SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)');
    mysql> SELECT ST_AsText(ST_Union(@g1, @g2));
    +--------------------------------------+
    | ST_AsText(ST_Union(@g1, @g2))        |
    +--------------------------------------+
    | MULTILINESTRING((1 1,3 3),(1 3,3 1)) |
    +--------------------------------------+
    ```
