PostgreSQL + PostGIS es el stack abierto más usado para catastro institucional en Colombia. Es gratuito, robusto, soporta el modelo LADM-COL sin licencias adicionales, y se integra naturalmente con QGIS, ArcGIS y herramientas oficiales del IGAC.
Este post es un tutorial pragmático para implementar el esquema LADM-COL en PostGIS en 4 semanas (1 mes), desde instalación hasta exportación XTF lista para SINIC.
Por qué PostGIS para catastro
- Open source · sin licencias: cero costo de adquisición. Solo infra y operación.
- Soporte nativo de geometría: tipos
geometryygeographycon índices espaciales rápidos - Compatibilidad LADM-COL: el modelo INTERLIS se traduce naturalmente a esquema PostgreSQL
- Herramientas oficiales IGAC: el ecosistema INTERLIS (ili2pg, pg-iliexport) soporta PostGIS de forma nativa
- Escalabilidad probada: bases con millones de predios funcionan sin problema
- Backup + replicación: PostgreSQL tiene 30 años de madurez en operación crítica
Lo que necesita antes de empezar
- Servidor Linux (Ubuntu 22.04+ recomendado) con 16–32 GB RAM
- PostgreSQL 14+ con extensión PostGIS 3.3+
- Java 11+ (para herramientas INTERLIS)
- QGIS 3.30+ con plugin Catastro Colombia (opcional, recomendado)
- Acceso a internet para descargar modelos LADM-COL desde el repositorio IGAC
Semana 1 · Instalación y modelo base
Día 1 · Instalar PostgreSQL + PostGIS
# Ubuntu 22.04sudo apt updatesudo apt install postgresql-15 postgresql-15-postgis-3 postgresql-15-postgis-3-scripts # Crear base catastralsudo -u postgres psql -c "CREATE DATABASE catastro_municipio;"sudo -u postgres psql -c "CREATE USER catastrero WITH PASSWORD 'cambieme';"sudo -u postgres psql -d catastro_municipio -c "CREATE EXTENSION postgis;"sudo -u postgres psql -d catastro_municipio -c "GRANT ALL PRIVILEGES ON DATABASE catastro_municipio TO catastrero;"Día 2 · Descargar modelo LADM-COL
El IGAC publica los modelos INTERLIS de LADM-COL. Descargue la versión vigente del SINIC desde el normograma IGAC. Los archivos .ili describen el esquema.
mkdir -p ~/ladm-colcd ~/ladm-col# Descarga del repositorio oficial IGACwget https://repositorio.igac.gov.co/ladm-col/v1.0/LADM_COL_Catastro.iliDía 3-5 · Generar esquema en PostGIS con ili2pg
ili2pg es la herramienta oficial INTERLIS para traducir .ili a esquema PostgreSQL:
wget https://downloads.interlis.ch/ili2pg/ili2pg-5.0.0.zipunzip ili2pg-5.0.0.zipcd ili2pg-5.0.0 # Crear esquemajava -jar ili2pg.jar --schemaimport \ --dbhost localhost --dbdatabase catastro_municipio \ --dbusr catastrero --dbpwd cambieme \ --models LADM_COL_Catastro \ --modeldir ~/ladm-col \ --defaultSrsCode 9377 \ --noSmartMappingDespués de esto, su base catastro_municipio tiene todas las tablas LADM-COL:
la_baunit(unidades básicas administrativas = predios)la_party(personas naturales y jurídicas)la_spatialunit(geometrías)la_rrr(derechos, restricciones, responsabilidades)la_valuation(avalúos)la_administrativesource(documentos fuente)- 60+ tablas adicionales con relaciones definidas
Semana 2 · Carga de datos existentes
Día 6-7 · Auditar la fuente actual
Antes de cargar, identifique qué tiene:
- ¿Catastro existente en SICtax, Oracle, SQL Server, archivos planos?
- ¿Geometrías en Shapefile, GeoPackage, geodatabase Esri?
- ¿Avalúos históricos disponibles?
- ¿Histórico de propietarios?
- ¿Soportes documentales (escrituras, planos)?
Día 8-10 · Mapeo de campos
Cree un documento (Excel funciona) con dos columnas: campo origen → campo LADM-COL destino. Para predios:
| Campo origen (SICtax) | Campo destino (LADM-COL) | Notas |
|---|---|---|
id_predio | la_baunit.t_id | Generar nuevo UUID |
numero_catastral | la_baunit.nombre | Mantener formato |
area | la_baunit.area_total | Validar coherencia con geometría |
propietario_id | la_party.t_id | Crear party si no existe |
polígono | la_spatialunit.geometria | Reproyectar a EPSG:9377 |
Día 11-14 · Carga estructurada con bitácora
-- Tabla de auditoríaCREATE TABLE migracion_log ( id SERIAL PRIMARY KEY, fecha TIMESTAMP DEFAULT NOW(), tabla_destino TEXT, id_origen TEXT, id_destino TEXT, estado TEXT, -- importado, error, rechazado detalle TEXT); -- Función de migración con bitácoraCREATE OR REPLACE FUNCTION migrar_predio( p_id_origen TEXT, p_numero_catastral TEXT, p_area NUMERIC, p_geometria GEOMETRY) RETURNS UUID AS $$DECLARE v_id_baunit UUID;BEGIN -- Validar geometría IF NOT ST_IsValid(p_geometria) THEN INSERT INTO migracion_log (tabla_destino, id_origen, estado, detalle) VALUES ('la_baunit', p_id_origen, 'rechazado', 'Geometría inválida'); RETURN NULL; END IF; -- Insertar INSERT INTO la_baunit (t_id, nombre, area_total) VALUES (gen_random_uuid(), p_numero_catastral, p_area) RETURNING t_id INTO v_id_baunit; -- Geometría INSERT INTO la_spatialunit (t_id, geometria, baunit_t_id) VALUES (gen_random_uuid(), ST_Transform(p_geometria, 9377), v_id_baunit); -- Log INSERT INTO migracion_log (tabla_destino, id_origen, id_destino, estado) VALUES ('la_baunit', p_id_origen, v_id_baunit::TEXT, 'importado'); RETURN v_id_baunit;END;$$ LANGUAGE plpgsql;Cada registro queda con bitácora — si algo se carga mal, se detecta y corrige.
Semana 3 · Validación topológica
Día 15-17 · Reglas LADM-COL básicas
Implemente validaciones automáticas:
-- 1. Predios sin geometríaSELECT b.t_id FROM la_baunit bLEFT JOIN la_spatialunit s ON s.baunit_t_id = b.t_idWHERE s.t_id IS NULL; -- 2. Geometrías inválidasSELECT t_id, ST_IsValidReason(geometria)FROM la_spatialunitWHERE NOT ST_IsValid(geometria); -- 3. Solapamientos entre prediosSELECT a.t_id AS predio_a, b.t_id AS predio_b, ST_Area(ST_Intersection(a.geometria, b.geometria)) AS area_solapeFROM la_spatialunit a, la_spatialunit bWHERE a.t_id < b.t_id AND ST_Intersects(a.geometria, b.geometria) AND ST_Area(ST_Intersection(a.geometria, b.geometria)) > 0.01; -- 4. Predios duplicados (mismo número catastral)SELECT nombre, COUNT(*)FROM la_baunitGROUP BY nombreHAVING COUNT(*) > 1;Día 18-21 · Reglas avanzadas
- Cierre topológico verificado
- Vecindad consistente con manzanas / vías
- Área catastral coherente con área geométrica
- Coordenadas dentro del polígono Colombia
- Tolerancias geométricas según R.509 IGAC
Cada regla violada se reporta como excepción para revisión manual.
Semana 4 · Exportación XTF al SINIC
Día 22-25 · Configurar pg-iliexport
java -jar ili2pg.jar --export \ --dbhost localhost --dbdatabase catastro_municipio \ --dbusr catastrero --dbpwd cambieme \ --models LADM_COL_Catastro \ --modeldir ~/ladm-col \ --xtf-out ~/exports/catastro_municipio_$(date +%Y%m%d).xtfEl archivo .xtf resultante es lo que se entrega al SINIC.
Día 26-28 · Validar XTF contra reglas IGAC
# Validador INTERLIS oficialjava -jar ilivalidator.jar --modeldir ~/ladm-col \ ~/exports/catastro_municipio_*.xtfCualquier error topológico o estructural se reporta. Corregir en PostGIS y volver a exportar.
Día 29-30 · Documentar el proceso
Antes de "terminar", deje todo documentado:
- Diagrama de arquitectura
- Mapeo de campos (origen → LADM-COL)
- Script de migración completo
- Runbook de exportación XTF
- Checklist de validación pre-radicación
- Procedimiento de actualización del modelo (cuando IGAC publique nueva versión)
Sin documentación, el sistema queda en cabeza de una persona — y eso es riesgo operativo.
Operación continua
Una vez en producción, el flujo diario es:
- Mutaciones: trámites de conservación se ingresan vía aplicación (web, móvil, escritorio)
- Validación: cada cambio pasa por reglas topológicas y de coherencia
- Bitácora: cada cambio queda con autor, fecha, regla aplicada
- Sincronización con sistema fiscal: API REST o vista materializada
- Reportes: dashboards SQL o BI sobre la base PostGIS
- Backup: diario con retención 30 días
- Entrega XTF al SINIC: mensual o según convenio con IGAC
Lo que PostGIS no resuelve
PostGIS es base de datos, no aplicación catastral completa. Faltan:
- Interfaz de usuario para operadores no-técnicos
- App de campo offline-first
- Portal ciudadano (Mi Predio)
- Flujos de mutación con plantilla documental
- Componente social
- Integración con sistemas fiscales
- Reportes operativos institucionales
Estos los aporta una plataforma como Terraes encima de PostGIS, o se construyen a medida (típicamente 12+ meses de desarrollo dedicado).
En resumen
PostGIS + LADM-COL es la base abierta del catastro multipropósito en Colombia. En 30 días un equipo técnico puede tener el esquema instalado, los datos migrados y la exportación XTF funcionando.
Construir la operación catastral completa sobre eso (interfaz, app de campo, portal ciudadano, mutaciones, social) toma más tiempo — pero la base de datos no es donde más se complica.
¿Su equipo técnico quiere implementar PostGIS + LADM-COL como base operativa? Tenemos acompañamiento técnico para gobiernos que quieren la base de datos abierta + Terraes como capa de aplicación. Solicite asesoría.