Sesiones 5 y 6 · Análisis espacial
1 / 28 Portal del curso

Bases de Datos Espaciales · Sesiones 5 y 6

Análisis espacial

Unión, intersección, diferencia, diferencia simétrica y buffer: qué hacen, cómo se escriben en PostGIS y Oracle, y qué herramienta equivale en ArcGIS.

Universidad Militar Nueva Granada

Sesión 5 · 3 horas

Plan de la sesión 5: las operaciones

HoraTemaDónde
0:00 – 0:15Repaso y carga de la Parte AScripts de análisis
0:15 – 1:00Las cuatro operacionesSlides + Laboratorio del HTML
1:00 – 1:15Descanso
1:15 – 2:00Sintaxis en los tres entornos y la trampa de UnionSlides + pestaña Las cinco operaciones
2:00 – 2:50Ejemplos B.1 a B.6 en el municipioScripts + pestaña En el municipio
2:50 – 3:00Ejercicios 1 y 2Pestaña Ejercicios

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

La idea de hoy

geometría A

geometría B

geometría nueva

Por eso se pueden encadenar, medir y guardar como una capa nueva.

Parte 1

Las cuatro operaciones de superposición

En cada una, A es el cuadrado azul y B el círculo dorado. El resultado aparece relleno.

Operación 1 de 4

Unión · A ∪ B

Todo lo que está en A o en B. El borde común desaparece.

PostGIS

ST_Union(a, b)

Oracle

SDO_GEOM.SDO_UNION(a, b, 0.005)

ArcGIS

Edit → Merge, o Dissolve

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Operación 2 de 4

Intersección · A ∩ B

Solo lo que está en A y en B a la vez.

PostGIS

ST_Intersection(a, b)

Oracle

SDO_GEOM.SDO_INTERSECTION(a, b, 0.005)

ArcGIS

Pairwise Intersect o Pairwise Clip

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Operación 3 de 4

Diferencia · A − B no es igual a B − A

A − B

ST_Difference(a, b)

SDO_GEOM.SDO_DIFFERENCE(a, b, 0.005)

B − A

ST_Difference(b, a)

SDO_GEOM.SDO_DIFFERENCE(b, a, 0.005)

ArcGIS: Pairwise Erase, con la capa de entrada y la de borrado en el orden correcto.

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Operación 4 de 4

Diferencia simétrica · A △ B

Lo que está en uno solo de los dos. Es la unión menos la intersección.

PostGIS

ST_SymDifference(a, b)

Oracle

SDO_GEOM.SDO_XOR(a, b, 0.005)

ArcGIS

Symmetrical Difference

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Para comprobar

Las áreas siempre cuadran

área(A ∪ B) = área(A) + área(B) − área(A ∩ B)

área(A △ B) = área(A ∪ B) − área(A ∩ B)

Parque Lineal ∪ zona de inundación

1.792.815 m²

Intersección

682.185 m²

Diferencia simétrica

1.110.630 m²

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Resumen

Las operaciones en los tres entornos

OperaciónPostGISOracle SpatialArcGIS Pro
Unión de dosST_Union(a, b)SDO_GEOM.SDO_UNIONMerge · Dissolve
Unión de la tablaST_Union(geom) + GROUP BYSDO_AGGR_UNION(SDOAGGRTYPE(geom, tol))Dissolve
IntersecciónST_IntersectionSDO_GEOM.SDO_INTERSECTIONPairwise Intersect · Clip
DiferenciaST_DifferenceSDO_GEOM.SDO_DIFFERENCEPairwise Erase
Dif. simétricaST_SymDifferenceSDO_GEOM.SDO_XORSymmetrical Difference
BufferST_Buffer(g, d)SDO_GEOM.SDO_BUFFER(g, d, tol)Pairwise Buffer

En Oracle todas piden la tolerancia; en PostGIS ninguna.

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Laboratorio · 20 minutos

Abran analisis-espacial.html, pestaña Laboratorio

  • Arrastren A y B y prueben las cuatro operaciones.
  • Separen las figuras: ¿qué devuelve la intersección?
  • Pongan B dentro de A: ¿qué pasa con A − B? ¿Y con B − A?
  • Cambien B por una línea: ¿qué devuelve la intersección ahora?

Cuidado con los nombres

La herramienta "Union" de ArcGIS no funde

SQL: ST_Union

1 objeto

ArcGIS: herramienta Union

3 objetos con atributos de A y de B

La herramienta Union superpone: corta en solo A, solo B y A con B.

