ST_Intersects

Definición

ST_Intersects devuelve 1 (Oracle) o t (PostgreSQL) si la intersección de dos ST_Geometries no resulta en un conjunto vacío; de lo contrario, devuelve 0 (Oracle) o f (PostgreSQL).

Sintaxis

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

Tipo de devolución

Booleano

Ejemplo

El jefe de bomberos quiere una lista de áreas sensibles dentro de un radio de un sitio de residuos peligrosos.

Las áreas sensibles se almacenan en la tabla sensitive_areas que se crea con la declaración CREATE TABLE que se muestra a continuación. La columna de zona, que se define como un polígono, almacena el contorno de cada una de las zonas sensibles.

Los sitios peligrosos se almacenan en la tabla hazardous_sites creada con la declaración CREATE TABLE que sigue. La columna de ubicación, que se define como un punto, almacena una ubicación que es el centro geográfico de cada sitio peligroso.

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 consulta devuelve una lista de áreas sensibles y sitios peligrosos, para las áreas sensibles que intersecan el radio de la zona de influencia de los sitios peligrosos.

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/11/2012