OpenGIS规范定义了以下函数来测试两个几何值之间的关系g1
而且g2
,使用精确的物体形状。除了距离函数返回距离值之外,返回值1和0分别表示true和false。
本节中的函数检测笛卡尔或地理空间参考系统(SRS)中的参数,并返回与SRS相适应的结果。
除非另有说明,本节中的函数将按以下方式处理其几何参数:
如果任何参数是
零
或者任何几何参数都是空的,返回值是零
.如果任何几何参数不是一个语法形式良好的几何,则一个
ER_GIS_INVALID_DATA
发生错误。如果任何几何参数在未定义的空间参考系统(SRS)中是一个语法形式良好的几何
ER_SRS_NOT_FOUND
发生错误。对于有多个几何参数的函数,如果这些参数不在同一个SRS中,则一个
ER_GIS_DIFFERENT_SRIDS
发生错误。如果任何几何参数在几何上无效,结果要么为真,要么为假(未定义哪个),要么发生错误。
对于地理SRS几何参数,如果任何参数具有超出范围的经度或纬度,将发生错误:
如果经度值不在(−180,180]的范围内,则输入
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
发生错误(ER_LONGITUDE_OUT_OF_RANGE
之前的MySQL 8.0.12)。如果纬度值不在[- 90,90]的范围内,则输入[- 90,90]
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
发生错误(ER_LATITUDE_OUT_OF_RANGE
之前的MySQL 8.0.12)。
所示范围以度为单位。如果SRS使用其他单位,则范围使用其单位中的对应值。由于浮点运算,精确的范围限制稍有偏差。
否则,返回值为非
零
.
本节中的一些函数允许使用unit参数指定返回值的长度单位。除非另有说明,函数将按照以下方式处理它们的单位参数:
对象中找到的单元是支持的
INFORMATION_SCHEMA
ST_UNITS_OF_MEASURE
表格看到第26.3.37节“信息模式ST_UNITS_OF_MEASURE表”.如果指定了一个单元,但MySQL不支持
ER_UNIT_NOT_FOUND
发生错误。如果指定了支持的线性单元,并且SRID为0,则一个
ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT
发生错误。如果指定了支持的线性单元,并且SRID不为0,则结果在该单元中。
如果未指定单元,则结果在几何图形的SRS单元中,无论是笛卡尔的还是地理的。目前,所有MySQL SRSs都用米表示。
这些对象形状函数可用于测试几何关系:
返回1或0以指示是否
g1
完全包含g2
.这将测试相反的关系为ST_Within ()
.ST_Contains ()
处理其参数,如本节介绍中所述。两个几何图形空间交叉如果它们的空间关系具有以下性质:
除非
g1
而且g2
都是1维的:g1
十字架g2
如果内部g2
和内部有什么共同点吗g1
,但g2
不覆盖整个内部g1
.如果两个
g1
而且g2
都是1维的:如果这些线在有限数量的点上相互交叉(也就是说,没有共同的线段,只有共同的点)。
这个函数返回1或0来表示是否
g1
空间穿越g2
.ST_Crosses ()
处理它的参数在本节的介绍中描述,除了返回值是零
对于这些附加条件:g1
是二维的(多边形
或多个多边形
).g2
的维数为1 (点
或多点
).
返回1或0以指示是否
g1
在空间上不相交(不相交)g2
.ST_Disjoint ()
处理其参数,如本节介绍中所述。返回之间的距离
g1
而且g2
,以几何参数的空间参考系统(SRS)的长度单位来衡量,或以可选的单位来衡量单位
参数。这个函数通过返回两个几何参数组件的所有组合中的最短距离来处理几何集合。
ST_Distance ()
处理其几何参数,如本节介绍中所述,但有以下例外:ST_Distance ()
检测地理(椭球)空间参考系统中的参数,并返回椭球上的大地距离。从MySQL 8.0.18开始,ST_Distance ()
支持所有几何类型的地理SRS参数的距离计算。在MySQL 8.0.18之前,唯一允许的地理参数类型是点
而且点
,或点
而且多点
(以任何论点顺序)。如果与地理SRS中的其他几何类型参数组合一起调用,则ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
发生错误。如果任何参数在几何上无效,要么结果是一个未定义的距离(也就是说,它可以是任何数字),要么发生错误。
如果中间或最终结果产生
南
或者一个负数,anER_GIS_INVALID_DATA
发生错误。
从MySQL 8.0.14开始,
ST_Distance ()
允许一个可选的单位
参数,该参数指定返回距离值的线性单位。ST_Distance ()
处理它单位
参数如本节介绍中所述。mysql> SET @g1 = ST_GeomFromText('POINT(1)');mysql> SET @g2 = ST_GeomFromText('POINT(2)');SELECT ST_Distance(@g1, @g2);+-----------------------+ | ST_Distance (@g1 @g2 ) | +-----------------------+ | 1.4142135623730951 | +-----------------------+ mysql >设置@g1 = ST_GeomFromText(“点(1 - 1)”,4326年);mysql> SET @g2 = ST_GeomFromText('POINT(2 2)', 4326);SELECT ST_Distance(@g1, @g2);+-----------------------+ | ST_Distance (@g1 @g2 ) | +-----------------------+ | 156874.3859490455 | +-----------------------+ mysql >选择ST_Distance (@g1 @g2,“米”);+--------------------------------+ | ST_Distance (@g1 @g2,”米 ') | +--------------------------------+ | 156874.3859490455 | +--------------------------------+ mysql >选择ST_Distance (@g1 @g2,“脚”);+-------------------------------+ | ST_Distance (@g1, @g2脚 ') | +-------------------------------+ | 514679.7439273146 | +-------------------------------+
有关在球面上计算距离的特殊情况,请参阅
ST_Distance_Sphere ()
函数。返回1或0以指示是否
g1
空间上等于g2
.ST_Equals ()
按照本节导言中描述的方式处理其参数,但不返回零
对于空的几何参数。SET @g1 = Point(1,1), @g2 = Point(2,2);SELECT ST_Equals(@g1, @g1), ST_Equals(@g1, @g2);+---------------------+---------------------+ | ST_Equals (@g1 @g1) | ST_Equals (@g1 @g2 ) | +---------------------+---------------------+ | 1 | 0 | +---------------------+---------------------+
ST_FrechetDistance (
g1
,g2
(,单位
])返回两个几何图形之间的离散的Fréchet距离,反映几何图形的相似程度。结果是用几何参数的空间参考系统(SRS)的长度单位测量的双精度数,或用的长度单位测量的
单位
参数,如果参数已经给出。这个函数实现了离散的Fréchet距离,这意味着它被限制为几何图形点之间的距离。例如,给定2
LineString
参数时,只考虑几何图形中显式提到的点。这些点之间的线段上的点不被考虑。ST_FrechetDistance ()
处理其几何参数,如本节介绍中所述,但有以下例外:几何图形可能有一个笛卡尔或地理SRS,但只有
LineString
值的支持。如果论点是在相同的笛卡尔或地理SRS,但都不是LineString
,一个ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS
或ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
错误发生,这取决于SRS类型。
ST_FrechetDistance ()
处理它的可选单位
参数如本节介绍中所述。mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0,0 5,5)');mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 1,0 6,3 3,5 6)');SELECT ST_FrechetDistance(@ls1, @ls2);+--------------------------------+ | ST_FrechetDistance (@ls1 @ls2 ) | +--------------------------------+ | 2.8284271247461903 | +--------------------------------+ mysql >设置@ls1 = ST_GeomFromText(“LINESTRING (0 0 0 5 5 5) ', 4326);mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 1,0 6,3 3,5 6)', 4326);SELECT ST_FrechetDistance(@ls1, @ls2);+--------------------------------+ | ST_FrechetDistance (@ls1 @ls2 ) | +--------------------------------+ | 313421.1999416798 | +--------------------------------+ mysql >选择ST_FrechetDistance (@ls1 @ls2,“脚”);+----------------------------------------+ | ST_FrechetDistance (@ls1 @ls2,脚 ') | +----------------------------------------+ | 1028284.7767115477 | +----------------------------------------+
此功能在MySQL 8.0.23中新增。
ST_HausdorffDistance (
g1
,g2
(,单位
])返回两个几何图形之间的离散Hausdorff距离,反映两个几何图形的相似程度。结果是用几何参数的空间参考系统(SRS)的长度单位测量的双精度数,或用的长度单位测量的
单位
参数,如果参数已经给出。这个函数实现了离散的Hausdorff距离,这意味着它被限制为几何图形点之间的距离。例如,给定2
LineString
参数时,只考虑几何图形中显式提到的点。这些点之间的线段上的点不被考虑。ST_HausdorffDistance ()
处理其几何参数,如本节介绍中所述,但有以下例外:如果几何参数在相同的笛卡尔或地理SRS中,但不在一个受支持的组合中,则
ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS
或ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
错误发生,这取决于SRS类型。支持以下组合:LineString
而且LineString
点
而且多点
LineString
而且MultiLineString
多点
而且多点
MultiLineString
而且MultiLineString
ST_HausdorffDistance ()
处理它的可选单位
参数如本节介绍中所述。mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0,0 5,5)');mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 1,0 6,3 3,5 6)');SELECT ST_HausdorffDistance(@ls1, @ls2);+----------------------------------+ | ST_HausdorffDistance (@ls1 @ls2 ) | +----------------------------------+ | 1 | +----------------------------------+ mysql >设置@ls1 = ST_GeomFromText(“LINESTRING (0 0 0 5 5 5) ', 4326);mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 1,0 6,3 3,5 6)', 4326);SELECT ST_HausdorffDistance(@ls1, @ls2);+----------------------------------+ | ST_HausdorffDistance (@ls1 @ls2 ) | +----------------------------------+ | 111319.49079326246 | +----------------------------------+ mysql >选择ST_HausdorffDistance (@ls1 @ls2,“脚”);+------------------------------------------+ | ST_HausdorffDistance (@ls1 @ls2,脚 ') | +------------------------------------------+ | 365221.4264870815 | +------------------------------------------+
此功能在MySQL 8.0.23中新增。
返回1或0以指示是否
g1
空间相交g2
.ST_Intersects ()
处理其参数,如本节介绍中所述。两个几何图形空间重叠如果它们相交,并且它们相交的结果是一个几何尺寸相同但不等于任何给定的几何。
这个函数返回1或0来表示是否
g1
空间重叠g2
.ST_Overlaps ()
处理它的参数在本节的介绍中描述,除了返回值是零
对于两个几何图形的尺寸不相等的附加条件。两个几何图形空间联系如果它们的内部不相交,但其中一个几何图形的边界与另一个几何图形的边界或内部相交。
这个函数返回1或0来表示是否
g1
空间触动g2
.ST_Touches ()
处理它的参数在本节的介绍中描述,除了返回值是零
对于两个几何图形的维数都为0的附加条件(点
或多点
).返回1或0以指示是否
g1
内空间g2
.这将测试相反的关系为ST_Contains ()
.ST_Within ()
处理其参数,如本节介绍中所述。