1. Introducción

Estas notas describen los datos de origen, su tratamiento y el proceso de elaboración de una grid de población para toda España a partir de los datos del Censo de 1887 (o del Nomenclátor de 1988).

Se trata de una versión refinada del mismo documento hecho para la CVA con la intención de que sea reproducible para otras CCAA. En el documento inicial se decriben numerosas pruebas. En este se decribe la versión final utilizada a partir de la clasificación de los edificios de Catastro.

En el proceso de descripción de la elaboración de la grid se vuelve a estimar la grid para la CVA, de forma que alguien familiar con R pueda ejecutar el proceso para el resto de España. Esto es cierto para todas las CCAA, tanto las de régimen común como las forales, ya que Goerlich (2025) ha procesado los datos de Catastro para todas ellas.

Una parte de las entidades están georeferenciadas, pero otras no disponen de coordenadas y, además, hay edificios diseminados.

El trabajo forma parte de un project de R totalmente autocontenido.

2. Datos de origen.

Fichero de origen: NE1888.zip. Contiene dos ficheros: N1888_data.dta con los datos y las notas en N1888_info.xlsx. Ver mail de Alfonso Díez de 12/12/2023.

En este caso, al contrario que en los datos de la CVA, no se efectúa corrección manual de coordenada alguna, y se toman los datos tal cual. Si hay errores o discrepancias, en las coordenadas o las entidades, estas se tratan de solucionar de forma automática –siendo imposible preveer todos los casos posibles que puedan aparecer–, pero no se efectúa ninguna corrección sobre el fichero original.

Observación 1:

Coordenada incorrecta detectada: Fruto de la experimentación con la primera versión de la grid generada se detectaron algunas coordenadas de entidades de Madrid (28079) que caían fuera de su término municipal. Una de ellas, M503, corresponde a la Barriada de Cuatro Caminos, cuya coordenada se asoció a un barrio en Estremera (28055) del mismo nombre. Ver mail de Alfonso Díez de 26/04/2025.

Aviso: ¡Esta coordenada está sin corregir en esta versión, 🤦!

2.1 Inspección inicial de los datos: 01data.R.

01data.R: Este script realiza una primera inspección de los datos del fichero original. Contiene numerosos comentarios.

Tiene 127,492 registros, pero los totales municipales aparecen bajo la clase == "*" –9,125 registros–, por lo que una vez filtrados disponemos de 118,367 registros.

Tenemos 9,287 municipios en 1887 con su correspondencia a 8,074 municipios en 2023. Hay 57 municipios actuales –2023– que no tienen correspondencia en 1887.

Todos los municipios en 1887 (ine87) –9,287– tienen identificada su capital –9,287 capitales–.

Hay 34 registros en los que la provincia en 1887 –pro87– no coincide con la provincia en 2023 –pro, que son los 2 primeros dígitos de ine–. La mayoría de estos casos, 25, se deben a que Ceuta en 1887 estaba adscrita a la provincia de Cadiz –pro87 == 11–.

Hay 11,112 registros que no tienen población –p_h = p_d = 0–. De estos, hay algunos que si tienen coordenadas.

Eliminando los 11,112 registros sin población en ambos conceptos de población disponemos de 107,255 registros operativos.

De estos, hay 58,837 registros con coordenadas y el resto, 48,418, son registros sin coordenadas.

Hay 71 coordenadas que caen fuera de los lindes Spain, pero esto lindes excluyen los condominios, e inspección visual muestra que muchas de estas coordenadas hacen referencia a los condominios. Puesto que estas entidades tienen coordenadas lo normal es que encuentren edificios de catastro donde asignar la población. La Dirección General del Catastro tiene los condominios asignados al municipio en el que tributan –excepto 1 caso, el de la Mancomunidad de Campoo-Cabuérniga–, mientras que en los catastros forales la situación es bastante heterogénea, pero si suelen incluir ficheros o códigos específicos para los condominnios, que en ningún caso fueron incorporados a la información catastral para la realización de este trabajo (Goerlich 2025). Presumiblemente también existen casos de entidades en condominios sin coordenadas.

Hay 8 coordenadas que caen fuera de la grid de referencia. Se trata de problemas de lindes marinos o de frontera, o de precisión de las coordenadas. Habrá que establecer una regla para resolver estos casos de forma automática. Lo normal es asignarlos al centroide de la celda más cercana, que es lo que se hizo.

Se genera un fichero de información:

  1. 01data_grid.xlsx: Información sobre coordenadas (SI/NO) y población por provincias, categorías y municipios (ine e ine87). Así como para las entidades que disponen de coordenadas. Este resumen no incluye los registros que no tienen población en ninguno de los dos conceptos que aparecen y que, por tanto, son irrelevantes a efectos de la grid. Entidades originales con coordenadas 58,837, de un total de 107,255, es decir, el 54.9%.

3. Algoritmo de generación de contornos urbanos y clasificación de los edificios de Catastro.

El primer paso, antes de distribuir la población, es clasificar los edificios de catastro y generar los contornos urbanos.

