Executar consultas SQL sobre o catastro español
on Wednesday, February 11, 2026Resulta que polos motivos que sexan, precisaba buscar casas no catastro que cumprisen uns determinados parámetros. Por exemplo, casas cun tamaño máximo e mínimo, que non tivesen piscina, cun mínimo de finca, dentro dun determinado código postal e cunha antigüidade determinada.
Inmediatamente, o meu cerebro de informático pensou: iso soa totalmente a unha consulta SQL. Obviamente, sería demasiado bonito que o Catastro permitise a calquera executar consultas SQL directamente na súa base de datos, pero puxenme a pensar como se podería automatizar a busca dunha maneira similar, porque coa cantidade de inmobles que hai no catastro, unha busca manual é inviable.
¿Quizais hai algunha API? Idealmente, algunha API REST, tal vez. Pois non, parece que non. O máis semellante é un servicio no que podes enviar un ficheiro XML cos parámetros da consulta que queres realizar, eles póñeno na cola, e xa cando executen a consulta (normalmente, en menos dunha hora, segundo din), danche os resultados. Isto soa a algo doutro tempo e totalmente inviable para o propósito para o que o necesito, sobre todo tendo en conta que nin sequera hai un entorno de probas para probar o ficheiro XML de consulta xerado. Envíalo, esperas unha hora e, con sorte, darache os resultados que querías. Se non, a volver probar dentro dunha hora.
Pero hai outro servicio que si que resultou útil para o meu propósito, que é a descarga de todos os datos do catastro por provincia. Como a consulta que eu precisaba realizar se limitaba a unha provincia, podía descargar os ficheiros para a provincia do meu interese e realizar as miñas consultas sobre ese ficheiro.
Por suposto, aínda non ía ser tan doado, xa que os ficheiros de descarga obviamente non estaban en formato SQL. Nin tampouco en CSV. Nin sequera en Excel. Está nun formato propio que chaman información alfanumérica en formato CAT, que é basicamente un ficheiro de datos de texto con campos de ancho fixo.
Así que, o que acabei facendo é un simple script de Python que le as liñas de texto dos ficheiros CAT, parte cada unha segundo o ancho de cada columna, e importa o contido a unha base de datos.
O ficheiro de datos que se descarga da web do Catastro é un arquivo ZIP con múltiples ficheiros distintos, cada un deles contendo distinta información: fincas, inmobles, construcións, cultivos… Así que o primeiro que fai o script é ler a cabeceira do ficheiro para saber que tipo de ficheiro está a ler e, en función diso, saber como ten que interpretar o resto dos datos e partir cada fila en columnas.
O script ten algunhas limitacións. En primeiro lugar, é un script que creei para unha necesidade propia e un único uso, así que me centrei na información que era importante para min. Creo que implementei a importación de case todo, incluída información que non me interesaba (por exemplo, cultivos agrarios), pero deixei fóra algunha información que non me interesaba e complicaba bastante a súa implementación (por exemplo, a información sobre reparto de elementos comúns).
Hai outras limitacións que están fóra do meu control e refírense á inconsistencia da documentación oficial sobre o formato CAT e dos propios datos, por exemplo:
- Non hai información sobre os valores que poden ser nulos.
- Ás veces non se respecta o tipo de dato que a documentación di que ten un campo. Por exemplo, a documentación pode dicir que un campo é de tipo numérico, pero pódese atopar algún caso no que ese campo teña algunha letra.
- Hai valores para campos enumerados que non están documentados. Por exemplo, a documentación menciona códigos para o destino dunha construción como
RCTpara catedral,TCMpara cine,EBLpara biblioteca, etc. Pero, por exemplo, tamén se poden atopar construcións co códigoYPSque non está documentado. Intentei engadir todos os códigos non documentados que atopei, pero o script fallará se se atopa con algún código máis que non estea documentado. - As referencias catastrais, que se supoñen únicas, non sempre o son. Non é moi habitual, pero pódense atopar referencias catastrais duplicadas. Por ese motivo, usei a referencia catastral xunto co código de municipio para identificar as parcelas. Aínda así, poderían producirse conflitos de claves primarias se se atopan referencias catastrais duplicadas no mesmo municipio, caso que non atopei ata agora.
O resto da información para executar o script está no repositorio de código: