Name

ST_LineCrossingDirection — Gibt eine Zahl zurück, die das Kreuzungsverhalten von zwei LineStrings angibt

Synopsis

integer ST_LineCrossingDirection(geometry linestringA, geometry linestringB);

Beschreibung

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 LINESTRINGs 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

Beispiele

Beispiel: LINIENKREUZUNG LINKS und LINIENKREUZUNG RECHTS

Blau: Linie A; Grün: Linie 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

Beispiel: LINE MULTICROSS END SAME FIRST LEFT und LINE MULTICROSS END SAME FIRST RIGHT

Blau: Linie A; Grün: Linie 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

Beispiel: LINE MULTICROSS END LEFT und LINE MULTICROSS END RIGHT

Blau: Linie A; Grün: Linie 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

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;

Siehe auch

ST_Crosses