Como paso previo el catastro, que está disponible en Provincias, se pasa a CCAA. Este paro se hace en 02Catastro10CVA.R para la CVA y hay que modificarlo para todas las CCAA: 02Catastro#####.R. Esto simplemente elimina algunos campos innecesario y permite trabajar por CCAA.

Teniendo en mente la distribución de la población que hay que hacer se procedió a la generación de cortornos urbanos, identificación de los edificios que serán el soporte de la población diseminada y la clasificación de los edificios posteriores al año base o de partida.

La identificación se hace por municipio, que es como tenemos la población, esto tiene, sin embargo, un side effect. Las ditancias y los clusters se miden para los edificios dentro del municipio, es decir, un edificio puede ser aislado si medimos las distancias respecto al resto de edificios de su municipio, pero no si tenemos en cuenta los edificios de municipios limítrofes. Lo mismo sucede en el caso de los contornos urbanos, puesto que hay contornos urbanos de dos municipios que son contiguos. Este es, sin embargo, un problema menor, puesto que la población la tenemos por entidades de municipios.

El algoritmo que identifica cada edificio, de cada año, de cada municipio, se describe a continuación.

El algoritmo depende de algunos parámetros, que son idénticos a los necesarios en la generación de la grid de población –¡y tienen el mismo nombre!–. De hecho, algunos de estos parámetros ya no serán necesarios en la generación de la grid, puesto que los contornos se construyen ahora, y la decisión sobre la forma de los contornos debe ser tomada en este paso. En concreto,

  • missing_year <- FALSE: Hay casos en los que las fechas del edificio no existen o son incorrectas. Este boolean indica si debemos eliminarlas, TRUE, o mantenerlas, FALSE. Mantenerlas asigna, en la práctica una fecha igual al año 1000.

  • umbral_year <- 1900: Año para el que debemos filtrar los edificios al construir los clusters –contornos urbanos–. Si es NULL no se realiza ningún filtrado.

  • snap <- 200: Distancia (m) entre edificios para integrar un cluster. A mayor valor menor número de clusters y más grandes. Esta distancia tiene base en la delimitación actual del diseminado en el Nomenclátor.

  • HULL <- TRUE: Si es TRUE el algorithmo para la generación del contorno urbano a partir del cluster de edificios es una convex hull. Si es FALSE se utiliza una concave hull, de forma que el contorno se ajusta a los edificios más exteriores del cluster. En este caso los siguientes tres parámetros son de aplicación.

  • concavity <- 2: Medida relativa de concavidad. Valores de 1 implican un contorno muy detallado, \(+ \infty\) es equivalente a una convex hull. Es posible, pero no recomendable, usar valores menores de 1, ya que pueden generar formas bastante locas.

  • length_threshold <- 0: Cuando la longitud de un segmento está por debajo de este umbral, deja de ser considerado para mayor detalle. Los valores más altos dan como resultado formas más simples.

  • seg <- 0.5: Aumenta la resolución de los nodos –segmentos de tamaño más pequeño– en los contornos de los edificios para ajustar la concave hull a los lindes de los edificios.

Aunque no es estrictamente necesario, es conveniente que se mantengan los mismos valores de los parámetros en ambos procesos, para no generar inconsistencias. En concreto, umbral_year debe mantenerse constante entre procesos, clasificación de los edificios y contornos urbanos y proceso de gridding.

Debe observarse que la generación de contornos está pensada para la distribución de la población de 1887, y no para generar contornos urbanos para cada año, en este caso los contornos deberán actualizarse, lo que no se hace. Sin embargo, un procedimiento similar podría servir para generar contornos para diversos años y visualizar el crecimiento urbano.

Los dos parámetros básicos sobre los que hay que tomar una decisión a priori, y condicionan totalmente el proceso de clasificación posterior, son:

  1. umbral_year: año base. Los contornos urbanos donde atribuir población de las entidades y los edificios aislados donde atribuir la población diseminada se hacen con los edificios de Catastro hasta ese año base (inclusive). Estos contornos y edificios diseminados se mantendrán constantes en años posteriores. A los contornos solo se atribuirá población de entidades y a los edificios aislados solo población de edificios diseminados.

  2. snap: distancia que define cuando un edificio es aislado o forma parte de un diseminado. Dado un conjunto de edificios, un edificio es aislado –y constituye el soporte de la población en edificios diseminados– si está a más distancia de snap de cualquier otro edificio en el mismo municipio, por el contrario un edificio pertenece a un cluster –que habrá que construir– si está a menos de una distancia snap de otro edificio –un cluster tiene al menos 2 edificios–. Obviamente la distancia que debemos utilizar para definir edificios aislados o clusters debe ser la misma.

Para el año base el proceso es sencillo.

Dado umbral_year se cogen, para cada municipio por separado, todos los edificios de Catastro hasta ese año. Se miden las distancias entre todos ellos. Los edificios que están a menos de una distancia snap se dice que son vecinos. A partir de aquí:

  1. Los edificios que no tienen vecinos son edificios aislados, destinados –aunque no necesariamente– a albergar población diseminada.

  2. Los edificios que son vecinos constituyen un cluster, y habrá que construir su contorno. Esto se hace por una convex/concave hull, y no tiene mayor problema una vez sabemos los vecinos de cada cluster. Se introduce un indentificador, ID, de cluster.

