ST_LineCrossingDirection — Gibt eine Zahl zurück, die das Kreuzungsverhalten von zwei LineStrings angibt
integer ST_LineCrossingDirection(
geometry linestringA, geometry linestringB)
;
Bei zwei Linienstrings wird eine ganze Zahl zwischen -3 und 3 zurückgegeben, die angibt, welche Art von Kreuzungsverhalten zwischen ihnen besteht. 0 bedeutet keine Kreuzung. Dies wird nur für LINESTRING
s unterstützt.
Die Kreuzungsnummer hat die folgende Bedeutung:
0: LINIE KEIN KREUZ
-1: LINIENKREUZ LINKS
1: LINIE QUER RECHTS
-2: LINIE MULTIKREUZ ENDE LINKS
2: LINIE MULTICROSS ENDE RECHTS
-3: LINIE MULTIKREUZ ENDE GLEICH ERSTE LINKS
3: LINIE MULTICROSS ENDE GLEICH ERSTE RECHTS
Verfügbarkeit: 1.4
Beispiel: LINIENKREUZUNG LINKS und LINIENKREUZUNG RECHTS
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
Beispiel: LINE MULTICROSS END SAME FIRST LEFT und LINE MULTICROSS END SAME FIRST RIGHT
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
Beispiel: LINE MULTICROSS END LEFT und LINE MULTICROSS END RIGHT
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
Beispiel: Findet alle Straßen, die sich kreuzen
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;