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]范围内,则表示
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
发生错误(ER_LATITUDE_OUT_OF_RANGE
MySQL 8.0.12之前)。
所示的范围是度数。如果SRS使用另一个单元,则该范围使用其单元中的相应值。由于浮点算术,确切范围限制略微偏离。
否则,返回值为non-
空值
。
本节中的某些函数允许一个单位参数,该参数指定返回值的长度单位。除非另有说明,否则函数处理其单位参数,如下所示:
中找到的单元表示支持
INFORMATION_SCHEMA
st_units_of_measure.
桌子。看第26.3.37节“Information_schema st_units_of_measure表”。如果指定了一个单元,但MySQL不支持,则使用
ER_UNIT_NOT_FOUND
发生错误。如果指定了一个支持的线性单元,并且SRID为0,则
ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT
发生错误。如果指定了支持的线性单元并且SRID不是0,则结果在该单元中。
如果没有指定单位,则结果以几何的SRS为单位,无论是笛卡尔坐标还是地理坐标。目前,所有MySQL sss都用米表示。
这些对象形状功能可用于测试几何关系:
返回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
是尺寸2(多边形
或多聚底
)。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.
发生错误。如果任何参数都是无效的,则结果是未定义的距离(即,它可以是任何数字),或者发生错误。
如果中间或最终结果会产生
南
或负数,一个ER_GIS_INVALID_DATA
发生错误。
截至MySQL 8.0.14,
ST_Distance ()
允许一个可选的单位
参数,指定返回距离值的线性单位。ST_Distance ()
处理它单位
参数在本节简介中描述。mysql> set @ g1 = st_geom fromtext('point(1 1)');mysql> set @ g2 = st_geomfromtext('point(2 2)');mysql>选择st_distance(@ g1,@ g2);+ --------------------- + |st_distance(@ g1,@ g2)|+ --------------------- + |1.4142135623730951 |+ -------------------- + mysql> set @ g1 = st_geom fromtext('point(1 1)',4326);mysql> set @ g2 = st_geom fromtext('point(2 2)',4326);mysql>选择st_distance(@ g1,@ g2); +-----------------------+ | ST_Distance(@g1, @g2) | +-----------------------+ | 156874.3859490455 | +-----------------------+ mysql> SELECT ST_Distance(@g1, @g2, 'metre'); +--------------------------------+ | ST_Distance(@g1, @g2, 'metre') | +--------------------------------+ | 156874.3859490455 | +--------------------------------+ mysql> SELECT ST_Distance(@g1, @g2, 'foot'); +-------------------------------+ | ST_Distance(@g1, @g2, 'foot') | +-------------------------------+ | 514679.7439273146 | +-------------------------------+
对于球上距离计算的特殊情况,请参阅
st_distance_sphere()
函数。返回1或0表示是否
g1
空间等于g2
。ST_Equals ()
像本节介绍中描述的那样处理它的参数,除非它不返回空值
对于空的几何参数。mysql> set @ g1 = point(1,1),@ g2 = point(2,2);mysql>选择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距离,这意味着它仅限于几何点之间的距离。例如,给予两个
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_geom fromtext('linestring(0 0,05,5 5)');mysql> set @ ls2 = st_geom fromtext('linestring(0 1,06,3 3,5 6)');MySQL>选择ST_FRECHETDISTANCE(@ LS1,@ LS2);+ ---------------------------- + |st_frechetdistance(@ ls1,@ ls2)|+ ---------------------------- + |2.8284271247461903 |+ ----------------------------- + mysql> set @ ls1 = st_geomfromtext('linestring(0 0,0 5,5 5)',4326);MySQL> SET @ LS2 = ST_GEOMFROMTEXT('LINESTRING(0 1,06,3 3,5 6)',4326);MySQL>选择ST_FRECHETDISTANCE(@ LS1,@ LS2); +--------------------------------+ | ST_FrechetDistance(@ls1, @ls2) | +--------------------------------+ | 313421.1999416798 | +--------------------------------+ mysql> SELECT ST_FrechetDistance(@ls1, @ls2, 'foot'); +----------------------------------------+ | ST_FrechetDistance(@ls1, @ls2, 'foot') | +----------------------------------------+ | 1028284.7767115477 | +----------------------------------------+
这个函数是在MySQL 8.0.23中添加的。
ST_HausdorffDistance (
g1
那g2
[,单位
])返回两个几何图形之间的离散Hausdorff距离,反映几何图形的相似程度。结果是在几何参数的空间参考系统(SRS)的长度单元中测量的双精度数字,或者在
单位
如果给出了这个参数。这个函数实现了离散的Hausdorff距离,这意味着它被限制为几何点之间的距离。例如,给予两个
LineString
参数,只有在几何中明确提到的点被考虑。不考虑这些点之间的线段上的点。ST_HausdorffDistance ()
处理几何参数如本节介绍中所述,但有以下例外:如果几何参数在同一笛卡尔或地理SRS中,但不是在支持的组合中,
er_not_implemented_for_cartesian_srs.
或er_not_implemented_for_geographic_srs.
错误发生,这取决于SRS类型。支持这些组合:LineString
和LineString
点
和多点
LineString
和多重原因
多点
和多点
多重原因
和多重原因
ST_HausdorffDistance ()
处理它的可选单位
参数在本节简介中描述。mysql> set @ ls1 = st_geom fromtext('linestring(0 0,05,5 5)');mysql> set @ ls2 = st_geom fromtext('linestring(0 1,06,3 3,5 6)');mysql>选择st_hausdorffdistance(@ ls1,@ ls2);+ ------------------------------- + |st_hausdorffdistance(@ ls1,@ ls2)|+ ------------------------------- + |1 |+ ------------------------------- + MySQL> SET @ LS1 = ST_GEOMFROMTEXT('LINESTRING(0 0,0 5,5 5)',4326);MySQL> SET @ LS2 = ST_GEOMFROMTEXT('LINESTRING(0 1,06,3 3,5 6)',4326);mysql>选择st_hausdorffdistance(@ ls1,@ ls2); +----------------------------------+ | ST_HausdorffDistance(@ls1, @ls2) | +----------------------------------+ | 111319.49079326246 | +----------------------------------+ mysql> SELECT ST_HausdorffDistance(@ls1, @ls2, 'foot'); +------------------------------------------+ | ST_HausdorffDistance(@ls1, @ls2, 'foot') | +------------------------------------------+ | 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()
如本节介绍中所述处理其参数。