A partir de aquí la información se almacena en dos capas:

  • Edificios, Buildings, con tanto registros como edificios de Catastro, en los que se añade un campo, diseminado, que indica si el edificio es aislado, diseminado = "SI", o pertenece a un cluster, diseminado = "NO", y se añade un identificador correlativo de cluster, ID, este identificador solo está definido si diseminado = "NO", en otro caso ID es NA, missing.

  • ContornosUrbanos, ContornosUrbanos, con la geometría de los contornos, el identificador de cluster, ID, y el número de edificios que forman el cluster. Esta geometría es fija, y no se modificará, a efectos de localizar la población, aunque encontremos edificios de años posteriores que pertenecen a un cluster.

Dadas estas dos capas, determinadas a partir de umbral_year, si diera la casualidad que las entidades del municipio –sin coordenadas, caso B, y aquellas cuyas coordenadas caen dentro de un contorno, caso A1– fueran igual al número de clusters, y la población diseminada ocupara todos los edificios diseminados, dado un tamaño medio del hogar, entonces el problema estaría resuelto, y no necesitaríamos ningún ajuste adicional.

Sin embargo, esto no ocurre nunca en la práctica. Pueden darse dos casos:

  1. Si las entidades y/o el diseminado no ocupan todo el soporte poblacional, entonces tenemos un problema de como determinar aquellos contornos y/o edificios aislados que quedarán vacíos.

  2. Si las entidades y/o el diseminado existentes en 1887 ocupan más contornos y/o edificios aislados, entonces tenemos el problema contrario –si no queremos repetir contornos y/o edificios donde situar la población–, necesitamos más contornos y/o edificios aislados donde situar la población. Para solucionar este punto se clasificó cualquier edificio posterior a umbral_year a partir del siguiente algoritmo.

Partiendo de las dos capas anteriores, generadas para umbral_year, se van añadiendo secuencialmente por años los edificios que van apareciendo en Catastro con posterioridad a umbral_year. La clasificación se realiza edificio por edificio. Con los edificios que se añaden cada año se procede de la siguiente forma.

  1. Si un edificio está a una distancia inferior a snap de un contorno –generado a partir de un cluster– se asigna al cluster de edificios de dicho contorno. ¡Pero no modifica el tamaño del contorno original! En consecuencia, este edificio en la capa Buildings se almacenará con diseminado = "NO" e ID el que le corresponda. La capa ContornosUrbanos no se ve alterada. En cierta forma los edificios clasificados en este paso no juegan, en el sentido de que no albergarán nueva población si fuera necesario.

    Sin embargo, conforme vamos añadiendo edificios en años posteriores y los contornos urbanos van creciendo debemos ajustarlos para medir las distancias de los nuevos edificios, por esa razón, a efectos de medir distancias, los contornos urbanos se re-construyen on-the-fly para medir las distancias de los nuevos edificios que se van añadiendo y poder clasificarlos secuencialmente.

Observación 2:

Anomalía detectada: Si aparecen muchos edificios juntos en un año de un determinado núcleo urbano, es posible que algunos estén a más de una distancia snap de un contorno y no se asignen a él, sino que acaben generando un contorno independiente fechado en ese año. Esto no necesariamente es malo a efectos de distribución de la población de 1887.

Ejemplo: Campo-Arcis de Requena (46213).

  1. Una vez descontados los edificios que han sido asignados a un cluster en el paso anterior, si un edificio está a una distancia al menos igual a snap respecto a todos los edificios existentes en ese momento –los añadidos en ese año y en todos los anteriores– se identifica como edificio aislado. En consecuencia, este edificio en la capa Buildings se almacenará con diseminado = "SI" e ID = NA. La capa ContornosUrbanos no se ve alterada.

  2. Estas dos opciones no clasifican, necesariamente, todos los edificios añadidos en un año.

    (i) Pueden surgir nuevos clusters de edificios que delimiten nuevos contornos. Estos se añaden a la capa ContornosUrbanos con un ID correlativo respecto al último creado anteriormente, naturalmente con fecha en el momento de su aparición. El tamaño de dicho contorno se mantendrá fijo en años sucesivos. Los edificios se añaden a la capa Buildings con diseminado = "NO" e ID el que le corresponda en la asignación.

    (ii) Pueden quedar edificios que no cumplan ninguna de las condiciones anteriores. En principio parece raro, pero se dan casos porque la distancia snap se mide respecto a entidades diferentes. Para que un edificio sea asignado a un cluster ha de estar a menos de snap distancia del contorno de dicho cluster, si está a más distancia no es asignado a dicho cluster, pero al mismo tiempo puede estar a menos distancia snap de un edificio aislado anterior, de forma que tampoco se clasificaría como edificio aislado, y queda sin clasificar a partir de las reglas anteriores.

    En principio este edificio debería formar un cluster con los edificios aislados que han sido etiquetados como tales en años anteriores, pero esto implica modificar la clasificación inicial generada a partir de umbral_year, lo que no se considera ni aceptable, ni deseable. La solución es que estos edificios residuales se clasifican como aislados, y solo son susceptibles de recibir población diseminada. En consecuencia, este edificio en la capa Buildings se almacenará con diseminado = "NC" e ID = NA. Se utiliza diseminado = "NC" para poder distinguir los casos de diseminado = "SI", aunque mantiene ID = NA porque no está asignado a ningún cluster. El total de edificios diseminados se identifica, pues, en la capa de Buildings por ID = NA. La capa ContornosUrbanos no se ve alterada.

