ST_Intersects

Définition

ST_Intersects renvoie 1 (Oracle) ou t (PostgreSQL) si l'intersection de deux objets ST_Geometry n'est pas un ensemble vide. Dans le cas contraire, la fonction renvoie 0 (Oracle) ou f (PostgreSQL).

Syntaxe

sde.st_intersects (g1 sde.st_geometry, g2 sde.st_geometry)

Type de retour

Booléen

Exemple

Le capitaine des pompiers demande une liste des zones sensibles situées dans un rayon donné d'un site de dépôt de déchets dangereux.

Les zones sensibles sont stockées dans la table sensitive_areas, créée à l'aide de l'instruction CREATE TABLE ci-dessous. La colonne zone, définie avec le type polygone, stocke les contours respectifs des zones sensibles.

Les sites à risque sont stockés dans la table hazardous_sites créée à l'aide de l'instruction CREATE TABLE ci-dessous. La colonne location, définie avec le type point, stocke un emplacement qui est le centre géographique de chaque site à risque.

CREATE TABLE sensitive_areas (id integer, 
                               zone sde.st_geometry); 

CREATE TABLE hazardous_sites (id integer, 
                              location sde.st_geometry); 

INSERT INTO sensitive_areas VALUES (
1,
sde.st_polygon ('polygon ((20 30, 30 30, 30 40, 20 40, 20 30))', 0)
);

INSERT INTO sensitive_areas VALUES (
2,
sde.st_polygon ('polygon ((30 30, 30 50, 50 50, 50 30, 30 30))', 0)
);

INSERT INTO sensitive_areas VALUES (
3,
sde.st_polygon ('polygon ((40 40, 40 60, 60 60, 60 40, 40 40))', 0)
);

INSERT INTO hazardous_sites VALUES (
4,
sde.st_point ('point (60 60)', 0)
);

INSERT INTO hazardous_sites VALUES (
5,
sde.st_point ('point (30 30)', 0)
);

La requête renvoie une liste de zones sensibles et de sites à risque pour les zones sensibles qui recoupent le rayon de zone tampon des sites à risque.

Oracle

SELECT sa.id SA_ID, hs.id HS_ID
FROM SENSITIVE_AREAS sa, HAZARDOUS_SITES hs
WHERE sde.st_intersects (sde.st_buffer (hs.location, .1), sa.zone) = 1
ORDER BY sa.id;

SA_ID      HS_ID

    1          5
    2          5
    3          4

PostgreSQL

SELECT sa.id AS SA_ID, hs.id AS HS_ID
FROM sensitive_areas sa, hazardous_sites hs
WHERE sde.st_intersects (sde.st_buffer (hs.location, .1), sa.zone) = 't'
ORDER BY sa.id;

sa_id     hs_id

    1          5
    2          5
    3          4

7/10/2012