En Especificaciones se describen las solucciones a algunos de los problemas a los que se enfrenta la herramienta desarrollada para esta importación. Si quieres participar activamente pasa a la guía de importación.
Seleccionar las partes con 'numberOfFloorsAboveGround' = 0.
Eliminarlas.
Para cada característica en la capa.
Si corresponde a una parte de un edificio.
Si tiene plantas bajo rasante ('numberOfFloorsBelowGround' < 0) y no tiene plantas sobre rasante ('numberOfFloorsAboveGround' = 0), la elimina.
Si tiene edificio asociado y no está dentro, la elimina. Se considera que tiene edificio asociado si existe un edificio con el valor de la referencia catastral en el campo 'base:localId'.
Si no tiene edificio asociado, la añade a un diccionario agrupada por la referencia del edificio.
Con el diccionario de partes que no tienen edificio asociado, para cada referencia de edificio, genera el contorno del edificio a partir de la unión de todas las partes.
Para cada edificio y sus partes (coincide la referencia catastral).
Calcula los valores mínimo y máximo del número de niveles bajo y sobre rasante en las partes del edificio.
Asigna estos valores al contorno.
Comprueba los pares de valores de niveles bajo y sobre rasantes distintos que hay en las partes del edificio y que partes corresponden a cada par de valores.
Si sólo hay un par, elimina sus partes.
En caso contrario, para cada par de valores y conjunto de partes con esos valores.
Este problema se produce tanto en los edificios, como en el conjunto de datos de partes de edificios y en la de otras construcciones. Su resolución es interdependiente; es decir, puede haber un nodo de un edificio que no esté duplicado en un principio pero sí lo está si consideramos los otros conjuntos de datos. Por ese motivo hay que copiar en un mismo almacén de datos los elementos de los tres conjuntos de datos. Al decir elemento geográfico nos referimos a edificios, sus partes y otras construcciones (piscinas).
Las coordenadas se mantienen en la proyección UTM original para simplificar el cálculo de distancias.
Parámetros:
'dup_thr' = 1,2 cm. Este valor se ha establecido mediante pruebas observando que JOSM dibuja coordenadas con cualquier precisión, pero la validación de nodos duplicados redondea al séptimo dígito decimal. Un ángulo de 10-7 grados en latitud corresponde aproximadamente a 0,011 metros.
'dist_thr' = 2 cm.
'straight_thr' = 2o.
Pasos:
Para cada geometría 'geom' en la capa.
Para cada vértice 'point' en su contorno exterior.
Si sus coordenadas no han sido visitadas previamente.
Se buscan geometrías que se intersecten con un cuadrado de radio 'dist_thr' en torno a 'point'.
Para cada geometría candidata.
Busca el vértice más cercano a 'point' en la geometría candidata.
Si la distancia al vértice más cercano ('dist_v') es 0, pertenece a 'geom'.
Si cualquiera de los vértices adyacentes 'va' y 'vb' está a una distancia inferior a 'dup_thr' lo elimina.
Si 0 < 'dist_v' < 'dup_thr', no pertenece a 'geom'. Lo desplaza a la posición 'point'.
Si 'dist_v' > 'dup_thr', no pertenece a 'geom'. 'point' es punto topológico si cumple todas estas condiciones:
La distancia desde 'point' al segmento más cercano en la geometría candidata es inferior a 'dist_thr' y el punto más cercano a 'point' en este segmento no coincide con sus extremos.
El ángulo que forma 'point' con los extremos del segmento es llano (la diferencia con 180º es inferior a 'ang_thr').
Insertarlo como vértice en la geometría candidata no genera una geometría inválida.
Si 'point' es punto topológico se inserta como nuevo vértice en la geometría candidata.
Motivación:Nodos innecesarios. El uso de una herramienta externa para simplificar no permite todo el control que desearíamos ni depurar los resultados. Por eso se desarrolla un algoritmo propio.
Se pretenden eliminar vértices excesivos en líneas rectas, como los vértices rojos en la imagen.
Nodos excesivos en una línea recta.
Para ello se examina cada vértice de una geometría. El vértice es candidato a ser eliminado si no es una esquina. Se considera que no es esquina si el ángulo que forma con los vértices anterior y posterior no difiere mucho de 180o (es llano).
El nodo rojo es candidato a eliminar.
La condición del ángulo llano no es suficiente. Si la distancia que separa los vértices anterior y posterior es suficientemente grande, aunque el ángulo sea casi llano, el cateto puede medir metros y eliminar el vértice supondría una modificación excesiva del edificio. El cateto es la distancia menor entre el vértice y la línea que une los vértices anterior y posterior.
Eliminar este nodo provoca un desplazamiento de varios metros.
No se puede eliminar un vértice si en otra geometría hay un vértice en la misma posición. Eso daría lugar a errores topológicos. En la siguiente imagen los nodos verdes se pueden eliminar, el rojo no, por que pertenece a las partes del edificio (gris claro).
Nodo perteneciente a varias geometrías.
Hay que comprobar el ángulo en todas las geometrías que tengan un nodo en esa posición. En la imagen anterior los nodos verdes pertenecen a dos geometrías: el contorno del edificio y las partes del mismo.
Precondiciones:
Deben estar en un mismo almacén de datos los elementos de los conjuntos de edificios, partes de edificios y otras construcciones (piscinas).
Se han eliminado los nodos duplicados.
Se han añadido nodos topológicos.
Las coordenadas se mantienen en la proyección UTM original para simplificar el cálculo de distancias.
Se crea un conjunto de datos para rústica 'rustic_zoning' y otro para urbana 'urban_zoning'.
Se copian los elementos con valor 'POLIGONO' en el campo levelName del conjunto 'zoning' al conjunto 'rustic_zoning' y los que tienen el valor 'MANZANA' a 'urban_zoning', separando las geometrías multiparte.
Se fusionan los elementos 'MANZANA' adyacentes (si tienen algún segmento en común) para evitar colocar en distintas tareas edificios que tengan paredes comunes.
Se asigna un identificador único a cada polígono.
Resultado: Se generan dos ficheros de salida: urban_zoning.geojson y rustic_zoning.geojson.
Las abreviaturas tipo de vía de Catastro (especificadas en este documento) se expanden usando un diccionario, personalizable por el usuario.
Generar un archivo de corrección con los nombres de vías en Catastro y la transformación propuesta para cada uno.
A continuación se realiza una revisión manual del archivo de corrección. Este archivo será usado por el programa en la siguiente ejecución para transformar los nombres de Catastro. Para algunos tipos de vías, se colocará el nombre en una etiqueta addr:place=* en lugar de addr:street=*