La clasificación está implementada en los scripts 03CatastroData.R y 04CatastroContornos10CVA.R, y ambas capas se almacenan en A.ES.SDGC.10.CVA_clasificado.gpkg. Para cada edificio y contorno se calcula el área, Area, en m². Un resumen de la información generada de Buildings y de ContornosUrbanos se almacena en 04CatastroContornos10CVA.xlsx.

En un segundo paso, una vez hecha la clasificación, se calcula Sup2D, Sup3D, un índice de rugosidad –TRI = Sup3D/Sup2D y los estadísticos que ya se calcularon para los municipios (Goerlich 2022), para los edificios y los contornos. Para ello se utiliza la base de datos MDT05 procesada por Goerlich (2023).

Nota de computación: Este proceso se ejecuta en los scripts:

  • 02Catastro10CVA.R: Que transforma los datos provinciales en datos de CCAA –haciendo que sean menos pesados al eliminar muchas variables–, permitiendo que se pueda trabajar a nivel de CCAA. Debe observarse que todos los datos de Catastro procesados por Goerlich (2025) están en el Sistema de Referencia de Coordenadas (CRS) ETRS89-LAEA.

  • 04CatastroContornos10CVA.R: Algoritmo de generación de los contornos.

  • 05CatastroMDT0510CVA.R: Añade la información sobre altitud y rugosidad. Esta información procede del MTD05 procesado por Goerlich (2023), y su CRS no tiene porque coincidir con el de la información de Catastro procesada por Goerlich (2025). El script reproyecta on-the-fly los datos de Catastro para hacer el cálculo, pero la información se almacena en el vectorial de Catastro con el CRS original, ETRS89-LAEA. En consecuencia, ello no afecta al CRS de los datos almacenados de Catastro.

Observación 3:

Se detectaron algunos casos en los que la asignación de los edificios al municipio en Catastro no se correspondía con su asignación mediante localización espacial –estos casos se descubrieron porque al asignar altitud no había overlapping entre el MDT05 del municipio en cuestión y sus vecinos y las coordenadas de los edificios procedentes de Catastro–.

La solución fue asignar NA a los datos de altitud en estos edificios, y sus contornos, y luego, en el proceso de gridding filtrar estos edificios y sus contornos, de forma que no se utilizan en el proceso de gridding por entender que se trata de errores.

Ejemplo 1: En Huesca hay 3 edificios que en Catastro están asignados al municipio de Ayerbe (22039) que están localizados geográficamente en el municipio de Robres (22197).

Ejemplo 2: En Las Palmas hay 3 edificios que en Catastro están asignados al municipio de Las Palmas de Gran Canaria (35016) que están localizados geográficamente en el municipio de Agüimes (35002).

Para cada CCAA –incluyendo Pais Vasco y Navarra– habrá que ejecutar estos ficheros para la CCAA correspondiente, cambiando, además, las etiquetas de acceso. Por ejemplo, hay que cambiar 10CVA, de la Comunidad Valenciana, por 01AND para Andalucia o 12GAL, para Galicia.

  • El script 03CatastroData.R controla los parámetros de clasificación de los edificios de Catastro, y no debe modificarse. En caso de hacerlo, habría que correr los scripts 04CatastroContornos#####.R y 05CatastroMDT05#####.R para que la clasificación de los edificios de Catastro fuera uniforme para todas las CCAA.

  • El Catastro utilizado fue descargado en abril de 2025, tanto para las CCAA de régimen comñun como para las forales.

4. Generación de un fichero limpio de trabajo: 06data_clean.R

La inspección del fichero original arrojó 8 celdas cuyas coordenadas caían fuera de la grid. Algunas son errores de lindes, y otras son claramente errores. Para evitar problemas posteriores, a estas celdas se les asignó las coordenadas del centroide de la celda más cercana del término municipal al que pertenece la entidad.

Una vez hecha esta corrección, si dejamos caer las coordenadas sobre la grid aparecen 43,788 celdas con población.

El fichero final quita algunas variables innecesarias, e incluye algunas otras relacionadas con los casos y la existencia de coordenadas.

Se envían a un fichero limpio de trabajo, Hoja data_clean, junto con los estadísticos de partida. Estos son los datos a poner en la grid.

El fichero 06data_clean.xlsx contiene información en términos de porcentajes de entidades y población para cada uno de los casos.

