📌 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:

Google Colab - Limpiar Tabla

📄 Campos esperados:

  • codigo
  • nombre_y_apellidos
  • carnet
  • tipo_inmueble
  • supconstruccion_m2
  • matvias
  • topografia
  • uso_de_edificacion
  • tipologia_const

🔍 Proceso de limpieza:

  • Se eliminaron filas vacías o incompletas.
  • Se reemplazaron valores como 's/d' o 'N/A' por NULL o 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.