¿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.
- 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.
¿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é
| Tarea | La IA (MCP de ArcGIS Pro) | Yo |
|---|---|---|
| Datos | Procesó el ráster y los municipios en mi proyecto abierto | Decidí zona, épocas y umbral |
| Mapas | Creó los mapas, el layout y los exportó a PNG y PDF | Definí paleta, mensaje y qué se ve |
| Video | Lo rendericé fuera de Pro con Python y ffmpeg, porque Pro no anima | Guion, ritmo y cierre |
| Revisión | Re-exportó cuando corregí etiquetas y textos | Verifiqué 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.
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.
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.
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.
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íodo | Hectáreas construidas | Aumento (ha) | Crecimiento anual |
|---|---|---|---|
| 1975–1990 | 7.236 → 8.035 | +799 | 0,7 % |
| 1990–2000 | 8.035 → 11.750 | +3.715 | 3,9 % |
| 2000–2015 | 11.750 → 14.404 | +2.654 | 1,4 % |
| 2015–2020 | 14.404 → 14.834 | +430 | 0,6 % |
El pico fue entre 1990 y 2000. Y el crecimiento no fue igual en todas partes:
| Zona | 1975 (ha) | 2020 (ha) | Veces | Anual |
|---|---|---|---|---|
| Valles del Tuy | 933 | 3.143 | ×3,37 | 2,7 % |
| Guarenas-Guatire | 555 | 1.466 | ×2,64 | 2,2 % |
| Altos Mirandinos | 748 | 1.712 | ×2,29 | 1,9 % |
| Litoral (La Guaira) | 690 | 1.371 | ×1,99 | 1,5 % |
| Valle de Caracas | 4.289 | 6.998 | ×1,63 | 1,1 % |
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.
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 WhatsAppPreguntas 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.