GEOSTAT2021 tiene 115,410 celdas habitadas para toda España.

Observación 4:

El fichero de coordenadas indica que estas están en el CRS: ETRS89-UTM30N.

En principio es raro que todas estén en UTM30N, al menos las del Canarias, pero una inspección visual utilizando la variable ZONA del fichero de datos parece indicar que esto es así, ya que si las asignamos a su ZONA aparecen desplazadas, mientras que si las asignamos al huso 30N aparecen correctamente situadas.

En consecuencia, el proceso de gridding descrito en el apartado siguiente asumen que todas las coordenadas están en ETRS89-UTM30N. Si esto no es así, alguno de los resultados del proceso serán incorrectos.

5. Gridding

El proceso de construcción de la grid descansa sobre el Catastro (Goerlich 2025) clasificado, y procede de forma diferente para los 3 casos considerados.

Para los casos A y B se utiliza la capa de ContornosUrbanos, mientras que para el caso C se utiliza la capa de Buildings. Si los contornos y edificios de umbral_year son suficientes para asignar toda la población entonces no buscamos contornos o edificios en años posteriores, si no lo son, entonces buscamos contornos o edificios en años posteriores, el incremento es de año en año, y se guarda registro de hasta el año en el que ha habido que buscar.

Si no hay suficientes contornos/edificios para la asignación se reciclan. Esto sucedió, en el caso de la Comunidad Valenciana, en algunos pocos casos, como Alfafara (03010) o Castell de Cabres (12037).

En el caso de los contornos, la asignación de los casos B es por año y área –la entidad con mayor población se asigna al contorno de mayor área, después de una ordenación por años–.

Para el caso C la asignación es por año y altitud del edificio –el tamaño medio del hogar se asigna al edificio de menor altitud, después de una ordenación por años–. La altitud está deteminada a nivel de edificio a partir del área de su planta –footprint build-up area–. La altitud es un criterio arbitrario, que puede sustituirse por la rugosidad o cualquier índice que incorpore variables como área, altitud, rugosidad o pendiente.

Observación 5:

El script que genera la grid, 08Grid#####.R, reproyecta las coordenadas de las entidades a ETRS89-LAEA, que es el CRS de los datos de Catastro procesados por Goerlich (2025), y que coincide con el CRS de la grid de referencia. En consecuencia, el proceso de gridding se realiza en este CRS.

Ponemos en la grid la población de hecho, p_h. Hay 82 entidades para las que la población de hecho es nula, de forma que tenemos un total de 107,173 entidades, de las cuales disponen de coordenadas 58,831.

5.1 Grid para las entidades con coordenadas: Caso A

El caso A utiliza la capa de ContornosUrbanos.

El proceso de pasar la población a la grid se realizó municipio a municipio a partir de los contornos de Catastro clasificado restringidos a un determinado año.

Para las entidades con coordenadas se procedió básicamente de la siguiente forma.

A partir de los contornos del Catastro clasificado pueden darse 2 casos que tratamos por separado.

  1. Que la coordenada de una entidad caiga dentro, o muy cerca, de uno de los polígonos de las agrupaciones de edificios. Caso A1.

  2. Que la coordenada de una entidad caiga lejos de cualquier agrupación de edificios.

En el primer caso, asignamos la población de la entidad a ese polígono, y transferimos la población a la grid por areal weighting.

Observación 6:

Areal weighting tiene el inconveniente de que asume una densidad uniforme dentro del contorno urbano, de forma que, si el contorno es grande –y no tiene intersección con otros contornos– todas las celdas interiores a dicho contorno tienen la misma población.

Esto tiene solución, si la distribución dentro del contorno urbano se hace depender de características de los edificios dentro del mismo. La clasificación de los edificios de Catastro permite calcular la población por edificio dentro del contorno urbano, y luego asignar la población a la celda de la grid en función de la población asignada la los edificios.

En aras a la simplicidad del proceso, esta versión de la grid no contempla esta posibilidad, y se asigna la población por areal weighting.

En el segundo caso, distinguimos, a su vez, entre dos posibilidades:

  • Si la población de la entidad es pequeña –en la práctica menor de un determinado umbral– entonces simplemente asignamos la población a la celda de la grid donde cae la coordenada. Caso A2.

  • Si la población de la entidad es relativamente grande –en la práctica superior a un determinado umbral– generamos un polígono cuadrado donde localizar la población. El área de dicho polígono se determina de la siguiente forma: a partir de las entidades de ese municipio que tienen asignado un polígono se calcula la superficie per cápita de cada uno de esos polígonos, y se toma como umbral per cápita el promedio de las superficies anteriores. El polígono para la entidad en cuestión es un cuadrado de área igual a la que resulta del producto de dicho umbral por la población de la entidad. Caso A3.

