Nom

ST_LineCrossingDirection — Renvoie un nombre indiquant le comportement de croisement de deux LineStrings

Synopsis

integer ST_LineCrossingDirection(geometry linestringA, geometry linestringB);

Description

En ayant 2 lignes en entrée, renvoie un nombre entier entre -3 et 3 indiquant le type de croisement qui existe entre elles. 0 indique qu'il n'y a pas de croisement. Cette fonction n'est prise en charge que pour les LINESTRINGs.

Le numéro de croisement a la signification suivante :

  • 0 : LIGNE SANS CROISEMENT

  • -1 : LIGNE CROISÉE À GAUCHE

  • -1 : LIGNE CROISÉE À DROITE

  • -2 : LIGNE MULTICROISEMENT EXTRÉMITÉ GAUCHE

  • -2 : LIGNE MULTICROISEMENT EXTRÉMITÉ DROITE

  • -3 : LIGNE MULTICROISEMENT FIN IDENTIQUE AU PREMIER GAUCHE

  • -3 : LIGNE MULTICROISEMENT FIN IDENTIQUE AU PREMIER DROITE

Disponibilité : 1.4

Exemples

Exemple: LIGNE CROISEE A GAUCHE et LIGNE CROISEE A DROITE

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;
Export de raster
A_cross_B | B_cross_A
-----------+-----------
        -1 |         1
Figure
Geometry figure for visual-st-linecrossingdirection-01

Exemple: LIGNE MULTICROISEMENT FIN IDENTIQUE AU PREMIER GAUCHE et LIGNE MULTICROISEMENT FIN IDENTIQUE AU PREMIER DROITE

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;
Export de raster
A_cross_B | B_cross_A
-----------+-----------
         3 |        -3
Figure
Geometry figure for visual-st-linecrossingdirection-02

Exemple: LIGNE MULTICROISEMENT EXTRÉMITÉ GAUCHE et LIGNE MULTICROISEMENT EXTRÉMITÉ DROITE

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;
Export de raster
A_cross_B | B_cross_A
-----------+-----------
        -2 |         2
Figure
Geometry figure for visual-st-linecrossingdirection-03

Exemple: Trouve toutes les rues qui se croisent

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;

Voir aussi

ST_Crosses