Definición
ST_Union devuelve un objeto de geometría que es la combinación de dos objetos de origen.
Sintaxis
Oracle y PostgreSQL
sde.st_union (geometry1 sde.st_geometry, geometry2 sde.st_geometry)
SQLite
st_union (geometry1 geometryblob, geometry2 geometryblob)
Tipo de devolución
Oracle y PostgreSQL
ST_Geometry
SQLite
Geometryblob
Ejemplo
La tabla sensitive_areas almacena los Id. de las instituciones amenazadas junto con la columna de forma, que almacena las geometrías de polígono de las instituciones.
La tabla hazardous_sites almacena la identidad de los sitios en la id de la columna, mientras que la ubicación geográfica de cada sitio se almacena en la columna de punto de sitio.
La función ST_Buffer genera una zona de influencia que rodea los sitios de residuos peligrosos. La función ST_Union genera polígonos desde la unión de los sitios de residuos peligrosos de la zona de influencia y polígonos de área sensible. La función ST_Area devuelve el área de estos polígonos.
Oracle
CREATE TABLE sensitive_areas (
id integer,
shape sde.st_geometry
);
CREATE TABLE hazardous_sites (
id integer,
site sde.st_geometry
);
INSERT INTO SENSITIVE_AREAS VALUES (
1,
sde.st_geometry ('polygon ((20 30, 30 30, 30 40, 20 40, 20 30))', 4326)
);
INSERT INTO SENSITIVE_AREAS VALUES (
2,
sde.st_geometry ('polygon ((30 30, 30 50, 50 50, 50 30, 30 30))', 4326)
);
INSERT INTO SENSITIVE_AREAS VALUES (
3,
sde.st_geometry ('polygon ((40 40, 40 60, 60 60, 60 40, 40 40))', 4326)
);
INSERT INTO HAZARDOUS_SITES VALUES (
4,
sde.st_geometry ('point (60 60)', 4326)
);
INSERT INTO HAZARDOUS_SITES VALUES (
5,
sde.st_geometry ('point (30 30)', 4326)
);
SELECT sa.id SA_ID, hs.id HS_ID,
sde.st_area (sde.st_union (sde.st_buffer (hs.site, .01), sa.shape)) UNION_AREA
FROM HAZARDOUS_SITES hs, SENSITIVE_AREAS sa;
SA_ID HS_ID UNION_AREA
1 4 100.000313935011
2 4 400.000313935011
3 4 400.000235451258
1 5 100.000235451258
2 5 400.000235451258
3 5 400.000313935011
PostgreSQL
CREATE TABLE sensitive_areas (
id integer,
shape sde.st_geometry
);
CREATE TABLE hazardous_sites (
id integer,
site sde.st_geometry
);
INSERT INTO SENSITIVE_AREAS VALUES (
1,
sde.st_geometry ('polygon ((20 30, 30 30, 30 40, 20 40, 20 30))', 4326)
);
INSERT INTO SENSITIVE_AREAS VALUES (
2,
sde.st_geometry ('polygon ((30 30, 30 50, 50 50, 50 30, 30 30))', 4326)
);
INSERT INTO SENSITIVE_AREAS VALUES (
3,
sde.st_geometry ('polygon ((40 40, 40 60, 60 60, 60 40, 40 40))', 4326)
);
INSERT INTO HAZARDOUS_SITES VALUES (
4,
sde.st_geometry ('point (60 60)', 4326)
);
INSERT INTO HAZARDOUS_SITES VALUES (
5,
sde.st_geometry ('point (30 30)', 4326)
);
SELECT sa.id AS SA_ID, hs.id AS HS_ID,
sde.st_area (sde.st_union (sde.st_buffer (hs.site, .01), sa.shape)) AS UNION_AREA
FROM hazardous_sites hs, sensitive_areas sa;
sa_id hs_id union_area
1 4 100.000313935011
2 4 400.000313935011
3 4 400.000235451258
1 5 100.000235451258
2 5 400.000235451258
3 5 400.000313935011
SQLite
CREATE TABLE sensitive_areas (
id integer
);
SELECT AddGeometryColumn(
NULL,
'sensitive_areas',
'shape',
4326,
'polygon',
'xy',
'null'
);
CREATE TABLE hazardous_sites (
id integer
);
SELECT AddGeometryColumn(
NULL,
'hazardous_sites',
'site',
4326,
'point',
'xy',
'null'
);
INSERT INTO sensitive_areas VALUES (
10,
st_geometry ('polygon ((20 30, 30 30, 30 40, 20 40, 20 30))', 4326)
);
INSERT INTO sensitive_areas VALUES (
11,
st_geometry ('polygon ((30 30, 30 50, 50 50, 50 30, 30 30))', 4326)
);
INSERT INTO sensitive_areas VALUES (
12,
st_geometry ('polygon ((40 40, 40 60, 60 60, 60 40, 40 40))', 4326)
);
INSERT INTO hazardous_sites VALUES (
40,
st_geometry ('point (60 60)', 4326)
);
INSERT INTO hazardous_sites VALUES (
41,
st_geometry ('point (30 30)', 4326)
);
SELECT sa.id AS "sa_id", hs.id AS "hs_id",
st_area (st_union (st_buffer (hs.site, .01), sa.shape)) AS "union"
FROM hazardous_sites hs, sensitive_areas sa;
sa_id hs_id union
1 4 100.000313935011
2 4 400.000313935011
3 4 400.000235451258
1 5 100.000235451258
2 5 400.000235451258
3 5 400.000313935011