ST_Crosses

Definición

ST_Crosses toma dos objetos de ST_Geometry y devuelve 1 (Oracle y SQLite) o t (PostgreSQL) si su intersección genera un objeto de geometría cuya dimensión es un número menor que la dimensión máxima de los objetos de origen. El objeto de intersección debe contener puntos interiores en ambas geometrías de origen y no están a la altura de cualquiera de los objetos de origen. De lo contrario, devuelve 0 (Oracle y SQLite) o f (PostgreSQL).

Sintaxis

sde.st_crosses (geometry1 sde.st_geometry, geometry2 sde.st_geometry)

Oracle y PostgreSQL

sde.st_crosses (geometry1 sde.st_geometry, geometry2 sde.st_geometry)

SQLite

st_crosses (geometry1 geometryblob, geometry2 geometryblob)

Tipo de devolución

Booleano

Ejemplo

El gobierno del condado está considerando un nuevo reglamento que establece que todas las instalaciones de almacenamiento de residuos peligrosos en el condado pueden no estar en un radio específico de alguna vía navegable. El administrador de SIG de condado tiene una representación precisa de los ríos y arroyos almacenados como cadenas de texto de líneas en la tabla de vías navegables, pero solo tiene una ubicación de punto único para cada una de las instalaciones de almacenamiento de residuos peligrosos.

Para determinar si debe alertar al supervisor de condado de cualquier instalación existente que violaría el reglamento propuesto, el administrador de SIG tendrá que crear zonas de influencia para las ubicaciones hazardous_sites con el fin de ver si algún río o arroyo cruza los polígonos de zona de influencia. El predicado de cruzada compara los puntos hazardous_sites en zona de influencia con las vías navegables, devolviendo solo los registros en los que las vías navegables cruzan sobre el radio regulado propuesto del país.

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

Temas relacionados

5/10/2014