En resumen, podemos distinguir 3 casos:

  1. Caso A1: Si una coordenada cae dentro del contorno urbano, o cerca –dado un umbral–, se asigna la población al mismo. El umbral de cercanía puede ser 0. En este caso las coordenadas que no caen dentro pasan a los casos 2 y 3.

  2. Caso A2: Si la coordenada cae lejos –dado un umbral– y la población es pequeña –dado otro umbral– se asigna a la celda donde cae la coordenada.

  3. Caso A3: Si la coordenada cae lejos –dado un umbral– y la población es grande –dado otro umbral– se genera un poligono cuadrado con superficie igual a su población por el tamaño medio de los poligonos per cápita a los que se les ha asignado población dentro de ese municipio.

En los casos 1 y 3 la transferencia final de la población del polígono a la grid se hace por areal weighting.

El proceso está gobernado por los siguiente parámetros (se muestran los valores por defecto):

  • integer <- TRUE: El proceso de areal weighting implica una población en reales para los casos A1 y A3. Este boolean indica si debemos mantener los reales, FALSE, o ajustar a enteros, TRUE. El ajuste a enteros se efectúa a nivel de caso, A1 o A3, pero si para una celda el proceso genera un entero, dicho valor se mantiene en el proceso de ajuste.

  • umbral_year <- 1900: Año para el que debemos filtrar los edificios al construir los clusters –contornos urbanos–. Si es NULL no se realiza ningún filtrado.

La asignación de la población a los contornos urbanos, y en consecuencia la distinción entre los casos 1, 2 o 3, depende de 3 parámetros:

  • umbral_dist <- 100: Umbral de distancia: la población se asigna a un contorno urbano si está a menos de esta distancia (m). Puede ser 0. Las entidades que pasan esta condición constituyen el caso A1, las que no lo pasan se evalúan para los casos A2 o A3.

  • umbral_pob <- 50: Umbral de población: la población de una entidad no asignada a un contorno urbano se asigna directamente a una celda si es menor de ese umbral de población, caso A2, en caso contrario se evalúa bajo el caso A3.

  • umbral_area <- 100: Umbral de area (m²): m² por persona para la generación de la huella del edificio en el caso de que ninguna coordenada se asigne a los polígonos de edificios. En algunos casos, hay entidades evaluadas bajo el caso A3, que no tienen entidades evaluadas bajo el caso A1, en cuyo caso no hay umbral para determinar el tamaño del polígono cuadrado donde situar a la población. En estos casos, que no hay información sobre el caso A1, se considera este umbral en m² por persona.

5.2 Grid para las entidades sin coordenadas: Caso B

El caso B utiliza la capa de ContornosUrbanos.

Como ya se ha indicado, en el caso de los contornos, la asignación de los casos B es por año y área –la entidad con mayor población se asigna al contorno de mayor área, despues de una ordenación por años–.

5.3 Grid para los edificios diseminados: Caso C

Observación 7:

En algún caso no existen edificios sueltos para asignar el diseminado. Cuando esto sucede el caso C se trata como el caso B, y se aplican sus reglas.

Estos casos se identifican porque en el fichero de registro 08Grid#####.xlsx se consigna household_size igual a 0.

Ejemplo 1: Monasterio (19191) (Guadalajara), cuyo diseminado es de 5 personas, y curiosamente no tiene caso B. También aparecen en esta provincia con este caso los municipios de Pinilla de Molina (19219), Puebla de Valles (19229) y Villaseca de Henares (19322).

Ejemplo 2: Arama (20012) e Ikaztegieta (20044) (Guipuzkoa), cuyo diseminado es de 112 y 141 personas respectivamente, y curiosamente no tienen caso B en ninguno de los dos casos.

Ejemplo 3:

Naturalmente esto solo aplica si hay población para el caso C. Si no hay población para el caso C es irrelevante si hay edificios o no.

Ejemplo 4: Alique (19019) (Guadalajara) no tiene edificios sueltos para asignar el diseminado, pero tampoco tiene población diseminada.

El caso C utiliza la capa de Buildings.

El tamaño medio del hogar se fija en 8 personas para todos los municipios. Ello significa que si la población en diseminado son 80 personas tenemos 10 unidades de población a distribuir, es decir, deberemos buscar 10 edificios donde situar la población. Este valor está parametrizado, average_household_size, de forma que es posible cambiarlo fácilmente y experimentar. Como en la práctica cada hogar –unidad de población– se asignará a un edificio de Catastro, ello significa que debemos buscar 10 edificios donde ubicar la población en diseminado.

El proceso es secuencial después de asignar las poblaciones de los Casos A y B, y procede de la forma descrita anteriormente. Al igual que antes, la asignación se efectuó a nivel de municipio.

El proceso está está gobernado por los mismos parámetros que el caso anterior más el siguiente parámetro:

  • average_household_size <- 8: Tamaño medio del hogar para la distribución de la población en diseminado.

Este proceso, que probablemente es el más crucial desde el punto de vista de la dispersión de la población, es incierto en cualquier caso.

Observación 8: Implementación

Como consecuencia de las particularidades detectadas, los scripts correspondientes se fueron modificando. Los scripts más completos son, por ejemplo, 05CatastroMDT0502ARA.R, 05CatastroMDT0505CAN.R o 05CatastroMDT0507CLE.R en relación a los errores de asignación de edificios en Catastro y 08Grid08CLM.R en relación a la falta de edificios aislados para las distribución del diseminado del caso C.