Para fundir, en ArcGIS se usa Dissolve o Merge.

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

En el municipio · ejemplo B.2

Unir toda la tabla: el límite municipal

PostgreSQL + PostGIS

SELECT
  ST_Union(geom) AS limite,
  ST_Area(ST_Union(geom)) / 1000000
    AS km2
FROM barrios;

Oracle Spatial

SELECT
  SDO_AGGR_UNION(
    SDOAGGRTYPE(b.geom, 0.005)) AS limite
FROM barrios b;

ArcGIS: Dissolve sobre barrios, sin campo de disolución.

6,6 km²

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

En el municipio · ejemplo B.3

Disolver por estrato: unión con GROUP BY

PostGIS

SELECT estrato,
  COUNT(*) AS barrios,
  SUM(poblacion) AS poblacion,
  ST_GeometryType(ST_Union(geom)) AS tipo
FROM barrios
GROUP BY estrato;

EstratoBarriosPoblaciónTipo
2315.800MultiPolygon
314.200Polygon
413.300Polygon
512.700Polygon

En el estrato 2, La Estación y Santa Lucía se funden, pero El Cedro queda aparte: el resultado tiene dos partes.

ArcGIS: Dissolve con campo estrato y estadística poblacion SUM.

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

En el municipio · ejemplo B.4

¿Qué parte de cada barrio se inunda?

PostgreSQL + PostGIS

SELECT b.nombre,
  ST_Area(ST_Intersection(b.geom, z.geom))
FROM barrios b
JOIN zonas_riesgo z
  ON ST_Intersects(b.geom, z.geom)
WHERE z.tipo = 'inundación';

Oracle Spatial

SELECT b.nombre, SDO_GEOM.SDO_AREA(
  SDO_GEOM.SDO_INTERSECTION(
    b.geom, z.geom, 0.005), 0.005)
FROM barrios b, zonas_riesgo z
WHERE z.tipo = 'inundación'
  AND SDO_ANYINTERACT(b.geom, z.geom) = 'TRUE';

Resultado

Altos del Río · 49,7 %

El Cedro · 36,3 %

Centro · 19,1 %

La Estación · 4,4 %

ArcGIS: Pairwise Intersect de barrios con zonas_riesgo; cada pedazo trae los atributos de los dos.

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

En el municipio · ejemplo B.5

¿Cuánto de cada barrio queda a salvo?

PostGIS

SELECT b.nombre,
  ST_Area(b.geom) AS total,
  ST_Area(ST_Difference(b.geom, z.geom))
    AS segura
FROM barrios b, zonas_riesgo z
WHERE z.nombre = 'Inundación Río Frío';

Oracle

SDO_GEOM.SDO_DIFFERENCE(b.geom, z.geom, 0.005)

BarrioÁrea segura (m²)
Altos del Río1.206.424
Centro388.235
El Cedro458.824
La Estación573.739
Los Pinos1.200.000
Santa Lucía1.200.000

ArcGIS: Pairwise Erase con barrios como entrada y la zona de inundación como capa de borrado.

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Buena práctica

Primero filtrar, después calcular

PASO 1 · rápido, usa el índice

¿Se tocan?

ST_Intersects
SDO_ANYINTERACT

PASO 2 · costoso, forma exacta

¿Qué parte comparten?

ST_Intersection
SDO_GEOM.SDO_INTERSECTION

Con miles de predios, calcular la intersección de todos contra todos tarda horas. Filtrando primero, solo se calcula lo que de verdad se cruza.

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Ejercicios de la sesión 5

Para cerrar la sesión

1

El límite municipal: unir todos los barrios y calcular el área en km² y el perímetro en km.

2

Unir dos barrios: Santa Lucía y Los Pinos. ¿El área de la unión es la suma de las dos? ¿Qué pasaría si se traslaparan?

Para quien termine antes: ejercicios 3 a 7 (estratos, parques por barrio, porcentaje en riesgo, Los Pinos sin la zona de remoción, parque lineal).

Sesión 6 · 3 horas

Buffer y análisis encadenados

HoraTemaDónde
0:00 – 0:40Buffer: distancia, segmentos, extremosSlides + Laboratorio
0:40 – 1:00Guardar resultados como tablaEjemplos B.7 a B.9
1:00 – 1:15Descanso
1:15 – 2:45Ejercicios 3 a 10, en parejasPestaña Ejercicios
2:45 – 3:00AutoevaluaciónPestaña Autoevaluación

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Buffer

La zona de influencia: todo lo que está a d metros o menos

Punto → círculo

área de influencia de un colegio

