15 de diciembre de 20256 min de lectura

GeoAI LATAM, Calidad de datos, ISO 19157, MAUP, Colombia

Datos geoespaciales en LATAM: criterio antes que código

Cómo evaluar datos (especial Colombia) con un chequeo mínimo para que tu GeoAI no aprenda 'basura con forma de mapa'.

En este post 6 secciones
Datos geoespaciales en LATAM: criterio antes que código

Ilustración hecha para este post: no muestra datos reales ni una salida del trabajo.

Actualizado en septiembre de 2026: el recuadro de búsqueda del código caía en Satipo (Perú); lo moví a Bogotá y la Sabana. También cité la norma de calidad en su edición vigente, ISO 19157-1, con sus elementos actuales, agregué un aviso sobre el filtro de nubes, quité un diagrama que en el celular no se leía y enlacé dos posts que escribí después.

¿De verdad el problema en LATAM es "conseguir datos"? No. El problema es usar datos correctos de forma incorrecta.

En Colombia tenemos la cartografía oficial del IGAC, datos geoestadísticos con continuidad temporal, las series ambientales del IDEAM, imágenes de satélite y portales con buenos servicios. Aun así, muchos proyectos fallan por una mezcla explosiva: unidad espacial mal elegida, escalas incompatibles, calidad no validada y linaje desconocido.

El marco de los datos

En información geográfica, la calidad cabe en una expresión inglesa, fitness for use (aptitud para el uso), que dicha como pregunta queda así: ¿este dato sirve para este propósito?

ISO 19157-1 organiza cómo describir, evaluar y reportar la calidad de un dato, y la reparte en elementos: completitud, consistencia lógica, exactitud posicional, calidad temporal y calidad temática.

Y ISO 19115-1 empuja lo que casi nadie mira hasta que explota: los metadatos y el linaje (qué, quién, cómo, cuándo se generó).

Tener capas es el punto de partida. Antes de cruzarlas tienes que poder responder qué significan, qué tan precisas son y de dónde salieron.

La regla práctica: cuatro preguntas antes de usar cualquier capa

1. Propósito: ¿por qué existe este dato?

Un dato puede existir por mandato legal, para estadística, para gestión ambiental o para monitoreo, y ese origen define para qué sirve.

2. Escala y unidad: ¿en qué unidad tiene sentido?

Puede ser el predio, la manzana, la vereda o el municipio. Si agregas mal, caes en el problema de la unidad de área modificable (MAUP, por sus siglas en inglés): los resultados cambian según la escala y la zonificación de las unidades. Lo puedes ver en la misma elección pintada por departamento y por municipio.

3. Calidad: ¿qué sabes de su completitud, consistencia, exactitud y vigencia?

Pregúntale al dato por los elementos de ISO 19157-1 que viste arriba. Si el proveedor no reporta ninguno, te toca medirlos a ti antes de usarlo.

4. Linaje: ¿cómo se produjo y con qué supuestos?

Según ISO 19115, el linaje (lineage) registra el origen del dato, los pasos de proceso y las transformaciones aplicadas.

Si no puedes responder una de esas cuatro, cruzar capas es un acto de fe.

Microcaso en Colombia: valoración rural sin criterio

Caso realista: quieres un modelo de valoración masiva rural. Tomas geometría predial (catastro), calculas índices con Sentinel-2, sumas clima histórico y entrenas.

Suena perfecto. Hasta que miras predios "carísimos" en zonas donde no hay ni vía, o "baratísimos" pegados a infraestructura.

¿Dónde suele estar el error?

Unidad y propósito mezclados. El predio es un marco legal y administrativo; Sentinel-2 es observación física; el clima es contexto temporal. No son features (variables de entrada) equivalentes.

Linaje incierto. En catastro, el rezago de linderos no es raro. La geometría puede existir para fines administrativos y aun así no estar actualizada a nivel de borde.