Modificar los parámetros del proceso puede hacer que aparezcan particularidades en otras CCAA.

6. Juntando las piezas del puzzle: Comunidad Valenciana - 10CVA.

Los parámetros que regulan el gridding se leen en el script 07GridData.R y si se cambian es necesario volver a correr todos los scripts 08Grid#####.R que es donde se calcula la grid.

La grid, de acuerdo con el algoritmo del apartado anterior, se genera para la Comunidad Valenciana –10CVA– en el script 08Grid10CVA.R, que deberá ser modificado para cada CCAA.

Como ya se ha indicado antes, el gridding se efectúa municipio a municipio y caso por caso, A1, A2, A3, B y C, y se almacena la grid final y todos los resultados intermedios en el fichero 08Grid10CVA.xlsx.

Las hojas de dicho fichero, y la información almacenada, son las siguientes:

  • Parametros: Parámetros en el gridding, que son los leídos en 07GridData.R.

  • Municipios: Municipios de la CCAA para la que se efectúa el gridding con información asociada de cada caso y el proceso de gridding.

  • Entidades: Entidades originales con información asociada del caso al que pertenece cada entidad e información asociada.

  • GridA: Celdas del caso A.

  • GridA1: Celdas del caso A1.

  • GridA2: Celdas del caso A2.

  • GridA3: Celdas del caso A3.

  • GridB: Celdas del caso B.

  • GridC: Celdas del caso C.

  • Grid: Grid final resultante.

  • GridM: Grid a nivel municipal, con información del caso al que pertenece cada celda de cada municipio. Es útil para rastrear casos particulares de municipios.

El proceso generó, para la Comunidad Valenciana, 7,340 celdas habitadas, para una población de 1,459,458 habitantes.

Por casos, las celdas habitadas son las siguientes:

  • Caso A: Celdas habitadas: 3,212. Población: 1,312,365

  • Caso B: Celdas habitadas: 2,004. Población: 55,799.

  • Caso C: Celdas habitadas: 4,545. Población: 91,294.

Observación 9: Sensibilidad al parámetro para la generación de contornos urbanos

La diferencia entre esta versión y la generada en una versión inicial, en la que se utilizó un snap de 100m entre edificios para construir los contornos urbanos, indica que aumentar el snap incrementa la dispersión de la población en términos de celdas habitadas. Ello resulta natural en los casos A y B, ya que genera contornos más amplios sobre los que distribuir la población, pero también se observa en el caso C sin una explicación aparente.

El proceso anterior, con un snap de 100m entre edificios para construir los contornos urbanos, generó, para la Comunidad Valenciana, 6,655 celdas habitadas.

Por casos, las celdas habitadas son las siguientes:

  • Caso A: Celdas habitadas: 2,974.

  • Caso B: Celdas habitadas: 1,754.

  • Caso C: Celdas habitadas: 4,255.

7. Workflow

El proceso completo, implementado en el project, es el siguiente.

  1. Lo primero que hay que hacer es trasformar los ficheros de Catastro de provinciales a CCAA. Ejemplo, 02Catastro10CVA.R.

    • Este es un proceso bastante manual, en el que hay que reunir las provincias de cada CCAA y agruparlas en una única layer que luego se graba en gpkg. La inspección de 02Catastro10CVA.R, que ejecuta este proceso para la Comunidad Valenciana, debe dejar claro lo que hay que hacer. Hay que introducir los códigos y nombres de la provincia al generar el fichero para la CCAA. Dichos códigos y nombres están en el fichero PROV2CCAA.xls, en el directorio data. La layer de salida debe identificar la CCAA con código y 3 letras: 10.CVA para la Comunidad Valenciana. ¡Obsérvese el punto de separación! Este proceso debe hacerse incluso para las CCAA uniprovinciales, por codificación y porque reduce el tamaño de los ficheros de Catastro.

    • Los catastros forales requieren ajustes específicos.

    • Los códigos e identificadores de 3 letras para las CCAA son los siguientes:

    Código Identificador
    01 AND
    02 ARA
    03 AST
    04 BAL
    05 CAN
    06 CTB
    07 CYL
    08 CLM
    09 CAT
    10 CVA
    11 EXT
    12 GAL
    13 MAD
    14 MUR
    15 NAV
    16 PAV
    17 RIO
    18 CEU
    19 MEL
    • No existen datos para Melilla –Código: 19 - Identificador: MEL–, de forma que puede clasificarse su Catastro, pero no se generará una grid para esta Ciudad Autónoma.
  2. Lo segundo que hay que hacer es clasificar los edificios de Catastro. Este proceso es independiente del gridding.

    • Decidir las opciones de clasificación y guardarlas en el script 03CatastroData.R. Si se usan las opciones por defecto, descritas en el apartado 3, no hace falta tocar este fichero.

    • A continuación ejecutar, para cada CCAA, los scripts 04CatastroContornos#####.R y 05CatastroMDT05#####.R para efectuar la clasificación y añadir los estadísticos de altitud, rugosidad y asociados. Estos procesos tardan bastante. Para la CVA tardaron unos 2 días 04CatastroContornos10CVA.R y 1 día 05CatastroMDT0510CVA.R.

    • Estos procesos solo requieren cambiar la lectura de datos, municipios de la CCAA y Catastro, y el código de grabación del fichero de datos de salida.

  3. Finalmente se ejecuta el proceso de gridding a nivel de CCAA.

    • Una vez decididas las opciones para el gridding, descritas en el apartado 5.1, se guardan en el script 07GridData.R. Si se usan las opciones por defecto no hace falta tocar este fichero.

    • Si se desea cambiar alguna cuestión menor, como por ejemplo la asignación del diseminado a edificios por rugosidad en lugar de por altura, esto no está parametrizado, y hay que tocar los scripts. ¡Mejor consultar!

    • A continuación ejecutar 08Grid#####.R para cada CCAA. La grid para la CCAA correspondiente está en la hoja Grid de 08Grid#####.xlsx.

  4. Una vez ejecutado el proceso para todas las CCAA es necesario ensamblar la grid nacional. Para ello es necesario leer las hojas Grid de todos los ficheros 08Grid#####.xlsx, agregar por identificador de celda, GRD_ID, y sumar las poblaciones correspondientes. Este proceso está implementado en el script 09Grid.R.

