本节中的函数提供对几何值的便捷操作。
ST_Distance_Sphere(
g1
,g2
[,radius
])返回球体上两点和/或多点之间的最小球面距离,以米为单位,或者
NULL
任何几何参数是否为NULL
空。计算使用球形地球和可配置的半径。可选
radius
参数应以米为单位给出。如果省略,则默认半径为 6,370,986 米。如果参数存在但不是正数, 则会发生ER_WRONG_ARGUMENTS
错误。radius
几何参数应由指定(经度、纬度)坐标值的点组成:
经度和纬度分别是该点的第一坐标和第二坐标。
两个坐标都以度为单位。
经度值必须在 (-180, 180) 范围内。正值位于本初子午线以东。
纬度值必须在 [-90, 90] 范围内。正值位于赤道以北。
支持的参数组合有 (
Point
,Point
)、(Point
,MultiPoint
) 和 (MultiPoint
,Point
)。ER_GIS_UNSUPPORTED_ARGUMENT
其他组合会出错 。如果任何几何参数不是语法上格式正确的几何字节字符串,
ER_GIS_INVALID_DATA
则会发生错误。mysql> SET @pt1 = ST_GeomFromText('POINT(0 0)'); mysql> SET @pt2 = ST_GeomFromText('POINT(180 0)'); mysql> SELECT ST_Distance_Sphere(@pt1, @pt2); +--------------------------------+ | ST_Distance_Sphere(@pt1, @pt2) | +--------------------------------+ | 20015042.813723423 | +--------------------------------+
如果参数在语法上格式正确且几何上有效,则返回 1;如果参数在语法上格式不正确或在几何上无效,则返回 0。如果参数是
NULL
,则返回值为NULL
。几何有效性由 OGC 规范定义。唯一有效的空几何以空几何集合值的形式表示。
ST_IsValid()
在这种情况下返回 1。ST_IsValid()
仅适用于笛卡尔坐标系,并且需要 SRID 为 0 的几何参数ER_WRONG_ARGUMENTS
。否则会发生错误。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> SELECT ST_IsValid(@ls1); +------------------+ | ST_IsValid(@ls1) | +------------------+ | 0 | +------------------+ mysql> SELECT ST_IsValid(@ls2); +------------------+ | ST_IsValid(@ls2) | +------------------+ | 1 | +------------------+
返回围绕两点形成包络的矩形,如 a
Point
、LineString
或Polygon
。如果任何参数是NULL
,则返回值为NULL
。计算是使用笛卡尔坐标系完成的,而不是在球体、椭球体或地球上进行。
给定两个点
pt1
和pt2
,ST_MakeEnvelope()
在抽象平面上创建结果几何体,如下所示:如果
pt1
和pt2
相等,则结果为点pt1
。否则,如果是垂直或水平线段,则结果为线段 。
(
pt1
,pt2
)(
pt1
,pt2
)否则,结果是使用
pt1
和pt2
作为对角点的多边形。
结果几何的 SRID 为 0。
ST_MakeEnvelope()
需要Point
SRID 为 0 的几何参数ER_WRONG_ARGUMENTS
。否则会发生错误。如果任何参数不是语法上格式正确的几何字节字符串,或者如果两个点的任何坐标值是无穷大或
NaN
,ER_GIS_INVALID_DATA
则会发生错误。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)) | +----------------------------------------+ | POLYGON((0 0,1 0,1 1,0 1,0 0)) | +----------------------------------------+
使用 Douglas-Peucker 算法简化几何并返回相同类型的简化值。如果任何参数是
NULL
,则返回值为NULL
。几何可以是任何几何类型,尽管 Douglas-Peucker 算法实际上可能不会处理所有类型。通过将其组件一个一个地提供给简化算法来处理几何集合,并将返回的几何作为结果放入几何集合中。
max_distance
参数是顶点到要删除的其他线段的距离(以输入坐标为单位) 。简化线串此距离内的顶点将被删除。如果max_distance
参数不是正数,或者是NaN
,ER_WRONG_ARGUMENTS
则会发生错误。根据 Boost.Geometry,由于简化过程,几何图形可能会变得无效,并且该过程可能会创建自相交。要检查结果的有效性,将其传递给
ST_IsValid()
.如果几何参数不是语法上格式正确的几何字节字符串,
ER_GIS_INVALID_DATA
则会发生错误。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> SELECT ST_AsText(ST_Simplify(@g, 1.0)); +---------------------------------+ | ST_AsText(ST_Simplify(@g, 1.0)) | +---------------------------------+ | LINESTRING(0 0,3 3) | +---------------------------------+
根据 OGC 规范验证几何图形。几何可以在句法上格式正确(WKB 值加上 SRID)但在几何上无效。例如,这个多边形在几何上是无效的:
POLYGON((0 0, 0 0, 0 0, 0 0, 0 0))
ST_Validate()
如果参数在语法上格式正确并且在几何上有效,NULL
如果参数在语法上格式不正确或在几何上无效或者是 ,则返回几何NULL
。ST_Validate()
可用于过滤掉无效的几何数据,但需要付出一定的代价。对于需要不被无效数据污染的更精确结果的应用程序,这种损失可能是值得的。如果几何参数有效,则按原样返回,但如果输入
Polygon
或MultiPolygon
具有顺时针环,则在检查有效性之前将这些环反转。如果几何有效,则返回具有反转环的值。唯一有效的空几何以空几何集合值的形式表示。
ST_Validate()
在这种情况下直接返回它而无需进一步检查。ST_Validate()
仅适用于笛卡尔坐标系,并且需要 SRID 为 0 的几何参数ER_WRONG_ARGUMENTS
。否则会发生错误。mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0)'); mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 0, 1 1)'); mysql> SELECT ST_AsText(ST_Validate(@ls1)); +------------------------------+ | ST_AsText(ST_Validate(@ls1)) | +------------------------------+ | NULL | +------------------------------+ mysql> SELECT ST_AsText(ST_Validate(@ls2)); +------------------------------+ | ST_AsText(ST_Validate(@ls2)) | +------------------------------+ | LINESTRING(0 0,1 1) | +------------------------------+