ST_Crosses

Définition

ST_Crosses accepte deux objets ST_Geometry et renvoie 1 (Oracle) ou t (PostgreSQL) si leur intersection résulte en un objet geometry dont la dimension est inférieure d'une unité à la dimension maximale des objets source. L'objet d'intersection doit contenir des points intérieurs aux deux géométries source et qui ne sont pas égaux à l'un des objets source. Dans le cas contraire, la fonction retourne 0 (Oracle) ou f (PostgreSQL).

Syntaxe

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

Type de retour

Booléen

Exemple

Le conseil municipal envisage un nouveau règlement énonçant que les dépôts de déchets dangereux dans la municipalité ne doivent pas se trouver à une distance spécifique des cours d'eau. Le responsable SIG municipal dispose d'une représentation exacte des fleuves et des rivières stockée sous forme d'objets linestring dans la table des cours d'eau, mais il ne dispose que d'une localisation ponctuelle pour chacun des dépôts de déchets dangereux.

CREATE TABLE waterways (id integer, 
name varchar(128), 
water sde.st_geometry); 

CREATE TABLE hazardous_sites (site_id integer, 
name varchar(40),
location sde.st_geometry);

INSERT INTO waterways VALUES (
2,
'Zanja', 
sde.st_geometry ('linestring (40 50, 50 40)', 0)
);

INSERT INTO waterways VALUES (
3, 
'Keshequa',
sde.st_geometry ('linestring (20 20, 60 60)', 0)
);

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

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

Pour déterminer s'il doit signaler au responsable de l'aménagement du territoire l'existence de dépôts enfreignant le règlement envisagé, le responsable SIG doit créer des zones tampon autour des localisations hazardous_sites pour déterminer si des rivières ou ruisseaux recoupent ces zones tampon. Le prédicat cross compare les points bufférisés hazardous_sites avec les cours d'eau et ne renvoie que les enregistrements où le cours d'eau recoupe le rayon réglementaire proposé par la municipalité.

Oracle

SELECT UNIQUE (ww.name) "River or stream", hs.name "Hazardous sites"
FROM WATERWAYS ww, HAZARDOUS_SITES hs 
WHERE sde.st_crosses (sde.st_buffer (hs.location, .01), ww.water) = 1;

River or stream				Hazardous sites

Keshequa						Bad Water

PostgreSQL

SELECT DISTINCT (ww.name) AS "River or stream", hs.name AS "Hazardous sites"
FROM waterways ww, hazardous_sites hs 
WHERE sde.st_crosses (sde.st_buffer (hs.location, .01), ww.water) = 't';

River or stream			   Hazardous sites

Keshequa					   Bad Water

3/6/2012