Cómo medir la expansión urbana de Caracas con GHSL y ArcGIS Pro (1975–2020) #30DayMapChallenge 2026

0

¿Cuánto creció Caracas en 45 años y hacia dónde? Medí la expansión urbana de Caracas entre 1975 y 2020 con superficie construida del GHSL, Google Earth Engine y ArcGIS Pro, y la IA conectada por MCP me ayudó a armar los mapas. Esta guía te cuenta cómo lo hice, con el código para que lo repitas en tu ciudad.


MAPA-DIA-09


En esta guía aprenderás
  • A bajar la superficie construida de 5 épocas (1975–2020) con un script corto de Earth Engine.
  • A clasificar en ArcGIS Pro cuándo se construyó cada zona y a calcular hectáreas y tasas de crecimiento.
  • A convertir el resultado en un mapa estático y en un video de serie temporal.

TABLERO-EXPANSION-URBANA
Figura 1. Resultado final: la mancha urbana de Caracas por épocas, con hectáreas y crecimiento por zona. Elaboración DALPGIS.


¿Qué es el GHSL y por qué sirve para esto?

El GHSL (Global Human Settlement Layer) es un conjunto de datos del Centro Común de Investigación (JRC) de la Comisión Europea. Para cada píxel de 100 m dice cuántos metros cuadrados están construidos, en épocas que van desde 1975. Como todas las épocas se calculan con el mismo método, se pueden comparar entre sí. Puedes ver la documentación oficial en el portal del GHSL y el conjunto de datos en el catálogo de Earth Engine.

Caracas es un buen caso porque está encajonada en un valle estrecho: no puede crecer a lo ancho. La pregunta es hacia dónde se fue la ciudad cuando el valle se llenó.


Quién hizo qué

TareaLa IA (MCP de ArcGIS Pro)Yo
DatosProcesó el ráster y los municipios en mi proyecto abiertoDecidí zona, épocas y umbral
MapasCreó los mapas, el layout y los exportó a PNG y PDFDefiní paleta, mensaje y qué se ve
VideoLo rendericé fuera de Pro con Python y ffmpeg, porque Pro no animaGuion, ritmo y cierre
RevisiónRe-exportó cuando corregí etiquetas y textosVerifiqué las cifras y los límites

Paso a paso


Paso 1. Bajar los datos con Earth Engine

Define un rectángulo que cubra Caracas, Guarenas-Guatire, Los Teques, el litoral y los Valles del Tuy. El script toma 5 épocas (1975, 1990, 2000, 2015 y 2020), suma las hectáreas por municipio y exporta un GeoTIFF de 5 bandas y un CSV. Pégalo completo en el Code Editor, pulsa Run y luego RUN en las dos tareas de la pestaña Tasks.

// =====================================================================
// DALPGIS · #30DayMapChallenge 2026 · Día 09 · Urbano-Rural
// Caracas por décadas: dónde creció la mancha urbana (GHSL, superficie construida)
// Pegar completo en https://code.earthengine.google.com y pulsar Run.
// Luego, en la pestaña "Tasks" (arriba a la derecha) pulsar RUN en las 2 tareas.
// =====================================================================

// Zona de estudio: Caracas + Guarenas-Guatire + Valles del Tuy + Los Teques + litoral
var aoi = ee.Geometry.Rectangle([-67.15, 10.05, -66.35, 10.65]);

// GHSL (JRC) superficie construida, 100 m. Cada píxel = m² construidos (0-10.000)
var ghsl = ee.ImageCollection('JRC/GHSL/P2023A/GHS_BUILT_S');
var anios = [1975, 1990, 2000, 2015, 2020];

var bandas = anios.map(function (y) {
  var img = ghsl.filter(ee.Filter.calendarRange(y, y, 'year')).first();
  return img.select('built_surface').rename('b' + y);
});
var proj = ghsl.first().projection();                 // proyección nativa (para sumar bien)
var pila = ee.Image.cat(bandas);

// 1) Tabla: hectáreas construidas por municipio y año (suma en proyección nativa)
var mun = ee.FeatureCollection('FAO/GAUL/2015/level2')
  .filter(ee.Filter.eq('ADM0_NAME', 'Venezuela'))
  .filterBounds(aoi);