Servicio ≠ dato. En Colombia, muchas capas vectoriales llegan por WFS, pero los ráster y los modelos suelen publicarse como ImageServer (el servicio ráster de ArcGIS, vía REST); si tu pipeline asume "OGC puro", pierdes control justo donde necesitas filtrar nubes, seleccionar bandas o construir mosaicos.

El avalúo masivo rural con deep learning lo cuento en la conferencia de la Semana Catastral.

Cómo armar el flujo

1. Define la unidad de modelado

A veces no es el predio: puede ser una malla estable. La manzana censal funciona bien como unidad atómica para inferencia local, y Divipola como estándar para normalizar territorio.

2. Usa IDEAM vía datos.gov.co

Si la pregunta es dinámica (riesgo, series de tiempo), ve a datos.gov.co: expone datos del IDEAM para consumo por API, así no dependes de "descargas gigantes" que nadie sabe cuándo se actualizaron.

3. Para "normalidad regional" (Amazonía, biomas), apóyate en MapBiomas

Su valor está en la consistencia temporal y temática de sus mapas anuales de cobertura y uso del suelo, con series desde 1985.

Con MapBiomas al lado, puedes auditar la cartografía oficial contra una fuente independiente, sin reemplazarla.

Interoperabilidad moderna: menos scraping, más estándares

Ilustración a plumilla de Suramérica con nodos conectados y una órbita satelital: la red de catálogos de datos abiertos de la región

Si quieres que tu flujo sea reproducible, constrúyelo sobre dos estándares:

Para vectores: OGC API - Features

WFS funciona, pero OGC ya recomienda pasar a OGC API - Features, una API web más moderna y más amigable para desarrolladores. La parte 1 del estándar sugiere responder en GeoJSON y en HTML, aunque no obliga a ningún formato.

Para satélite y catálogos: STAC

STAC (SpatioTemporal Asset Catalog) estandariza cómo describir y buscar assets espaciotemporales: los archivos de cada escena, como sus bandas, su vista previa o sus metadatos. Si consumes Planetary Computer o catálogos similares, STAC te evita "código pegado con babas".

Usar pystac-client y flujos STAC para escenas y series es un camino limpio para evitar descargar terabytes sin necesidad.

# pip install pystac-client planetary-computer
import pystac_client
import planetary_computer

catalog = pystac_client.Client.open(
    "https://planetarycomputer.microsoft.com/api/stac/v1",
    modifier=planetary_computer.sign_inplace,
)

search = catalog.search(
    collections=["sentinel-2-l2a"],
    bbox=[-74.25, 4.45, -73.95, 4.85],  # Bogotá y la Sabana: [oeste, sur, este, norte], en grados
    datetime="2025-01-01/2025-12-31",
    query={"eo:cloud_cover": {"lt": 20}}
)

items = list(search.items())
print(f"Encontrados {len(items)} ítems")

Ojo con el filtro: eo:cloud_cover es el porcentaje de nubes del ítem completo, y tu área puede quedar justo debajo de la nube. Cada ítem de esta colección trae además el asset SCL, un mapa de clasificación de escena: de ahí armas la máscara por píxel con las clases que quieras descartar, y la aplicas antes de calcular cualquier índice.

Antes de cruzar la próxima capa

La calidad de un dato se mide contra la decisión que vas a tomar con él.

Empecé preguntando si el problema era conseguir datos. ¿Qué capa te enseñó que no lo era: catastro, nubes, escalas o servicios?

Comentarios

Deja tu comentario

Los leo todos. Se revisan antes de publicarse, así que el tuyo puede tardar un rato en aparecer.

0 / 1500

o escríbeme directo Correo LinkedIn GitHub

Nevado del Ruiz, 5321 m (SGC) · sin escala vertical

Únete a la red.

Una carta, sin ruido

Experimentos, mapas, papers y proyectos que van aterrizando. Sin spam, sin algoritmos, sin tracking — solo el correo.

sin spam · sólo lo que publico · baja en un clic