OpenGIS提出了许多可以生成几何图形的函数。它们被设计用来实现空间操作符。这些函数支持所有实参类型组合,但根据gydF4y2Ba开放地理空间联盟gydF4y2Ba规范。gydF4y2Ba
MySQL还实现了一些扩展到OpenGIS的函数,如函数描述中所述。此外,gydF4y2Ba第12.17.7节,“几何属性函数”gydF4y2Ba,讨论了从现有几何构造新几何的几个函数。有关这些函数的描述,请参阅本节:gydF4y2Ba
除非另有说明,本节中的函数以如下方式处理它们的几何参数:gydF4y2Ba
如果任何参数是gydF4y2Ba
零gydF4y2Ba
,返回值为gydF4y2Ba零gydF4y2Ba
.gydF4y2Ba如果任何几何参数不是语法形式良好的几何,则gydF4y2Ba
ER_GIS_INVALID_DATAgydF4y2Ba
发生错误。gydF4y2Ba如果任何几何参数在未定义的空间参考系统(SRS)中是语法格式良好的几何,则一个gydF4y2Ba
ER_SRS_NOT_FOUNDgydF4y2Ba
发生错误。gydF4y2Ba对于具有多个几何参数的函数,如果这些参数不在同一个SRS中,则使用gydF4y2Ba
ER_GIS_DIFFERENT_SRIDSgydF4y2Ba
发生错误。gydF4y2Ba如果任何几何参数具有地理SRS的SRID值,且函数不处理地理几何,则会使用gydF4y2Ba
ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRSgydF4y2Ba
发生错误。gydF4y2Ba对于地理SRS几何参数,如果任何参数具有超出范围的经度或纬度,则会发生错误:gydF4y2Ba
如果经度值不在(−180,180])范围内,则angydF4y2Ba
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGEgydF4y2Ba
发生错误(gydF4y2BaER_LONGITUDE_OUT_OF_RANGEgydF4y2Ba
在MySQL 8.0.12之前)。gydF4y2Ba如果纬度值不在[- 90,90]范围内,则使用gydF4y2Ba
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGEgydF4y2Ba
发生错误(gydF4y2BaER_LATITUDE_OUT_OF_RANGEgydF4y2Ba
在MySQL 8.0.12之前)。gydF4y2Ba
范围以度为单位。如果SRS使用另一个单位,则范围使用其单位中相应的值。由于浮点运算,精确的范围限制略有偏差。gydF4y2Ba
否则返回值为non-gydF4y2Ba
零gydF4y2Ba
.gydF4y2Ba
这些空间操作符函数是可用的:gydF4y2Ba
返回一个几何图形,该几何图形表示与几何值距离的所有点gydF4y2Ba
ggydF4y2Ba
小于或等于的距离gydF4y2BadgydF4y2Ba
.结果与几何参数在同一个SRS中。gydF4y2Ba如果几何参数为空,gydF4y2Ba
ST_Buffer ()gydF4y2Ba
返回一个空几何体。gydF4y2Ba如果距离为0,gydF4y2Ba
ST_Buffer ()gydF4y2Ba
返回几何参数不变:gydF4y2Bamysql> SET @pt = ST_GeomFromText('POINT(0 0)');SELECT ST_AsText(ST_Buffer(@pt, 0))+------------------------------+ | ST_AsText (ST_Buffer (@pt 0 )) | +------------------------------+ | 点(0 0 ) | +------------------------------+gydF4y2Ba
如果几何参数在笛卡尔SRS中:gydF4y2Ba
ST_Buffer ()gydF4y2Ba
支持负距离gydF4y2Ba多边形gydF4y2Ba
和gydF4y2Ba多个多边形gydF4y2Ba
包含的几何集合gydF4y2Ba多边形gydF4y2Ba
或gydF4y2Ba多个多边形gydF4y2Ba
值。gydF4y2Ba如果结果被简化到消失,那么结果就是一个空几何。gydF4y2Ba
一个gydF4y2Ba
ER_WRONG_ARGUMENTSgydF4y2Ba
错误发生在gydF4y2BaST_Buffer ()gydF4y2Ba
用负距离gydF4y2Ba点gydF4y2Ba
,gydF4y2Ba多点gydF4y2Ba
,gydF4y2BaLineStringgydF4y2Ba
,gydF4y2BaMultiLineStringgydF4y2Ba
值,并且对于不包含任何值的几何集合gydF4y2Ba多边形gydF4y2Ba
或gydF4y2Ba多个多边形gydF4y2Ba
值。gydF4y2Ba
如果几何参数在地理SRS中:gydF4y2Ba
在MySQL 8.0.26之前,一个gydF4y2Ba
ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRSgydF4y2Ba
发生错误。gydF4y2Ba从MySQL 8.0.26开始,gydF4y2Ba
点gydF4y2Ba
允许地理SRS中的几何图形。为非gydF4y2Ba点gydF4y2Ba
几何图形,一个gydF4y2BaER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRSgydF4y2Ba
错误仍然发生。gydF4y2Ba
对于允许地理的MySQL版本gydF4y2Ba
点gydF4y2Ba
几何图形:gydF4y2Ba如果距离不是负的且没有指定策略,则该函数返回gydF4y2Ba
点gydF4y2Ba
在其SRS中。distance参数必须是SRS距离单位(目前总是米)。gydF4y2Ba如果距离为负或任何策略(除了gydF4y2Ba
零gydF4y2Ba
)被指定,则为gydF4y2BaER_WRONG_ARGUMENTSgydF4y2Ba
发生错误。gydF4y2Ba
ST_Buffer ()gydF4y2Ba
允许距离参数后面最多有三个可选策略参数。策略影响缓冲区计算。类生成的字节字符串值gydF4y2BaST_Buffer_Strategy ()gydF4y2Ba
函数,用于点、连接和结束策略:gydF4y2Ba积分策略适用于gydF4y2Ba
点gydF4y2Ba
和gydF4y2Ba多点gydF4y2Ba
几何图形。如果没有指定点策略,则默认为gydF4y2BaST_Buffer_Strategy (point_circle, 32)gydF4y2Ba
.gydF4y2BaJoin策略适用于gydF4y2Ba
LineStringgydF4y2Ba
,gydF4y2BaMultiLineStringgydF4y2Ba
,gydF4y2Ba多边形gydF4y2Ba
,gydF4y2Ba多个多边形gydF4y2Ba
几何图形。如果未指定连接策略,则默认为gydF4y2BaST_Buffer_Strategy (join_round, 32)gydF4y2Ba
.gydF4y2Ba终端策略适用于gydF4y2Ba
LineStringgydF4y2Ba
和gydF4y2BaMultiLineStringgydF4y2Ba
几何图形。如果没有指定结束策略,默认为gydF4y2BaST_Buffer_Strategy (end_round, 32)gydF4y2Ba
.gydF4y2Ba
每种类型最多可以指定一个策略,并且可以以任何顺序给出。gydF4y2Ba
如果缓冲策略无效,则执行gydF4y2Ba
ER_WRONG_ARGUMENTSgydF4y2Ba
发生错误。策略在以下任何情况下都是无效的:gydF4y2Ba指定了给定类型(point、join或end)的多个策略。gydF4y2Ba
不是策略的值(如任意二进制字符串或数字)作为策略传递。gydF4y2Ba
一个gydF4y2Ba
点gydF4y2Ba
策略被传递,几何体不包含gydF4y2Ba点gydF4y2Ba
或gydF4y2Ba多点gydF4y2Ba
值。gydF4y2Ba传递一个结束或连接策略,几何体包含nogydF4y2Ba
LineStringgydF4y2Ba
,gydF4y2Ba多边形gydF4y2Ba
,gydF4y2BaMultiLinestringgydF4y2Ba
或gydF4y2Ba多个多边形gydF4y2Ba
值。gydF4y2Ba
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 )) | +--------------------------------------------+ | 多边形(2 2 2 2 2 2 2 2 2 2 )) | +--------------------------------------------+gydF4y2Ba
mysql> SET @ls = ST_GeomFromText('LINESTRING(0 0,0 5,5)');mysql> SET @end_strategy = ST_Buffer_Strategy('end_flat');mysql> SET @join_strategy = ST_Buffer_Strategy('join_round', 10);mysql >选择ST_AsText (ST_Buffer (@ls 5 @end_strategy @join_strategy )) +---------------------------------------------------------------+ | ST_AsText (ST_Buffer (@ls 5 @end_strategy @join_strategy )) | +---------------------------------------------------------------+ | 多边形(0 10 5 5 5 10日,-3.5355339059327373 - 8.535533905932738,| | 5 5 5 0 0 0 5 0 5 5 )) | +---------------------------------------------------------------+gydF4y2Ba
ST_Buffer_Strategy (gydF4y2Ba
策略gydF4y2Ba
(,gydF4y2Bapoints_per_circlegydF4y2Ba
])gydF4y2Ba此函数返回用于的策略字节字符串gydF4y2Ba
ST_Buffer ()gydF4y2Ba
影响缓冲区计算。gydF4y2Ba有关策略的信息可在gydF4y2BaBoost.orggydF4y2Ba.gydF4y2Ba
第一个参数必须是表示策略选项的字符串:gydF4y2Ba
对于点策略,允许的值为gydF4y2Ba
“point_circle”gydF4y2Ba
和gydF4y2Ba“point_square”gydF4y2Ba
.gydF4y2Ba对于连接策略,允许的值为gydF4y2Ba
“join_round”gydF4y2Ba
和gydF4y2Ba“join_miter”gydF4y2Ba
.gydF4y2Ba对于最终策略,允许的值为gydF4y2Ba
“end_round”gydF4y2Ba
和gydF4y2Ba“end_flat”gydF4y2Ba
.gydF4y2Ba
如果第一个参数是gydF4y2Ba
“point_circle”gydF4y2Ba
,gydF4y2Ba“join_round”gydF4y2Ba
,gydF4y2Ba“join_miter”gydF4y2Ba
,或gydF4y2Ba“end_round”gydF4y2Ba
,gydF4y2Bapoints_per_circlegydF4y2Ba
参数必须为正数值。的最大gydF4y2Bapoints_per_circlegydF4y2Ba
值就是的值gydF4y2Bamax_points_in_geometrygydF4y2Ba
系统变量。gydF4y2Ba示例请参见gydF4y2Ba
ST_Buffer ()gydF4y2Ba
.gydF4y2BaST_Buffer_Strategy ()gydF4y2Ba
像本节介绍中描述的那样处理它的参数,但有以下例外:gydF4y2Ba如果任何参数无效,则使用gydF4y2Ba
ER_WRONG_ARGUMENTSgydF4y2Ba
发生错误。gydF4y2Ba如果第一个参数是gydF4y2Ba
“point_square”gydF4y2Ba
或gydF4y2Ba“end_flat”gydF4y2Ba
,gydF4y2Bapoints_per_circlegydF4y2Ba
不能给出或给出参数gydF4y2BaER_WRONG_ARGUMENTSgydF4y2Ba
发生错误。gydF4y2Ba
ST_ConvexHull (gydF4y2Ba
ggydF4y2Ba
)gydF4y2Ba返回表示几何值的凸包的几何图形gydF4y2Ba
ggydF4y2Ba
.gydF4y2Ba这个函数通过首先检查顶点是否共线来计算几何图形的凸包。如果是,函数返回线性外壳,否则返回多边形外壳。此函数通过提取集合的所有组件的所有顶点来处理几何集合,从而创建一个gydF4y2Ba
多点gydF4y2Ba
值,并计算其凸包。gydF4y2BaST_ConvexHull ()gydF4y2Ba
像本节介绍中描述的那样处理它的参数,除了这个例外:gydF4y2Ba返回值为gydF4y2Ba
零gydF4y2Ba
对于参数是空几何集合的附加条件。gydF4y2Ba
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 ))) | +-----------------------------------------------+ | 多边形(5 0 5 0、25、15 25日0 )) | +-----------------------------------------------+gydF4y2Ba
ST_Difference (gydF4y2Ba
g1gydF4y2Ba
,gydF4y2Bag2gydF4y2Ba
)gydF4y2Ba返回表示几何值的点集差值的几何图形gydF4y2Ba
g1gydF4y2Ba
和gydF4y2Bag2gydF4y2Ba
.结果与几何参数在相同的SRS中。gydF4y2Ba从MySQL 8.0.26开始,gydF4y2Ba
ST_Difference ()gydF4y2Ba
允许笛卡尔或地理SRS的论点。在MySQL 8.0.26之前,gydF4y2BaST_Difference ()gydF4y2Ba
只允许笛卡尔SRS中的论点;在地理SRS的论点,一个gydF4y2BaER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRSgydF4y2Ba
发生错误。gydF4y2BaST_Difference ()gydF4y2Ba
按照本节介绍中的描述处理其参数。gydF4y2Bamysql> SET @g1 =点(1,1),@g2 =点(2,2);SELECT ST_AsText(ST_Difference(@g1, @g2));+------------------------------------+ | ST_AsText (ST_Difference (@g1 @g2 )) | +------------------------------------+ | 点(1 1 ) | +------------------------------------+gydF4y2Ba
ST_Intersection (gydF4y2Ba
g1gydF4y2Ba
,gydF4y2Bag2gydF4y2Ba
)gydF4y2Ba返回表示几何值的点集交点的几何图形gydF4y2Ba
g1gydF4y2Ba
和gydF4y2Bag2gydF4y2Ba
.结果与几何参数在相同的SRS中。gydF4y2Ba从MySQL 8.0.27开始,gydF4y2Ba
ST_Intersection ()gydF4y2Ba
允许笛卡尔或地理SRS的论点。在MySQL 8.0.27之前,gydF4y2BaST_Intersection ()gydF4y2Ba
只允许笛卡尔SRS中的论点;在地理SRS的论点,一个gydF4y2BaER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRSgydF4y2Ba
发生错误。gydF4y2BaST_Intersection ()gydF4y2Ba
按照本节介绍中的描述处理其参数。gydF4y2Bamysql> SET @g1 = ST_GeomFromText('LineString(1,3,3)');mysql> SET @g2 = ST_GeomFromText('LineString(1,3,3 1)');SELECT ST_AsText(@g1, @g2);+--------------------------------------+ | ST_AsText (ST_Intersection (@g1 @g2 )) | +--------------------------------------+ | 点(2 2 ) | +--------------------------------------+gydF4y2Ba
ST_LineInterpolatePoint (gydF4y2Ba
lsgydF4y2Ba
,gydF4y2Bafractional_distancegydF4y2Ba
)gydF4y2Ba此函数接受一个gydF4y2Ba
LineStringgydF4y2Ba
几何图形和范围[0.0,1.0]中的分数距离,并返回gydF4y2Ba点gydF4y2Ba
沿着gydF4y2BaLineStringgydF4y2Ba
从起点到终点的距离的给定分数。它可以用来回答这样的问题gydF4y2Ba点gydF4y2Ba
沿着几何参数描述的路走了一半。gydF4y2Ba该函数实现为gydF4y2Ba
LineStringgydF4y2Ba
所有空间参考系统中的几何,包括笛卡尔和地理。gydF4y2Ba如果gydF4y2Ba
fractional_distancegydF4y2Ba
参数为1.0时,结果可能不完全是最后一点gydF4y2BaLineStringgydF4y2Ba
参数,但一个点接近它,由于数值不准确的近似值计算。gydF4y2Ba一个相关的函数,gydF4y2Ba
ST_LineInterpolatePoints ()gydF4y2Ba
,接受类似的参数,但返回一个gydF4y2Ba多点gydF4y2Ba
组成的gydF4y2Ba点gydF4y2Ba
沿着gydF4y2BaLineStringgydF4y2Ba
从起点到终点距离的每一部分。有关这两个函数的示例,请参见gydF4y2BaST_LineInterpolatePoints ()gydF4y2Ba
描述。gydF4y2BaST_LineInterpolatePoint ()gydF4y2Ba
像本节介绍中描述的那样处理它的参数,但有以下例外:gydF4y2Ba如果几何参数不是gydF4y2Ba
LineStringgydF4y2Ba
,一个gydF4y2BaER_UNEXPECTED_GEOMETRY_TYPEgydF4y2Ba
发生错误。gydF4y2Ba如果分数距离参数在范围[0.0,1.0]之外,则angydF4y2Ba
ER_DATA_OUT_OF_RANGEgydF4y2Ba
发生错误。gydF4y2Ba
ST_LineInterpolatePoint ()gydF4y2Ba
是一个MySQL扩展到OpenGIS。此函数是在MySQL 8.0.24中添加的。gydF4y2BaST_LineInterpolatePoints (gydF4y2Ba
lsgydF4y2Ba
,gydF4y2Bafractional_distancegydF4y2Ba
)gydF4y2Ba此函数接受一个gydF4y2Ba
LineStringgydF4y2Ba
几何图形和范围(0.0,1.0]中的分数距离,并返回gydF4y2Ba多点gydF4y2Ba
由gydF4y2BaLineStringgydF4y2Ba
起点,加上gydF4y2Ba点gydF4y2Ba
沿着gydF4y2BaLineStringgydF4y2Ba
从起点到终点距离的每一部分。它可以用来回答这样的问题gydF4y2Ba点gydF4y2Ba
数值分布在几何参数所描述的道路上每10%的位置。gydF4y2Ba该函数实现为gydF4y2Ba
LineStringgydF4y2Ba
所有空间参考系统中的几何,包括笛卡尔和地理。gydF4y2Ba如果gydF4y2Ba
fractional_distancegydF4y2Ba
参数除1.0余数为0时,结果可能不包含参数的最后一点gydF4y2BaLineStringgydF4y2Ba
参数,但一个点接近它,由于数值不准确的近似值计算。gydF4y2Ba一个相关的函数,gydF4y2Ba
ST_LineInterpolatePoint ()gydF4y2Ba
,接受类似的参数,但返回gydF4y2Ba点gydF4y2Ba
沿着gydF4y2BaLineStringgydF4y2Ba
从起点到终点的距离的给定分数。gydF4y2BaST_LineInterpolatePoints ()gydF4y2Ba
像本节介绍中描述的那样处理它的参数,但有以下例外:gydF4y2Ba如果几何参数不是gydF4y2Ba
LineStringgydF4y2Ba
,一个gydF4y2BaER_UNEXPECTED_GEOMETRY_TYPEgydF4y2Ba
发生错误。gydF4y2Ba如果分数距离参数在范围[0.0,1.0]之外,则angydF4y2Ba
ER_DATA_OUT_OF_RANGEgydF4y2Ba
发生错误。gydF4y2Ba
mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0,0 5,5)');mysql> SELECT ST_AsText(ST_LineInterpolatePoint(@ls1, .5));+----------------------------------------------+ | ST_AsText (ST_LineInterpolatePoint (@ls1。5 )) | +----------------------------------------------+ | 点(0 5 ) | +----------------------------------------------+ mysql >选择ST_AsText (ST_LineInterpolatePoint (@ls1炮));+-----------------------------------------------+ | ST_AsText (ST_LineInterpolatePoint (@ls1, 0 )) | +-----------------------------------------------+ | 点(2.5 - 5 ) | +-----------------------------------------------+ mysql >选择ST_AsText (ST_LineInterpolatePoint (@ls1 1));+---------------------------------------------+ | ST_AsText (ST_LineInterpolatePoint (@ls1 1 )) | +---------------------------------------------+ | (5点5 ) | +---------------------------------------------+ mysql >选择ST_AsText (ST_LineInterpolatePoints (@ls1 .25));+------------------------------------------------+ | ST_AsText (ST_LineInterpolatePoints (@ls1,二十五分 )) | +------------------------------------------------+ | 多点(2.5 (0)(0 5),2.5 (5),(5 5 )) | +------------------------------------------------+gydF4y2Ba
ST_LineInterpolatePoints ()gydF4y2Ba
是一个MySQL扩展到OpenGIS。此函数是在MySQL 8.0.24中添加的。gydF4y2BaST_PointAtDistance (gydF4y2Ba
lsgydF4y2Ba
,gydF4y2Ba距离gydF4y2Ba
)gydF4y2Ba此函数接受一个gydF4y2Ba
LineStringgydF4y2Ba
几何和距离范围[0.0,gydF4y2BaST_Length (gydF4y2Ba
以空间参考系统(SRS)为单位测量的gydF4y2BalsgydF4y2Ba
)gydF4y2BaLineStringgydF4y2Ba
,并返回gydF4y2Ba点gydF4y2Ba
沿着gydF4y2BaLineStringgydF4y2Ba
到起点的这个距离。它可以用来回答这样的问题gydF4y2Ba点gydF4y2Ba
值是距离几何参数所描述的道路起点400米。gydF4y2Ba该函数实现为gydF4y2Ba
LineStringgydF4y2Ba
所有空间参考系统中的几何,包括笛卡尔和地理。gydF4y2BaST_PointAtDistance ()gydF4y2Ba
像本节介绍中描述的那样处理它的参数,但有以下例外:gydF4y2Ba如果几何参数不是gydF4y2Ba
LineStringgydF4y2Ba
,一个gydF4y2BaER_UNEXPECTED_GEOMETRY_TYPEgydF4y2Ba
发生错误。gydF4y2Ba如果分数距离参数超出范围[0.0,gydF4y2Ba
ST_Length (gydF4y2Ba
),一个gydF4y2BalsgydF4y2Ba
)gydF4y2BaER_DATA_OUT_OF_RANGEgydF4y2Ba
发生错误。gydF4y2Ba
ST_PointAtDistance ()gydF4y2Ba
是一个MySQL扩展到OpenGIS。此函数是在MySQL 8.0.24中添加的。gydF4y2BaST_SymDifference (gydF4y2Ba
g1gydF4y2Ba
,gydF4y2Bag2gydF4y2Ba
)gydF4y2Ba返回表示几何值的点集对称差值的几何图形gydF4y2Ba
g1gydF4y2Ba
和gydF4y2Bag2gydF4y2Ba
,其定义为:gydF4y2Bag1gydF4y2BasymdifferencegydF4y2Bag2gydF4y2Ba: = (gydF4y2Bag1gydF4y2Ba联盟gydF4y2Bag2gydF4y2Ba)差异(gydF4y2Bag1gydF4y2Ba十字路口gydF4y2Bag2gydF4y2Ba)gydF4y2Ba
或者,在函数调用表示法中:gydF4y2Ba
ST_SymDifference (gydF4y2Bag1gydF4y2Ba,gydF4y2Bag2gydF4y2Ba) = ST_Difference(ST_Union(gydF4y2Bag1gydF4y2Ba,gydF4y2Bag2gydF4y2Ba), ST_Intersection (gydF4y2Bag1gydF4y2Ba,gydF4y2Bag2gydF4y2Ba))gydF4y2Ba
结果与几何参数在相同的SRS中。gydF4y2Ba
从MySQL 8.0.27开始,gydF4y2Ba
ST_SymDifference ()gydF4y2Ba
允许笛卡尔或地理SRS的论点。在MySQL 8.0.27之前,gydF4y2BaST_SymDifference ()gydF4y2Ba
只允许笛卡尔SRS中的论点;在地理SRS的论点,一个gydF4y2BaER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRSgydF4y2Ba
发生错误。gydF4y2BaST_SymDifference ()gydF4y2Ba
按照本节介绍中的描述处理其参数。gydF4y2Bamysql> SET @g1 = ST_GeomFromText('MULTIPOINT(5 0,15 10,15 25)');mysql> SET @g2 = ST_GeomFromText('MULTIPOINT(1 1,15 10,15 25)');SELECT ST_AsText(ST_SymDifference(@g1, @g2));+---------------------------------------+ | ST_AsText (ST_SymDifference (@g1 @g2 )) | +---------------------------------------+ | 多点((1),(5 0 )) | +---------------------------------------+gydF4y2Ba
ST_Transform (gydF4y2Ba
ggydF4y2Ba
,gydF4y2Batarget_sridgydF4y2Ba
)gydF4y2Ba将几何图形从一个空间参考系统(SRS)转换为另一个。返回值是一个与输入几何图形类型相同的几何图形,所有坐标都转换为目标SRID,gydF4y2Ba
target_sridgydF4y2Ba
.转换支持仅限于地理SRS,除非几何参数的SRID与目标SRID值相同,在这种情况下,返回值是任何有效SRS的输入几何。gydF4y2BaST_Transform ()gydF4y2Ba
像本节介绍中描述的那样处理它的参数,但有以下例外:gydF4y2Ba对于地理SRS具有SRID值的几何参数不会产生错误。gydF4y2Ba
如果几何图形或目标SRID参数具有引用未定义的空间参考系统(SRS)的SRID值,则会使用gydF4y2Ba
ER_SRS_NOT_FOUNDgydF4y2Ba
发生错误。gydF4y2Ba如果几何是在SRS中gydF4y2Ba
ST_Transform ()gydF4y2Ba
不能从,angydF4y2BaER_TRANSFORM_SOURCE_SRS_NOT_SUPPORTEDgydF4y2Ba
发生错误。gydF4y2Ba如果目标SRID在SRS中gydF4y2Ba
ST_Transform ()gydF4y2Ba
不能转换为,angydF4y2BaER_TRANSFORM_TARGET_SRS_NOT_SUPPORTEDgydF4y2Ba
发生错误。gydF4y2Ba如果几何体在一个SRS中,而不是WGS84,并且没有TOWGS84子句,则一个gydF4y2Ba
ER_TRANSFORM_SOURCE_SRS_MISSING_TOWGS84gydF4y2Ba
发生错误。gydF4y2Ba如果目标SRID位于非WGS84且没有TOWGS84子句的SRS中,则会使用gydF4y2Ba
ER_TRANSFORM_TARGET_SRS_MISSING_TOWGS84gydF4y2Ba
发生错误。gydF4y2Ba
ST_SRID (gydF4y2Ba
和gydF4y2BaggydF4y2Ba
,gydF4y2Batarget_sridgydF4y2Ba
)gydF4y2BaST_Transform (gydF4y2Ba
区别如下:gydF4y2BaggydF4y2Ba
,gydF4y2Batarget_sridgydF4y2Ba
)gydF4y2BaST_SRID ()gydF4y2Ba
改变几何SRID值而不改变其坐标。gydF4y2BaST_Transform ()gydF4y2Ba
除了改变其SRID值外,还转换几何坐标。gydF4y2Ba
mysql> SET @p = ST_GeomFromText('POINT(52.381389 13.064444)', 4326);SELECT ST_AsText(@p);+----------------------------+ | ST_AsText (@p ) | +----------------------------+ | 点(52.381389 - 13.064444 ) | +----------------------------+ mysql >设置@p = ST_Transform (@p, 4230);SELECT ST_AsText(@p);+---------------------------------------------+ | ST_AsText (@p ) | +---------------------------------------------+ | 点(52.38208611407426 - 13.065520672345304 ) | +---------------------------------------------+gydF4y2Ba
ST_Union (gydF4y2Ba
g1gydF4y2Ba
,gydF4y2Bag2gydF4y2Ba
)gydF4y2Ba返回表示几何值的点集并集的几何图形gydF4y2Ba
g1gydF4y2Ba
和gydF4y2Bag2gydF4y2Ba
.结果与几何参数在相同的SRS中。gydF4y2Ba从MySQL 8.0.26开始,gydF4y2Ba
ST_Union ()gydF4y2Ba
允许笛卡尔或地理SRS的论点。在MySQL 8.0.26之前,gydF4y2BaST_Union ()gydF4y2Ba
只允许笛卡尔SRS中的论点;在地理SRS的论点,一个gydF4y2BaER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRSgydF4y2Ba
发生错误。gydF4y2BaST_Union ()gydF4y2Ba
按照本节介绍中的描述处理其参数。gydF4y2Bamysql> SET @g1 = ST_GeomFromText('LineString(1,3,3)');mysql> SET @g2 = ST_GeomFromText('LineString(1,3,3 1)');SELECT ST_AsText(ST_Union(@g1, @g2));+--------------------------------------+ | ST_AsText (ST_Union (@g1 @g2 )) | +--------------------------------------+ | MULTILINESTRING((1 1、3 3),(1,3 - 1 )) | +--------------------------------------+gydF4y2Ba