● ST_Intersection(g1, g2)返回表示几何值 g1 和 g2 的点集交集的几何值。结果与几何参数在相同的 SRS 中。从 MySQL 8.0.27 开始,ST_Intersection() 允许参数使用笛卡尔或地理 SRS。在 MySQL 8.0.27 之前,ST_Intersection() 只允许参数使用笛卡尔 SRS,对于使用地理SRS的参数,将发生 ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS 错误。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, fractional_distance)该函数接受一个 LineString 几何值和范围在 [0.0, 1.0] 内的小数距离,并返回从 LineString 的起始点到终止点给定比例距离处的 Point。它可以用来回答诸如几何参数所描述的路径中间是哪个点。该函数是为所有空间参照系统中的 LineString 几何值实现的,包括笛卡尔坐标系和地理坐标系。如果 fractional_distance 参数为 1.0,则结果可能不是 LineString 参数的最后一点,而是接近它的一个点,这是由于近似值计算中的数值不准确造成的。相关函数 ST_LineInterpolatePoints() 接受类似的参数,但返回 MultiPoint,由 LineString 上从起始点到端点距离的每个分数距离部分的点值组成。ST_LineInterpolatePoint() 按照本部分介绍的方法处理参数,但有以下例外:■ 如果几何参数不是 LineString,则会发生 ER_UNEXPECTED_GEOMETRY_TYPE 错误。■ 如果分数距离参数超出 [0.0, 1.0] 范围,则会发生 ER_DATA_OUT_OF_RANGE 错误。ST_LineInterpolatePoint() 是对 OpenGIS 的 MySQL 扩展。这个函数是在 MySQL 8.0.24 中添加的。● ST_LineInterpolatePoints(ls, fractional_distance)该函数接受一个 LineString 几何值和在范围 (0.0, 1.0] 内的小数距离,并返回 MultiPoint 值,该值由 LineString 起始点以及 LineString 从起始点到终点每隔小数距离的点组成。它可以用来回答这样的问题,比如几何参数所描述的路径上每10%的位置上有哪些点值。该函数是为所有空间参照系统中的 LineString 几何值实现的,包括笛卡尔坐标系和地理坐标系。如果 fractional_distance 参数除以 1.0,余数为零,则结果可能不包含 LineString 参数的最后一个点,而是接近它的一个点,这是由于近似值计算中的数值不准确而造成的。ST_LineInterpolatePoints() 按照本部分简介中所述处理其参数,但有以下例外:■ 如果几何参数不是 LineString,则会发生 ER_UNEXPECTED_GEOMETRY_TYPE 错误。■ 如果小数距离参数超出范围 [0.0, 1.0],则会发生 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() 是 OpenGIS 的 MySQL 扩展。此函数是在 MySQL 8.0.24 中添加的。● ST_PointAtDistance(ls, distance)此函数接收 LineString 几何值和范围在 [0.0, ST_Length(ls)] 内的距离(以 LineString 的空间参照系(SRS)的单位测量)作为参数,并返回 LineString 上距离起点指定距离的点。它可用于回答以下问题,如几何参数所描述的距离路径起点400米的点值。该功能适用于所有空间参照系统(笛卡尔坐标系和地理坐标系)中的 LineString 几何值。ST_PointAtDistance() 按照本部分所述处理其参数,但有以下例外:■ 如果几何参数不是 LineString,则会发生 ER_UNEXPECTED_GEOMETRY_TYPE 错误。■如果小数距离参数超出 [0.0, ST_Length(ls)] 范围,则会发生 ER_DATA_OUT_OF_RANGE 错误。ST_PointAtDistance() 是 OpenGIS 的 MySQL 扩展。此函数是在 MySQL 8.0.24 中添加的。● ST_SymDifference(g1, g2)返回表示几何值 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))
从 MySQL 8.0.27 开始,ST_SymDifference() 允许参数使用笛卡尔或地理 SRS。在 MySQL 8.0.27 之前,ST_SymDifference() 只允许参数使用笛卡尔 SRS,对于使用地理 SRS 的参数,将发生 ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS 错误。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)将一个几何值从一个空间参照系统(SRS)转换到另一个空间参照系统。返回值是与输入类型相同的几何值,其所有坐标都转换为目标 SRID, target_srid。转换仅限于地理 SRS,除非几何参数的SRID与目标SRID值相同,在这种情况下,返回值是任何有效SRS的输入几何值。ST_Transform() 按照导言中介绍的方法处理参数,但有以下例外:■ 具有地理 SRS 的 SRID 值的几何参数不会产生错误。■ 如果几何值或目标SRID参数指向未定义空间参照系统(SRS)的SRID值,就会发生 ER_SRS_NOT_FOUND 错误。■ 如果几何值位于 ST_Transform() 不能转换的 SRS 中,则会发生 ER_TRANSFORM_SOURCE_SRS_NOT_SUPPORTED 错误。■ 如果目标 SRID 位于 ST_Transform() 不能转换到的 SRS 中,则会发生 ER_TRANSFORM_TARGET_SRS_NOT_SUPPORTED 错误。■ 如果几何值所在的 SRS 不是 WGS 84 并且没有 TOWGS84 子句,则会发生 ER_TRANSFORM_SOURCE_SRS_MISSING_TOWGS84 错误。■ 如果目标 SRID 的 SRS 不是 WGS 84 并且没有 TOWGS84 子句,则会发生 ER_TRANSFORM_TARGET_SRS_MISSING_TOWGS84 错误。ST_SRID(g, target_srid) 和 ST_Transform(g, target_srid) 的区别如下:■ ST_SRID() 改变几何SRID值而不改变其坐标。■ 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) |
+---------------------------------------------+
返回表示几何值 g1 和 g2 的点集并集的几何值。结果与几何参数在相同的SRS中。从 MySQL 8.0.26 开始,ST_Union() 允许参数使用笛卡尔或地理 SRS。在 MySQL 8.0.26 之前,ST_Union() 只允许参数使用笛卡尔 SRS,如果参数使用地理 SRS,将发生 ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS 错误。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)) |
+--------------------------------------+
https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html