Namn

ST_LineCrossingDirection — Returnerar ett tal som anger korsningsbeteendet för två LineStrings

Synopsis

integer ST_LineCrossingDirection(geometry linestringA, geometry linestringB);

Beskrivning

Givet två linestringsar returnerar ett heltal mellan -3 och 3 som indikerar vilken typ av korsningsbeteende som finns mellan dem. 0 indikerar ingen korsning. Detta stöds endast för LINESTRINGs.

Korsningsnumret har följande innebörd:

  • 0: LINJE UTAN KORS

  • -1: LINJE KORS VÄNSTER

  • 1: LINJE KORS HÖGER

  • -2: LINJE MULTIKORS SLUT VÄNSTER

  • 2: LINJE MULTIKORS SLUT HÖGER

  • -3: LINJE FLERKORS SLUT SAMMA FÖRSTA VÄNSTER

  • 3: LINJE MULTIKORS SLUT SAMMA FÖRSTA HÖGER

Tillgänglighet: 1.4

Exempel

Exempel: LINE CROSS LEFT och LINE CROSS RIGHT

Code
SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
  'LINESTRING(25 169,89 114,40 70,86 43)'::geometry As lineA,
  'LINESTRING (20 140,71 74,161 53)'::geometry As lineB
  ) As foo;
Rasterutdata
A_cross_B | B_cross_A
-----------+-----------
        -1 |         1
Figure
Geometry figure for visual-st-linecrossingdirection-01

Exempel: LINJE MULTICROSS SLUT SAME FÖRSTA VÄNSTER och LINJE MULTICROSS SLUT SAME FÖRSTA HÖGER

Code
SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
 'LINESTRING(25 169,89 114,40 70,86 43)'::geometry As lineA,
 'LINESTRING(171 154,20 140,71 74,161 53)'::geometry As lineB
  ) As foo;
Rasterutdata
A_cross_B | B_cross_A
-----------+-----------
         3 |        -3
Figure
Geometry figure for visual-st-linecrossingdirection-02

Exempel: LINE MULTICROSS END LEFT och LINE MULTICROSS END RIGHT

Code
SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
  'LINESTRING(25 169,89 114,40 70,86 43)'::geometry As lineA,
  'LINESTRING(5 90,71 74,20 140,171 154)'::geometry As lineB
  ) As foo;
Rasterutdata
A_cross_B | B_cross_A
-----------+-----------
        -2 |         2
Figure
Geometry figure for visual-st-linecrossingdirection-03

Exempel: Hittar alla gator som korsar

Code

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;

Se även

ST_Crosses