本节中的函数提供了对几何值的方便操作。gydF4y2Ba
除非另有说明,本节中的函数处理其几何参数的方式如下:gydF4y2Ba
如果有任何参数是gydF4y2Ba
零gydF4y2Ba
,返回值为gydF4y2Ba零gydF4y2Ba
.gydF4y2Ba如果任何几何参数不是一个语法结构良好的几何,则gydF4y2Ba
er_gis_invalid_data.gydF4y2Ba
发生错误。gydF4y2Ba如果任何几何参数是未定义的空间参考系统(SRS)中的句法良好的几何形状,则gydF4y2Ba
ER_SRS_NOT_FOUNDgydF4y2Ba
发生错误。gydF4y2Ba对于采用多个几何参数的函数,如果这些参数不在同一SRS中,则gydF4y2Ba
er_gis_different_srids.gydF4y2Ba
发生错误。gydF4y2Ba否则,返回值为non-gydF4y2Ba
零gydF4y2Ba
.gydF4y2Ba
这些便利的函数是可用的:gydF4y2Ba
st_distance_sphere(gydF4y2Ba
G1.gydF4y2Ba
,gydF4y2BaG2.gydF4y2Ba
[,gydF4y2Ba半径gydF4y2Ba
])gydF4y2Ba返回之间的最小球面距离gydF4y2Ba
点gydF4y2Ba
或gydF4y2Ba多点gydF4y2Ba
球体上的争论,以米为单位。(对于通用距离计算,见gydF4y2Bast_distance()gydF4y2Ba
函数)。可选gydF4y2Ba半径gydF4y2Ba
参数应该以米为单位。gydF4y2Ba如果两个几何参数都是有效的笛卡尔gydF4y2Ba
点gydF4y2Ba
或gydF4y2Ba多点gydF4y2Ba
在SRID 0中,返回值是在给定半径的球体上两个几何图形之间的最短距离。如果省略,默认半径为6370,986米,点X和点Y坐标分别被解释为经度和纬度。gydF4y2Ba如果两个几何参数都有效gydF4y2Ba
点gydF4y2Ba
或gydF4y2Ba多点gydF4y2Ba
值时,返回值是给定半径球面上两个几何图形之间的最短距离。如果省略,默认半径等于平均半径,定义为(2a+b)/3,其中a是SRS的半长轴,b是SRS的半短轴。gydF4y2BaST_Distance_Sphere ()gydF4y2Ba
处理其参数,如本节简介中所述,其中包含以下内容:gydF4y2Ba支持的几何参数组合是gydF4y2Ba
点gydF4y2Ba
和gydF4y2Ba点gydF4y2Ba
,或gydF4y2Ba点gydF4y2Ba
和gydF4y2Ba多点gydF4y2Ba
(以任何论点订单)。如果至少有一个几何图形不是gydF4y2Ba点gydF4y2Ba
也不gydF4y2Ba多点gydF4y2Ba
,它的srid是0,一个gydF4y2BaER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRSgydF4y2Ba
发生错误。如果至少有一个几何图形不是gydF4y2Ba点gydF4y2Ba
也不gydF4y2Ba多点gydF4y2Ba
,它的肉体是指地理SRS,一个gydF4y2BaER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRSgydF4y2Ba
发生错误。如果任何几何结构指向一个投影的SRS,则gydF4y2BaER_NOT_IMPLEMENTED_FOR_PROJECTED_SRSgydF4y2Ba
发生错误。gydF4y2Ba如果任何参数具有超出范围的经度或纬度,则会发生错误:gydF4y2Ba
如果经度值不在范围内(-180,180],则gydF4y2Ba
er_geometry_param_longitude_out_of_range.gydF4y2Ba
发生错误(gydF4y2BaER_LONGITUDE_OUT_OF_RANGEgydF4y2Ba
在MySQL 8.0.12之前)。gydF4y2Ba如果纬度值不在范围内[-90,90],则gydF4y2Ba
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGEgydF4y2Ba
发生错误(gydF4y2Baer_latitude_out_Of_Range.gydF4y2Ba
在MySQL 8.0.12之前)。gydF4y2Ba
范围以度数表示。如果一个SRS使用另一个单元,则该范围使用其单元中相应的值。由于浮点运算,确切的范围限制略有偏差。gydF4y2Ba
如果是gydF4y2Ba
半径gydF4y2Ba
论点是存在的,但不是肯定的gydF4y2BaER_NONPOSITIVE_RADIUSgydF4y2Ba
发生错误。gydF4y2Ba如果距离超过双精度数的范围,则gydF4y2Ba
ER_STD_OVERFLOW_ERRORgydF4y2Ba
发生错误。gydF4y2Ba
mysql> SET @pt1 = ST_GeomFromText('POINT(0 0)');mysql> set @ pt2 = st_geom fromtext('point(180 0)');mysql>选择st_distance_sphere(@ pt1,@ pt2);+ ---------------------------- + |st_distance_sphere(@ pt1,@ pt2)|+ ---------------------------- + |20015042.813723423 |+ ------------------------------gydF4y2Ba
st_isvalid(gydF4y2Ba
ggydF4y2Ba
)gydF4y2Ba如果参数几何有效则返回1,如果参数几何无效则返回0。几何有效性由OGC规范定义。gydF4y2Ba
唯一有效的空几何形式以空几何收集值的形式表示。gydF4y2Ba
st_isvalid()gydF4y2Ba
在这种情况下返回1。MySQL不支持GISgydF4y2Ba空的gydF4y2Ba
值如gydF4y2Ba点空gydF4y2Ba
.gydF4y2Bast_isvalid()gydF4y2Ba
处理本节简介中的说明,处理其参数,其中:gydF4y2Ba如果几何图形的地理SRS的经度或纬度超出范围,则会发生错误:gydF4y2Ba
如果经度值不在范围内(-180,180],则gydF4y2Ba
er_geometry_param_longitude_out_of_range.gydF4y2Ba
发生错误(gydF4y2BaER_LONGITUDE_OUT_OF_RANGEgydF4y2Ba
在MySQL 8.0.12之前)。gydF4y2Ba如果纬度值不在范围内[-90,90],则gydF4y2Ba
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGEgydF4y2Ba
发生错误(gydF4y2Baer_latitude_out_Of_Range.gydF4y2Ba
在MySQL 8.0.12之前)。gydF4y2Ba
范围以度数表示。如果一个SRS使用另一个单元,则该范围使用其单元中相应的值。由于浮点运算,确切的范围限制略有偏差。gydF4y2Ba
mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0,-0.00 0,0.0 0)');mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 0, 1 1)');mysql >选择ST_IsValid (@ls1);+------------------+ | ST_IsValid (@ls1 ) | +------------------+ | 0 | +------------------+ mysql >选择ST_IsValid (@ls2);+------------------+ | ST_IsValid (@ls2 ) | +------------------+ | 1 | +------------------+gydF4y2Ba
st_makeenvelope(gydF4y2Ba
PT1.gydF4y2Ba
,gydF4y2BaPT2.gydF4y2Ba
)gydF4y2Ba返回在两个点左右形成信封的矩形,如agydF4y2Ba
点gydF4y2Ba
,gydF4y2BaLinestring.gydF4y2Ba
,或gydF4y2Ba多边形gydF4y2Ba
.gydF4y2Ba计算是用笛卡尔坐标系完成的,而不是在球体、椭球体或地球上。gydF4y2Ba
给予两点gydF4y2Ba
PT1.gydF4y2Ba
和gydF4y2BaPT2.gydF4y2Ba
,gydF4y2BaST_MakeEnvelope ()gydF4y2Ba
在这样的抽象平面上创建结果几何:gydF4y2Ba如果gydF4y2Ba
PT1.gydF4y2Ba
和gydF4y2BaPT2.gydF4y2Ba
是否相等,结果是点gydF4y2BaPT1.gydF4y2Ba
.gydF4y2Ba否则,如果gydF4y2Ba
(gydF4y2Ba
是垂直线段还是水平线段,结果是线段gydF4y2BaPT1.gydF4y2Ba
,gydF4y2BaPT2.gydF4y2Ba
)gydF4y2Ba(gydF4y2Ba
.gydF4y2BaPT1.gydF4y2Ba
,gydF4y2BaPT2.gydF4y2Ba
)gydF4y2Ba否则,结果是一个多边形使用gydF4y2Ba
PT1.gydF4y2Ba
和gydF4y2BaPT2.gydF4y2Ba
对角点。gydF4y2Ba
结果几何的SRID为0。gydF4y2Ba
ST_MakeEnvelope ()gydF4y2Ba
处理其参数,如本节简介中所述,其中包含以下内容:gydF4y2Ba如果论点不是gydF4y2Ba
点gydF4y2Ba
值,一个gydF4y2BaER_WRONG_ARGUMENTSgydF4y2Ba
发生错误。gydF4y2Ba一个gydF4y2Ba
er_gis_invalid_data.gydF4y2Ba
当两个点的任何座标值为无穷大或gydF4y2Ba南gydF4y2Ba
.gydF4y2Ba如果任何几何图形具有地理空间参考系统(SRS)的SRID值,则gydF4y2Ba
ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRSgydF4y2Ba
发生错误。gydF4y2Ba
mysql> SET @pt1 = ST_GeomFromText('POINT(0 0)');mysql> SET @pt2 = ST_GeomFromText('POINT(1 1)');mysql> SELECT ST_AsText(ST_MakeEnvelope(@pt1, @pt2));+----------------------------------------+ | ST_AsText (ST_MakeEnvelope (@pt1 @pt2 )) | +----------------------------------------+ | 多边形(0 0 1 0 1 1 0 1 0 0 )) | +----------------------------------------+gydF4y2Ba
ST_Simplify (gydF4y2Ba
ggydF4y2Ba
,gydF4y2Bamax_distancegydF4y2Ba
)gydF4y2Ba使用Douglas-Peucker算法简化几何体,返回相同类型的简化值。gydF4y2Ba
几何形状可以是任何几何类型,尽管道格拉斯 - PEUCKER算法实际上可能无法处理每个类型。通过将其组件逐一对简化算法赋予其组件来处理几何集合,并且返回的几何形状被放入几何系列中。gydF4y2Ba
的gydF4y2Ba
max_distancegydF4y2Ba
参数是一个顶点到要删除的其他分段的距离(以输入坐标为单位)。这个距离内的顶点将被移除。gydF4y2Ba根据提升。几何,几何可能会因为简化过程而变得无效,这个过程可能会创建自交。要检查结果的有效性,请将其传递给gydF4y2Ba
st_isvalid()gydF4y2Ba
.gydF4y2BaST_Simplify ()gydF4y2Ba
处理本节简介中的说明,处理其参数,其中:gydF4y2Ba如果是gydF4y2Ba
max_distancegydF4y2Ba
论点不是肯定的,或者是肯定的gydF4y2Ba南gydF4y2Ba
, 一个gydF4y2BaER_WRONG_ARGUMENTSgydF4y2Ba
发生错误。gydF4y2Ba
mysql> SET @g = ST_GeomFromText('LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3)');mysql> SELECT ST_AsText(ST_Simplify(@g, 0.5));+---------------------------------+ | ST_AsText (ST_Simplify (@g, 0.5 )) | +---------------------------------+ | LINESTRING (0 0 0 1 1 1 2 3 3 3 ) | +---------------------------------+ mysql >选择ST_AsText (ST_Simplify (@g, 1.0));+---------------------------------+ | ST_AsText (ST_Simplify (@g, 1.0 )) | +---------------------------------+ | LINESTRING (0 0 3 3 ) | +---------------------------------+gydF4y2Ba
st_validate(gydF4y2Ba
ggydF4y2Ba
)gydF4y2Ba根据OGC规范验证几何图形。一个几何图形可能在语法上格式良好(WKB值加上SRID),但在几何上无效。例如,这个多边形在几何上无效:gydF4y2Ba
多边形((0 0,0 0,0 0,0 0,0 0))gydF4y2Ba
ST_Validate ()gydF4y2Ba
如果它在句子上形成良好并且几何上有效,则返回几何图形,gydF4y2Ba零gydF4y2Ba
如果论证在语法上不是格式良好的,或者在几何上不是有效的,或者gydF4y2Ba零gydF4y2Ba
.gydF4y2BaST_Validate ()gydF4y2Ba
可用于过滤OUT无效的几何数据,虽然以成本为止。对于需要更精确的结果未受无效数据不受污染的应用程序的应用,此惩罚可能值得。gydF4y2Ba如果几何参数有效,则按原样返回,除非输入gydF4y2Ba
多边形gydF4y2Ba
或gydF4y2Ba多个多边形gydF4y2Ba
有顺时针环,这些环在检查有效性之前是反向的。如果几何图形有效,则返回带有反向环的值。gydF4y2Ba唯一有效的空几何形式以空几何收集值的形式表示。gydF4y2Ba
ST_Validate ()gydF4y2Ba
在这种情况下,直接返回它没有进一步检查。gydF4y2Ba从MySQL 8.0.13开始,gydF4y2Ba
ST_Validate ()gydF4y2Ba
处理其参数,如本节简介中所述,其中包含以下内容:gydF4y2Ba如果几何图形的地理SRS的经度或纬度超出范围,则会发生错误:gydF4y2Ba
如果经度值不在范围内(-180,180],则gydF4y2Ba
er_geometry_param_longitude_out_of_range.gydF4y2Ba
发生错误(gydF4y2BaER_LONGITUDE_OUT_OF_RANGEgydF4y2Ba
在MySQL 8.0.12之前)。gydF4y2Ba如果纬度值不在范围内[-90,90],则gydF4y2Ba
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGEgydF4y2Ba
发生错误(gydF4y2Baer_latitude_out_Of_Range.gydF4y2Ba
在MySQL 8.0.12之前)。gydF4y2Ba
范围以度数表示。由于浮点运算,确切的范围限制略有偏差。gydF4y2Ba
在MySQL 8.0.13之前,gydF4y2Ba
ST_Validate ()gydF4y2Ba
处理其参数,如本节简介中所述,其中包含以下内容:gydF4y2Ba如果几何形状没有句法形成,则返回值是gydF4y2Ba
零gydF4y2Ba
.一个gydF4y2Baer_gis_invalid_data.gydF4y2Ba
错误不会发生。gydF4y2Ba如果几何形状具有用于地理空间参考系统(SRS)的SRID值,则gydF4y2Ba
ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRSgydF4y2Ba
发生错误。gydF4y2Ba
mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0)');mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 0, 1 1)');mysql >选择ST_AsText (ST_Validate (@ls1));+------------------------------+ | ST_AsText (ST_Validate (@ls1 )) | +------------------------------+ | 零 | +------------------------------+ mysql >选择ST_AsText (ST_Validate (@ls2));+------------------------------+ | ST_AsText (ST_Validate (@ls2 )) | +------------------------------+ | LINESTRING (0 0 1 1 ) | +------------------------------+gydF4y2Ba