Définition
ST_Crosses accepte deux objets ST_Geometry et renvoie 1 (Oracle et SQLite) 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 et SQLite) ou f (PostgreSQL).
Syntaxe
sde.st_crosses (geometry1 sde.st_geometry, geometry2 sde.st_geometry)
Oracle et PostgreSQL
sde.st_crosses (geometry1 sde.st_geometry, geometry2 sde.st_geometry)
SQLite
st_crosses (geometry1 geometryblob, geometry2 geometryblob)
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.
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
--Define tables and insert values.
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)', 4326)
);
INSERT INTO waterways VALUES (
3,
'Keshequa',
sde.st_geometry ('linestring (20 20, 60 60)', 4326)
);
INSERT INTO hazardous_sites VALUES (
4,
'StorIt',
sde.st_point ('point (60 60)', 4326)
);
INSERT INTO hazardous_sites VALUES (
5,
'Glowing Pools',
sde.st_point ('point (30 30)', 4326)
);
--Buffer hazardous waste sites and find if any buffers cross a waterway.
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 StorIt
Keshequa Glowing Pools
PostgreSQL
--Define tables and insert values.
CREATE TABLE waterways (
id serial,
name varchar(128),
water sde.st_geometry
);
CREATE TABLE hazardous_sites (
site_id integer,
name varchar(40),
location sde.st_geometry
);
INSERT INTO waterways (name, water) VALUES (
'Zanja',
sde.st_geometry ('linestring (40 50, 50 40)', 4326)
);
INSERT INTO waterways (name, water) VALUES (
'Keshequa',
sde.st_geometry ('linestring (20 20, 60 60)', 4326)
);
INSERT INTO hazardous_sites (name, location) VALUES (
'StorIt',
sde.st_point ('point (60 60)', 4326)
);
INSERT INTO hazardous_sites (name, location) VALUES (
'Glowing Pools',
sde.st_point ('point (30 30)', 4326)
);
--Buffer hazardous waste sites and find if any buffers cross a waterway.
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 StorIt
Keshequa Glowing Pools
SQLite
--Define tables and insert values.
CREATE TABLE waterways (
id integer primary key autoincrement not null,
name varchar(128)
);
SELECT AddGeometryColumn(
NULL,
'waterways',
'water',
4326,
'linestring',
'xy',
'null'
);
CREATE TABLE hazardous_sites (
site_id integer primary key autoincrement not null,
name varchar(40)
);
SELECT AddGeometryColumn(
NULL,
'hazardous_sites',
'location',
4326,
'point',
'xy',
'null'
);
INSERT INTO waterways (name, water) VALUES (
'Zanja',
st_geometry ('linestring (40 50, 50 40)', 4326)
);
INSERT INTO waterways (name, water) VALUES (
'Keshequa',
st_geometry ('linestring (20 20, 60 60)', 4326)
);
INSERT INTO hazardous_sites (name, location) VALUES (
'StorIt',
st_point ('point (60 60)', 4326)
);
INSERT INTO hazardous_sites (name, location) VALUES (
'Glowing Pools',
st_point ('point (30 30)', 4326)
);
--Buffer hazardous waste sites and find if any buffers cross a waterway.
SELECT DISTINCT (ww.name) AS "River or stream", hs.name AS "Hazardous sites"
FROM waterways ww, hazardous_sites hs
WHERE st_crosses (st_buffer (hs.location, .01), ww.water) = 1;
River or stream Hazardous sites
Keshequa StorIt
Keshequa Glowing Pools