ST_LineCrossingDirection — Returnerar ett tal som anger korsningsbeteendet för två LineStrings
integer ST_LineCrossingDirection(
geometry linestringA, geometry linestringB)
;
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: LINE CROSS LEFT och LINE CROSS RIGHT
Blå: Linje A; Grön: Linje 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
Exempel: LINJE MULTICROSS SLUT SAME FÖRSTA VÄNSTER och LINJE MULTICROSS SLUT SAME FÖRSTA HÖGER
Blå: Linje A; Grön: Linje 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
Exempel: LINE MULTICROSS END LEFT och LINE MULTICROSS END RIGHT
Blå: Linje A; Grön: Linje 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
Exempel: Hittar alla gator som korsar
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;