名稱

ST_LineCrossingDirection — 返回一個數字,指示兩個 LineString 的交叉行為

概要

integer ST_LineCrossingDirection(geometry linestringA, geometry linestringB);

描述

給定兩個線串,返回一個介於 -3 和 3 之間的整數,指示它們之間存在的交叉行為類型。0 表示沒有交叉。此函數僅支援 LINESTRING

交叉數字的含義如下

  • 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

範例: 尋找所有交叉的街道

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;

另請參閱

ST_Crosses