Definition
ST_Crosses wählt zwei ST_Geometry-Objekte aus und gibt den Wert "1" (Oracle und SQLite) oder "t" (PostgreSQL) zurück, wenn deren Schnittmenge eine Geometrie ergibt, deren Dimension der höchsten Dimension der Quellobjekte minus eins entspricht. Das Schnittpunktobjekt muss Punkte enthalten, die sich innerhalb der beiden Quellgeometrien befinden und mit keinem der beiden Quellobjekte identisch sind. Andernfalls ist die Rückgabe "0" (Oracle und SQLite) oder "f" (PostgreSQL).
Syntax
sde.st_crosses (geometry1 sde.st_geometry, geometry2 sde.st_geometry)
Oracle und PostgreSQL
sde.st_crosses (geometry1 sde.st_geometry, geometry2 sde.st_geometry)
SQLite
st_crosses (geometry1 geometryblob, geometry2 geometryblob)
Rückgabetyp
Boolesch
Beispiel
Die Kreisverwaltung erwägt eine neue Vorschrift, die besagt, dass alle Sondermülldeponien im Kreis sich nicht innerhalb eines bestimmten Radius von Wasserläufen befinden dürfen. Der GIS-Fachmann des Kreises hat eine genaue Darstellung fließender Gewässer in der Tabelle "waterways" als Linestrings gespeichert, hat aber für jede der Sondermülldeponien nur einen einzelnen Punkt zur Verfügung.
Um zu bestimmen, ob er den Kreisumweltbeauftragten über vorhandene Deponien informieren muss, die gegen die vorgeschlagene Vorschrift verstoßen, muss der GIS-Fachmann die Sondermüllstandorte mit einem Puffer versehen, um zu prüfen, ob fließende Gewässer die Pufferpolygone schneiden. Die Eigenschaft ST_Crosses vergleicht die gepufferten Sondermüllstandorte mit Wasserläufen und gibt nur die Datensätze zurück, bei denen der Wasserlauf den vorgeschlagenen vorgeschriebenen Radius des Landkreises schneidet.
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