ES:Catastro español/Importación de edificios/Conversión de datos/Programa

From OpenStreetMap Wiki
Jump to: navigation, search
Idiomas disponibles — Catastro español/Importación de edificios/Conversión de datos/Programa
· Afrikaans · Alemannisch · aragonés · asturianu · azərbaycanca · Bahasa Indonesia · Bahasa Melayu · Bân-lâm-gú · Basa Jawa · Basa Sunda · Baso Minangkabau · bosanski · brezhoneg · català · čeština · corsu · dansk · Deutsch · eesti · English · español · Esperanto · estremeñu · euskara · français · Frysk · Gaeilge · Gàidhlig · galego · Hausa · hrvatski · Igbo · interlingua · Interlingue · isiXhosa · isiZulu · íslenska · italiano · Kiswahili · Kreyòl ayisyen · kréyòl gwadloupéyen · Kurdî · latviešu · Lëtzebuergesch · lietuvių · magyar · Malagasy · Malti · Nederlands · Nedersaksies · norsk bokmål · norsk nynorsk · occitan · Oromoo · oʻzbekcha/ўзбекча · Plattdüütsch · polski · português · română · shqip · slovenčina · slovenščina · Soomaaliga · suomi · svenska · Tiếng Việt · Türkçe · Vahcuengh · vèneto · Wolof · Yorùbá · Zazaki · српски / srpski · беларуская · български · қазақша · македонски · монгол · русский · тоҷикӣ · українська · Ελληνικά · Հայերեն · ქართული · नेपाली · मराठी · हिन्दी · भोजपुरी · অসমীয়া · বাংলা · ਪੰਜਾਬੀ · ગુજરાતી · ଓଡ଼ିଆ · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · සිංහල · བོད་ཡིག · ไทย · မြန်မာဘာသာ · ລາວ · ភាសាខ្មែរ · ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ‎ · አማርኛ · 한국어 · 日本語 · 中文(简体)‎ · 中文(繁體)‎ · 吴语 · 粵語 · ייִדיש · עברית · اردو · العربية · پښتو · سنڌي · فارسی · ދިވެހިބަސް

En esta página se describen las especificaciones de una herramienta para la conversión de los conjuntos de datos de los Servicios INSPIRE de Cartografía Catastral de la Dirección General del Catastro para la Importación de Edificios. El código (en desarrollo) está alojado en este repositorio y la documentación aquí.

Transformaciones sobre los datos

Algoritmo para separar edificios multiparte

Motivación: edificios y otras conjuntos de datos con geometría multiparte.

Pasos:

  1. Se recorre cada edificio del conjunto de datos que contiene los edificios.
  2. Si su geometría es de tipo WKBMultiPolygon:
  3. Para cada polígono dentro del edificio, se añade un nuevo edificio con ese polígono copiando los campos del original.
  4. Se borra el edificio original.

A partir de este momento, el campo 'localId' deja de ser un identificador único del edificio.

Eliminar partes de edificios bajo el nivel del suelo

Motivación: Partes de edificio bajo el nivel del suelo.

Pasos:

  1. Seleccionar las partes con 'numberOfFloorsAboveGround' = 0.
  2. Eliminarlas.

Algoritmo para simplificar nodos duplicados

Motivación: Nodos duplicados.

Precondiciones:

  • 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 si 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 cm.

Pasos:

  1. Se considera que un nodo es duplicado si en sus inmediaciones existen otros nodos a una distancia inferior a 'dup_thr'.
  2. Se elabora un diccionario que almacena, para cada nodo duplicado, un listado de los nodos. vecinos con distancia inferior a 'dup_thr' pero mayor que 0.
  3. Se recorren todos los nodos 'point' en el diccionario de duplicados.
  4. Se recorren los nodos 'dup' en el listado de duplicados de ese nodo.
  5. Modifica cada geometría en las que está incluido 'dup', desplazándolo a la posición 'point'.
  6. Elimina 'dup' del diccionario de duplicados para no recorrer dos veces.