7.1 Sugerencias de mejora

Al margen de las 8 coordenadas que caen fuera de la grid, y a las que se asignó la coordenada del centroide de la celda más cercana del municipio al que pertenecen, hay algunas cuestiones que podrían mejorarse.

Hay 57 municipios actuales, existentes a fecha 1 de enero de 2023, que no aparecen en la base de datos N1888. En muchos casos, si no en todos, si podría establecerse esta correspondencia, simplemente buscando en que municipio actual hay alguna entidad que dió origen a estos municipios que no aparecen. Esta identificación mejoraría en algo la búsqueda de edificios de Catastro en el proceso de gridding.

En el caso de la CVA hay 6 municipios afectados: La Romana (03114), San Isidro (03904), San Rafael del Río (12101), Benifairó de les Valls (46058), San Antonio de Benagéber (46903) y Benicull de Xúquer (46904).

Sin embargo, estos casos no aparecieron en las pruebas preliminares que se hicieron con los datos de la CVA, ¿por qué? Porque se hizo una identificación, manual o automática, de las entidades que pertenecían a dichos municipios, aunque en un par de casos, La Romana (03114) y San Rafael del Río (12101) todo indica que hay un error en algún sitio.

Por ejemplo, La Romana (03114), codmat = A1234, ya aparece con código ine = 03114 en el fichero original de la experimentación con la CVA, de forma que no entiendo porque aparece en este fichero con ine = 03093, igual a ine87, en lugar de ine = 03114. Se desconoce si el error procede de este fichero o del de la experimentación con la CVA.

San Isidro (03904) se corresponde con la entidad Estación de Albatera-Catral (A37) asignada a Albatera (03005), de donde se segrega, de forma que para esta entidad podría consignarse ine = 03904 en lugar de ine = 03005.

San Rafael del Río (12101), codmat = CS1961, ya aparece con código ine = 12101 en el fichero original de la experimentación con la CVA, de forma que no entiendo porque aparece en este fichero con ine = 12121, igual a ine87, en lugar de ine = 12101. Se desconoce si el error procede de este fichero o del de la experimentación con la CVA.

Benifairó de les Valls (46058) está en Villa de la Unión (46522) en 1887, junto con Faura (46122), que es a quien se asigna en la base de datos. Desagregar esto, y atribuir una parte de Villa de la Unión (46522) a Benifairó de les Valls (46058) requiere trabajo manual, pero este se hizo en el caso del ejemplo de la CVA. Naturalmente ello añade un registro adicional al fichero de entidades.

San Antonio de Benageber (46903) se corresponde con la entidad Venta y Casa de Pla del Pou (V1386) asignada a Paterna (46190), de donde se segrega, de forma que para esta entidad podría consignarse ine = 46903 en lugar de ine = 46190.

Benicull del Xúquer (46904) se corresponde con la entidad del Caserío de La Muntañeta (V1420) asignada a Polinyà de Xúquer (46197), de donde se segrega, de forma que para esta entidad podría consignarse ine = 46904 en lugar de ine = 46197.

Esta información no se ha aprovechado al hacer la asignación de ine87 a ine. Podría aprovecharse la que ya se conoce e indagar la que no se conoce.


Referencias

  • Goerlich, F. J. (2022) Un índice de rugosidad del terreno a escala municipal –updated–. –superficie 2D versus superficie 3D y rugosidad–. on-line. (01/12/2022).

  • Goerlich, F. J. (2023) Superficie planimétrica versus superficie del paisaje en España. –superficie 2D versus superficie 3D–. on-line. (16/05/2023).

  • Goerlich, F. J. (2025) Catastro INSPIRE. –Haciendo fácil lo que las instituciones hacen difícil–. on-line (14/04/2025).