Línea → franja

ronda hídrica de un río

Polígono → más grande

franja alrededor de un parque

ST_Buffer(geom, 30) · SDO_GEOM.SDO_BUFFER(geom, 30, 0.005) · Pairwise Buffer

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Buffer

Los detalles que cambian el resultado

Segmentos por cuarto

PostGIS aproxima la curva: 'quad_segs=8' por defecto. Oracle usa arcos verdaderos.

Extremos de línea

'endcap=round|flat|square' en PostGIS. Oracle siempre redondea.

Distancia negativa

Encoge el polígono. Sobre puntos y líneas da vacío.

Por eso un buffer de 400 m da áreas un poco distintas en PostGIS y en Oracle: menos del 1 %.

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

En el municipio · ejemplo B.7

La ronda hídrica de 30 metros

PostgreSQL + PostGIS

SELECT nombre,
  ST_Area(ST_Buffer(geom, 30))
FROM rios;

-- las dos rondas unidas
SELECT ST_Area(ST_Union(
  ST_Buffer(geom, 30)))
FROM rios;

Oracle Spatial

SELECT r.nombre,
  SDO_GEOM.SDO_AREA(
    SDO_GEOM.SDO_BUFFER(
      r.geom, 30, 0.005), 0.005)
FROM rios r;

PostGIS

Río Frío · 214.886 m²

Quebrada La Honda · 46.490 m²

Unidas · 258.008 m²

ArcGIS: Pairwise Buffer de 30 m; con Dissolve all las dos rondas quedan en una sola.

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

En el municipio · ejemplo B.8

Sumar áreas no es lo mismo que unirlas

Buffers de 400 m alrededor de los colegios oficiales:

Suma de áreas

2.497.156 m²

Área de la unión

2.469.020 m²

La diferencia es lo que se traslapa: en la suma se cuenta dos veces, en la unión una sola.

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Ejemplo B.9

Guardar el resultado como una capa nueva

PostgreSQL + PostGIS

CREATE TABLE ronda_hidrica AS
SELECT id, nombre,
  ST_Buffer(geom, 30)
    ::geometry(Polygon, 9377) AS geom
FROM rios;

CREATE INDEX ronda_hidrica_gix
  ON ronda_hidrica USING GIST (geom);

Oracle Spatial

CREATE TABLE ronda_hidrica AS
SELECT r.id, r.nombre,
  SDO_GEOM.SDO_ARC_DENSIFY(
    SDO_GEOM.SDO_BUFFER(r.geom, 30, 0.005),
    0.005, 'arc_tolerance=0.05') AS geom
FROM rios r;
-- + metadatos + índice R-tree

ArcGIS: todas las herramientas de geoprocesamiento escriben su resultado como una feature class nueva (Output Feature Class).

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Encadenar operaciones · ejercicio 10

¿Dónde se puede construir?

UNIÓN

Municipio = todos los barrios

−

UNIÓN

Zonas de riesgo

−

BUFFER + UNIÓN

Ronda hídrica de 30 m

=

DIFERENCIA

Zona apta

482,4 ha

aptas para construir

73,1 %

del municipio

Así se construye un mapa de aptitud: cada restricción se resta del área disponible.

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Para verificar

Pestaña En el municipio del HTML

  • Cada botón B.1 a B.9 dibuja el resultado del ejemplo sobre el mapa.
  • Abajo aparece el mismo código de los scripts, en los tres entornos.
  • Comparen el número del mapa con el que les dio su consulta.

Ejercicios de la sesión 6 · en parejas

Uno en PostGIS, otro en Oracle, y comparan

3 Población por estrato

4 Parques en cada barrio

5 Porcentaje de cada barrio en riesgo

6 Los Pinos sin la zona de remoción

7 Parque lineal contra zona de inundación

8 Cobertura de los colegios oficiales

9 Barrios en la ronda hídrica

10 Zona apta para construir

Para llevarse

Tres ideas de las sesiones 5 y 6

Geometría nueva

Cada operación devuelve una forma que se puede medir, encadenar o guardar.

Ojo con los nombres

ST_Union funde; la herramienta Union de ArcGIS superpone. Oracle llama XOR a la diferencia simétrica.

Unir antes de medir

Si los resultados se traslapan, la suma de áreas sobreestima.

Próxima sesión: relaciones espaciales, las preguntas de sí o no entre geometrías.

Bases de Datos Espaciales · UMNG · Sesiones 5 y 6

Universidad Militar Nueva Granada

Flechas del teclado o deslizar el dedo para avanzar.