var tabla = pila.reduceRegions({
  collection: mun, reducer: ee.Reducer.sum(), crs: proj, scale: 100
}).map(function (f) {
  var o = {ADM1_NAME: f.get('ADM1_NAME'), ADM2_NAME: f.get('ADM2_NAME')};
  anios.forEach(function (y) { o['ha_' + y] = ee.Number(f.get('b' + y)).divide(10000); });
  return ee.Feature(null, o);
});

// 2) Total del área de estudio (impreso en la consola)
var total = pila.reduceRegion({
  reducer: ee.Reducer.sum(), geometry: aoi, crs: proj, scale: 100, maxPixels: 1e9
});
anios.forEach(function (y) {
  print('Hectáreas construidas ' + y, ee.Number(total.get('b' + y)).divide(10000));
});
print('Municipios incluidos', tabla.size());

// 3) Vista previa rápida
Map.centerObject(aoi, 10);
var pal = ['#04153A', '#0E3282', '#5B8FD6', '#E5C00B'];
anios.forEach(function (y, i) {
  Map.addLayer(pila.select('b' + y).selfMask(), {min: 0, max: 10000, palette: pal}, 'Construido ' + y, i === 4);
});
Map.addLayer(aoi, {color: 'E5C00B'}, 'Zona de estudio', false);

// 4) Exportaciones a Google Drive (2 tareas)
Export.image.toDrive({
  image: pila.toUint16().clip(aoi), description: 'D09_GHSL_CARACAS_5_EPOCAS',
  folder: 'DALPGIS_D09', fileNamePrefix: 'D09_GHSL_CARACAS_5_EPOCAS',
  region: aoi, crs: 'EPSG:32619', scale: 100, maxPixels: 1e9, fileFormat: 'GeoTIFF'
});
Export.table.toDrive({
  collection: tabla, description: 'D09_HECTAREAS_POR_MUNICIPIO',
  folder: 'DALPGIS_D09', fileNamePrefix: 'D09_HECTAREAS_POR_MUNICIPIO', fileFormat: 'CSV'
});

Dos detalles que importan. Las sumas de hectáreas se calculan en la proyección nativa del GHSL, que conserva áreas. El ráster se exporta en EPSG:32619 (WGS 84 / UTM 19N) a 100 m para dibujar el mapa sin deformar.

Si el script falla. Mi primera versión usaba un método que no existe en Earth Engine (setMulti) y daba error en la línea de la tabla. La versión de arriba ya está corregida: arma cada fila con ee.Feature(null, ...).


Paso 2. Clasificar cuándo se construyó cada zona

En ArcGIS Pro cargué el GeoTIFF. La clave es dejar de mirar «cuánto hay construido» y mirar «en qué época apareció». Cada píxel recibe la primera época en la que pasa un umbral: aquí usé 20 % del píxel construido (2.000 m² de 10.000). Así, un solo ráster cuenta toda la historia, y los de cada año salen de filtrarlo.

import arcpy
from arcpy.sa import Con
arcpy.CheckOutExtension("Spatial")

tif = r"D:\PROY_RETO_MAPAS\DIA_09\D09_GHSL_CARACAS_5_EPOCAS.tif"
TH = 2000                                   # 2.000 m² de 10.000 = 20 % del píxel construido

# una banda por época: 1975, 1990, 2000, 2015, 2020
b = [arcpy.sa.ExtractBand(tif, [i]) for i in range(1, 6)]

# clase = primera época en la que el píxel pasa el umbral (0 = nunca)
cls = Con(b[0] >= TH, 1, Con(b[1] >= TH, 2, Con(b[2] >= TH, 3,
          Con(b[3] >= TH, 4, Con(b[4] >= TH, 5, 0)))))
cls.save(r"D:\PROY_RETO_MAPAS\DIA_09\cls_todas.tif")

# un ráster por año del mapa: solo lo construido hasta esa época
for k in range(1, 6):
    Con(cls <= k, cls, 0).save(r"D:\PROY_RETO_MAPAS\DIA_09\cls_hasta_%d.tif" % k)

Luego les puse una paleta por época, de más antigua a más reciente: azul, celeste, claro, dorado y blanco. Lo dorado concentra el crecimiento de 2001–2015.

MAPA-2020-EXPANSION-URBANA
Figura 2. Cuándo se construyó cada zona. Los colores más fríos son lo más antiguo; el dorado y el blanco, lo reciente. CRS: EPSG:32619. Fuente: GHSL (JRC); límites SIGOT. Elaboración DALPGIS.


Paso 3. Hectáreas y tasas por zona

