📌 Limpieza y Migración de Datos Catastrales del Distrito 1 y 2 a PostgreSQL
En este proyecto se realizó una limpieza y posterior carga de información catastral proveniente de un archivo Excel llamado DATOS DISTRITO 1 Y 2.xls. Los datos fueron tratados usando Python en Google Colab y migrados a una base de datos PostgreSQL con extensión PostGIS.
🔧 Paso 1: Limpieza de Datos con Google Colab
El código utilizado para limpiar la tabla está disponible en el siguiente enlace:
📄 Campos esperados:
codigonombre_y_apellidoscarnettipo_inmueblesupconstruccion_m2matviastopografiauso_de_edificaciontipologia_const
🔍 Proceso de limpieza:
- Se eliminaron filas vacías o incompletas.
- Se reemplazaron valores como
's/d'o'N/A'porNULLo valores adecuados. - Se verificó y corrigió el nombre de las columnas.
- Se exportó un archivo limpio llamado
datos_distrito_limpio.csv.
🗃️ Paso 2: Creación de la Base de Datos PostgreSQL
Usamos SQL Shell (psql) para crear la base de datos y habilitar la extensión PostGIS.
CREATE DATABASE catastro_samaipata_v1;
\c catastro_samaipata_v1
CREATE EXTENSION postgis;
📐 Paso 3: Creación de la Tabla en PostgreSQL
Basado en los campos del CSV limpio, se creó la tabla datos_distrito con los siguientes tipos:
CREATE TABLE datos_distrito (
codigo TEXT,
nombre_y_apellidos TEXT,
carnet TEXT,
tipo_inmueble TEXT,
supconstruccion_m2 NUMERIC,
matvias TEXT,
topografia TEXT,
uso_de_edificacion TEXT,
tipologia_const TEXT
);
📥 Paso 4: Carga de Datos desde CSV
Finalmente, se migraron los datos limpios desde el archivo datos_distrito_limpio.csv usando el comando:
COPY datos_distrito FROM 'C:\\lotes_limpios\\datos_distrito_limpio.csv' WITH (FORMAT csv, HEADER true, DELIMITER ',');
📌 Nota: Asegúrate que el archivo CSV esté accesible desde el servidor donde corre PostgreSQL y que los permisos sean correctos.
🔗 Paso 5: Relación entre datos_distrito y lotes_limpios
La relación entre ambas tablas se hace por el campo id_predio, que se agregó a datos_distrito y corresponde a la clave primaria en lotes_limpios.
⚙️ Preparación:
1. Se agregó el campo id_predio a datos_distrito:
ALTER TABLE datos_distrito ADD COLUMN id_predio varchar;
2. Se copió el valor desde codigo:
UPDATE datos_distrito SET id_predio = codigo;
3. Se aseguró que el tipo de dato de id_predio coincida en ambas tablas:
ALTER TABLE datos_distrito ALTER COLUMN id_predio TYPE character varying;
🧹 Eliminación de registros no vinculados:
Para garantizar la integridad referencial, se eliminaron registros cuyo id_predio no exista en lotes_limpios:
DELETE FROM datos_distrito
WHERE id_predio IS NOT NULL
AND id_predio NOT IN (
SELECT id_predio FROM lotes_limpios
);
🔒 Asegurarte de que lotes_limpios.id_predio sea UNIQUE:
Con todos los datos limpios ya tenemos tabla lista para relacionar:
ALTER TABLE lotes_limpios
ADD CONSTRAINT unique_id_predio UNIQUE (id_predio);
🔒 Creación de la clave foránea:
Con todos los datos alineados, se creó la relación entre tablas:
ALTER TABLE datos_distrito
ADD CONSTRAINT fk_id_predio
FOREIGN KEY (id_predio)
REFERENCES lotes_limpios(id_predio)
ON UPDATE CASCADE
ON DELETE SET NULL;
✅ Conclusión
Con estos pasos se logró una estructura de datos catastral limpia, consistente y relacionada geoespacialmente, lista para ser usada en sistemas GIS y consultas avanzadas.
La integridad de los datos es clave en proyectos territoriales, y este flujo asegura una base sólida para análisis, reportes o visualización cartográfica.