El algoritmo anterior trata por igual los nodos que pertenecen a distintas geometrías y los que pertenecen a la misma. Por tanto, después de aplicarlo pueden aparecer nodos consecutivos en un polígono con las mismas coordenadas. Para resolverlo se eliminan los nodos consecutivos duplicados de cada polígono.

  1. Para cada polígono,
  2. Para cada anillo del polígono,
  3. Se recorren los nodos del anillo desde el segundo al último.
  4. Si este nodo es igual al anterior se elimina.

Algoritmo para añadir nodos topológicos

Motivación: Errores topológicos.

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.
  • Las coordenadas se mantienen en la proyección UTM original para simplificar el cálculo de distancias.

Parámetros:

  • 'dist_thr' = 5 cm.
  • 'ang_thr',
  1. Para cada nodo 'point' en la geometría,
  2. Se buscan geometrías que se intersecten con un cuadrado de radio 'dist_thr' en torno a 'point'.
  3. En cada una de las geometrías candidatas se busca el segmento de línea más cercano a 'point'.
  4. 'point' es punto topológico si cumple todas estas condiciones:
  5. La distancia desde 'point' al segmento es inferior a 'dist_thr' y 'point' no coincide con los extremos del segmento.
  6. El ángulo que forma 'point' con los extremos del segmento es llano (la diferencia con 180º es inferior a 'ang_thr').
  7. Insertarlo como vértice en la geometría candidata no genera una geometría inválida.
  8. Si 'point' es punto topológico se inserta como nuevo vértice en la geometría candidata.
  • Error topológico sin corregir.
  • Error topológico corregido.

Algoritmo para simplificar geometrías

Motivación: Errores topológicos. 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 180º (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 las 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.

Parámetros:

  • 'cath_thr' = 5 cm.
  • 'angle_thr' = 2º.

Pasos:

  1. Para cada geometría,
  2. Para cada nodo 'point' en la geometría,
  3. Comprueba si 'point' es una esquina en alguna de las geometrías que tengan un nodo en las mismas coordenadas.
  4. Si no es esquina en ninguna, puede borrar 'point' de todas esas geometrías.

Operaciones sobre los datos

Algoritmo para generar ficheros de límites para el gestor de tareas

Motivación: La creación de proyectos en el gestor de tareas para dividir los datos en tareas.

Pasos:

  1. Se crea un conjunto de datos para rústica 'rustic_zoning' y otro para urbana 'urban_zoning'.
  2. Se copian los elementos con valor 'POLIGONO' en el campo levelName del conjunto 'zoning' al conjunto 'rustic_zoning' y los qe tienen el valor 'MANZANA' a 'urban_zoning'.
  3. Se separan las geometrías multiparte.
  4. 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.
  5. Se asigna un identificador único a cada polígono.

Resultado: Se generan dos ficheros de salida: urban_zoning.geojson y rustic_zoning.geojson.

Algoritmo para dividir los datos en tareas

Motivación: Generar ficheros para dividir los datos en tareas.

Pasos:

En primer lugar se asigna a cada elemento del conjunto de datos 'building' (que contiene los edificios, sus partes y las piscinas) un identificador de tarea. Primero para Urbana:

  1. Se recorre cada elemento del conjunto de datos 'urban_zoning'.
  2. Se obtiene su geometría.
  3. Se selecciona en el conjunto de datos 'building' los elementos que están contenidos en o se superponen a la geometría de la zona urbana.
  4. A cada elemento seleccionado, si no tiene identificador de tarea asignado, se le asigna el identificador de la zona urbana. Si el elemento es un edificio, se asigna también el identificador a sus partes.

Después para Rústica:

  1. Se recorre cada elemento del conjunto de datos 'rustic_zoning'.
  2. Se obtiene su geometría.
  3. Se selecciona en el conjunto de datos 'building' los elementos que están contenidos en la geometría de la zona urbana.
  4. A cada elemento seleccionado, si no tiene identificador de tarea asignado, se le asigna el identificador de la zona rústica.

Esto se hace antes de hacer ninguna modificación topologíca para que no influir en las operaciones espaciales (contener, superponer). Después de corregida la topología y simplificar nodos, se extraen los elementos del conjunto de datos 'building' por cada identificador de tarea y se crean los ficheros OSM correspondientes.