Para contar la historia hacen falta números. Agrupé los municipios en cinco zonas y sumé las hectáreas del CSV. Este script lo hace y es el que usé para validar las cifras del mapa:

import csv

ZONAS = {
    "Valle de Caracas":    ["Libertador", "Chacao", "Baruta", "El Hatillo", "Sucre"],
    "Altos Mirandinos":    ["Guaicaipuro", "Los Salias", "Carrizal"],
    "Guarenas-Guatire":    ["Plaza", "Zamora"],
    "Valles del Tuy":      ["Lander", "Paz Castillo", "Independencia",
                            "Cristobal Rojas", "Simon Bolivar", "Urdaneta"],
    "Litoral (La Guaira)": ["Vargas"],
}
AÑOS = [1975, 1990, 2000, 2015, 2020]

filas = list(csv.DictReader(open("D09_HECTAREAS_POR_MUNICIPIO.csv", encoding="utf-8")))
for zona, munis in ZONAS.items():
    # "Sucre" existe en varios estados: solo cuenta el de Miranda
    sel = [f for f in filas if f["ADM2_NAME"] in munis
           and not (f["ADM2_NAME"] == "Sucre" and f["ADM1_NAME"] != "Miranda")]
    ha = {a: sum(float(f["ha_%d" % a]) for f in sel) for a in AÑOS}
    veces = ha[2020] / ha[1975]
    tasa = (veces ** (1 / 45) - 1) * 100
    print(f"{zona:20s} {ha[1975]:7.0f} -> {ha[2020]:7.0f} ha   x{veces:.2f}   {tasa:.1f} %/año")

El resultado tiene que coincidir con lo que sumaste en el ráster: en mi caso, las cinco zonas suman casi lo mismo que el total de la zona de estudio, con una diferencia de hasta 1 % por municipios que quedan fuera del recorte.


Paso 4. El mapa estático y el tablero

Con los mapas por época ya creados, la IA armó el layout 16×9: un mapa grande de 2020, cuatro mapas más pequeños (1975, 1990, 2000 y 2015), las barras por zona, el gráfico de hectáreas, la leyenda, las fuentes y el CRS. Exportó PNG y PDF en versión oscura y clara. Cada mapa usa la misma extensión y el mismo tamaño para que se puedan comparar a simple vista.


MAPA-SERIE-TEMPORAL
Figura 3. La serie temporal: la ciudad se llena del valle hacia afuera. Fuente: GHSL (JRC). Elaboración DALPGIS.


Paso 5. El video de la serie temporal

ArcGIS Pro no anima, así que dibujé los fotogramas con Python (Pillow y NumPy) a partir del mismo ráster de clases y los uní con ffmpeg. Cada época aparece con una transición suave: los píxeles nuevos entran brillantes y se asientan en su color, mientras el contador de hectáreas y las barras por zona avanzan. La música es original, generada con código, así que no tiene derechos de autor. El video dura 32 segundos y tiene un cierre con el resumen.


FOTOGRAMA-DE-VIDEO
Figura 4. Un fotograma del video: contador de hectáreas, barras por zona y línea de tiempo. 

Resultados

En la zona de estudio, la superficie construida pasó de 7.236 ha en 1975 a 14.834 ha en 2020: ×2,05 en 45 años. El ritmo no fue parejo:

PeríodoHectáreas construidasAumento (ha)Crecimiento anual
1975–19907.236 → 8.035+7990,7 %
1990–20008.035 → 11.750+3.7153,9 %
2000–201511.750 → 14.404+2.6541,4 %
2015–202014.404 → 14.834+4300,6 %

El pico fue entre 1990 y 2000. Y el crecimiento no fue igual en todas partes:

Zona1975 (ha)2020 (ha)VecesAnual
Valles del Tuy9333.143×3,372,7 %
Guarenas-Guatire5551.466×2,642,2 %
Altos Mirandinos7481.712×2,291,9 %
Litoral (La Guaira)6901.371×1,991,5 %
Valle de Caracas4.2896.998×1,631,1 %

CRECIMIENTO-POR-ZONA
Figura 5. Veces que creció la superficie construida de cada zona entre 1975 y 2020. Elaboración DALPGIS.

La historia que cuenta el mapa: el Valle de Caracas, que ya era la zona más grande, fue la que menos creció en proporción. El crecimiento se fue hacia afuera, sobre todo a los Valles del Tuy y a Guarenas-Guatire.

