ST_LineCrossingDirection — 返回一个数字,该数字指示两个LineStrings的交叉行为。
integer
ST_LineCrossingDirection
(
geometry
linestringA
, geometry
linestringB
)
;
给定的两个行字符串返回一个介于-3和3之间的整数,指示它们之间存在哪种交叉行为。0表示无交叉。仅在以下情况下才支持
LINESTRING
s.
交叉号的含义如下:
0:无交叉线
-1:线条向左交叉
1:线向右交叉
-2:线条多点左端
2:直线多点向右结束
-3:线条多点结束相同的第一个左侧
3:线多点结束相同的第一个右侧
可用性:1.4
示例: 左交叉直线和右交叉直线
蓝色:A行;绿色:B行
SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
ST_GeomFromText('LINESTRING (20 140, 71 74, 161 53)') As lineB
) As foo;
A_cross_B | B_cross_A
-----------+-----------
-1 | 1
示例: 行多点结束相同的第一个左侧和行多点结束相同的第一个右
蓝色:A行;绿色:B行
SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
ST_GeomFromText('LINESTRING(171 154,20 140,71 74,161 53)') As lineB
) As foo;
A_cross_B | B_cross_A
-----------+-----------
3 | -3
示例: 线多点左端和线多点右端
蓝色:A行;绿色:B行
SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
ST_GeomFromText('LINESTRING(5 90, 71 74, 20 140, 171 154)') As lineB
) As foo;
A_cross_B | B_cross_A
-----------+-----------
-2 | 2
示例: 线多点左端和线多点右端
蓝色:A行;绿色:B行
SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
ST_GeomFromText('LINESTRING (171 154, 20 140, 71 74, 2.99 90.16)') As lineB
) As foo;
A_cross_B | B_cross_A
-----------+-----------
2 | -2
SELECT s1.gid, s2.gid, ST_LineCrossingDirection(s1.geom, s2.geom)
FROM streets s1 CROSS JOIN streets s2
ON (s1.gid != s2.gid AND s1.geom && s2.geom )
WHERE ST_LineCrossingDirection(s1.geom, s2.geom) > 0;