Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
测试某几何值是否跨越另一个几何值。
geometry-expression.ST_Crosses(geo2)
geo2
ST_Geometry
要与 geometry-expression 进行比较的另一个几何值。
BIT 如果 geometry-expression 跨越 geo2,则返回 1,否则返回 0。如果 geometry-expression 为表面或多表面,或者 geo2 为点或多点,则返回 NULL。
当 geometry-expression 和 geo2 均为曲线或多曲线时,如果它们的内部存在一个或多个交点,则它们彼此跨越。如果因相交而产生曲线或多曲线,则几何之间不发生跨越。如果所有交点都是边界点,则几何之间不发生跨越。
当 geometry-expression 的维度低于 geo2 的维度时,如果部分 geometry-expression 位于 geo2 内部,部分 geometry-expression 位于 geo2 外部,则 geometry-expression 跨越 geo2。
更确切地说,当以下条件为 TRUE 时,geometry-expression.ST_Crosses( geo2 ) 返回 1:
( geometry-expression.ST_Dimension() = 1 AND geo2.ST_Dimension() = 1 AND geometry-expression.ST_Relate( geo2, '0********' ) = 1 ) OR( geometry-expression.ST_Dimension() < geo2.ST_Dimension() AND geometry-expression.ST_Relate( geo2, 'T*T******' ) = 1 )
如果 geometry-expression 包含圆弧线串,则将这些圆弧线串内插到线串中。
此方法无法用于球形地球空间参照系中的几何。
SQL/MM (ISO/IEC 13249-3: 2006) 5.1.29
以下示例返回结果 1。
1
SELECT NEW ST_LineString( 'LineString( 0 0, 2 2 )' ) .ST_Crosses( NEW ST_LineString( 'LineString( 0 2, 2 0 )' ) )
以下示例中,由于两条线的内部不相交(唯一的交集位于第一个线串的边界),因此将返回结果 [0]。
0
SELECT NEW ST_LineString( 'LineString( 0 1, 2 1 )' ) .ST_Crosses( NEW ST_LineString( 'LineString( 0 0, 2 0 )' ) )
由于第一个几何为表面,所以以下示例返回 NULL。
SELECT NEW ST_Polygon( 'Polygon(( 0 0, 0 1, 1 0, 0 0))' ) .ST_Crosses( NEW ST_LineString( 'LineString( 0 0, 2 0 )' ) )