💡 Un truco para el mapa. Pintar por «época de primera construcción» en vez de por «cantidad construida» hace que un solo mapa cuente la historia. Los mapas por año salen de filtrar ese mismo ráster, así que todos son consistentes.


Límites del análisis

  • Calidad desigual entre épocas. Los cortes de 1975 y 1990 salen de imágenes de menor calidad. Parte del salto de 1990–2000 puede ser mejor detección y no solo crecimiento real.
  • Resolución de 100 m. Sirve para tendencias y para comparar zonas, no para medir lotes ni edificios.
  • El umbral importa. Con 20 % de píxel construido la mancha se ve limpia; con 10 % se ve más gruesa. Las hectáreas del texto son la suma de superficie edificada y no dependen del umbral.
  • Zona de estudio recortada. Algunos municipios se salen del rectángulo; por eso las zonas suman hasta 1 % menos que el total del ráster.


Dónde usarlo

  • Catastro y ordenamiento: ver dónde crece la ciudad y dónde conviene planificar.
  • Servicios públicos: anticipar demanda de agua, vialidad o energía en las zonas que más crecen. Tengo un ejemplo del lado energético en la entrada del Día 08.
  • Inmobiliario y seguros: entender hacia dónde se desplaza la ciudad y qué zonas se vuelven urbanas.
  • Ambiental: cuantificar cuánto suelo agrícola o verde se convierte a construido.

Si quieres ver otro mapa de la misma serie, mira el Día 07: Venezuela de noche.


¿Quieres este análisis para tu ciudad?

Medimos la expansión urbana de cualquier municipio y la convertimos en mapas y cifras claras. La primera asesoría es gratis.

Reclama tu asesoría GRATIS Escríbenos por WhatsApp

Preguntas frecuentes

¿Qué es el GHSL y por qué sirve para medir la expansión urbana?

Es la Capa Global de Asentamientos Humanos del JRC (Comisión Europea). Entrega la superficie construida por píxel de 100 m en varias épocas, desde 1975, a partir de imágenes satelitales. Eso permite comparar la huella de una ciudad en el tiempo con el mismo método.

¿Necesito saber programar para repetir el análisis?

Poco. El script de Earth Engine se pega y se ejecuta tal cual; lo único que cambias es el rectángulo de la zona de estudio. En ArcGIS Pro usé la IA conectada por MCP para ejecutar el código, pero puedes pegar los fragmentos en la ventana de Python.

¿Los datos sirven para otras ciudades de Venezuela?

Sí. Cambias la zona de estudio y los municipios que agrupas. El conjunto de datos es global, así que funciona igual para Valencia, Maracaibo, Barquisimeto o cualquier otra ciudad.

¿Qué tan exactas son las hectáreas?

Sirven para ver tendencias y comparar zonas, no para medir lotes. El GHSL tiene 100 m de resolución y los cortes de 1975 y 1990 salen de imágenes de menor calidad, así que parte del salto de 1990–2000 puede ser mejor detección y no solo crecimiento real.

¿Pueden hacer este análisis para mi ciudad o mi municipio?

Sí. En DALPGIS hacemos estudios de expansión urbana a medida para catastro, ordenamiento y planificación. Puedes pedir una asesoría gratis para contarnos tu caso.

Sigue la serie completa en GeoHacks Insight y entra gratis a la Comunidad DALPGIS.


Entradas que pueden interesarte

Sin comentarios

Posts Populares

¡Bienvenido al Curso Básico de ArcGIS Pro Desde Cero!

¡Bienvenido al Curso Básico de ArcGIS Pro Desde Cero!

Hola, soy Daniel León, ingeniero civil y experto en Siste…

NDVI con ArcGIS: Guía completa para el monitoreo de cultivos

NDVI con ArcGIS: Guía completa para el monitoreo de cultivos

¿Te gustaría saber qué es el NDVI y cómo puedes usarlo con…

ArcGIS Pro: ¿Cuánto cuesta y dónde adquirirlo?

ArcGIS Pro: ¿Cuánto cuesta y dónde adquirirlo?

ArcGIS Pro es una potente herramienta de software diseñada…

ArcGIS Pro: Asignar simbología a rasters con archivo .CLR paso a paso (Colormap)

ArcGIS Pro: Asignar simbología a rasters con archivo .CLR paso a paso (Colormap)

1) Verifica que tu raster sea compatible con .clr Los archi…