OSM-es / CatAtom2Osm

Tool to convert INSPIRE data sets from the Spanish Cadastre ATOM Services to OSM files.
BSD 2-Clause "Simplified" License
13 stars 6 forks source link

Error en ConsLayer: UnboundLocalError: local variable 'building' referenced before assignment #91

Closed agarciamontoro closed 2 years ago

agarciamontoro commented 2 years ago

Estoy intentando generar los datos para Carboneras, una pequeña aldea del municipio de Aracena, Huelva. He ejecutado esta orden una vez para generar los datos del municipio entero:

LANG=es_ES.UTF-8 catatom2osm 21007

Ha terminado sin errores. Después he editado a mano el archivo highway_current.csv para quedarme sólo con las calles pertenecientes a Carboneras (y arreglar un par de errores), y he ejecutado la misma orden anterior una segunda vez.

En esta segunda ejecución el programa ha terminado con este error:

Using default tag: latest
latest: Pulling from egofer/catatom2osm
Digest: sha256:95296c5cb476bc7faf3a2ec017dda66356931e55c64e2bdee1be73067aaff68a
Status: Image is up to date for egofer/catatom2osm:latest
docker.io/egofer/catatom2osm:latest
2022-02-04 14:32:51,525 - INFO - Comienza el procesado de '21007'
2022-02-04 14:32:51,660 - INFO - Leídos 509 características en '21007/A.ES.SDGC.CP.21007.cadastralzoning.gml'
2022-02-04 14:34:01,313 - INFO - Municipio: 'Aracena'                                                                                                                                                                                  
2022-02-04 14:34:01,919 - INFO - Leídos 4281 características en '21007/A.ES.SDGC.BU.21007.building.gml'
2022-02-04 14:34:02,813 - INFO - Leídos 11659 características en '21007/A.ES.SDGC.BU.21007.buildingpart.gml'
2022-02-04 14:34:02,847 - INFO - Leídos 276 características en '21007/A.ES.SDGC.BU.21007.otherconstruction.gml'
2022-02-04 14:34:09,848 - INFO - Leídos 5629 características en '21007/A.ES.SDGC.AD.21007.gml'                                                                                                                                         
2022-02-04 14:34:11,511 - INFO - Leídos 4 características en '21007/A.ES.SDGC.AD.21007.gml'                                                                                                                                            
2022-02-04 14:34:11,514 - INFO - Leídos 287 características en '21007/A.ES.SDGC.AD.21007.gml'
2022-02-04 14:34:14,193 - INFO - Leídos 203361 características en 'auxsrcs/portal_Huelva.csv'                                                                                                                                          
2022-02-04 14:34:17,136 - INFO - Analizadas 4404 direcciones de 'CDAU'
2022-02-04 14:34:17,145 - INFO - Añadidas 3159 direcciones de 'CDAU'
2022-02-04 14:34:19,466 - INFO - Generado 'address.geojson'
2022-02-04 14:34:19,549 - INFO - Descargando 'current_address.osm'
2022-02-04 14:34:39,702 - INFO - Leído 'current_address.osm': 96 nodos, 12 vías, 4 relaciones                                                                                                                                          
Move addresses:   0%|                                                                                                                                                                                           | 0/99 [00:00<?, ?it/s]Traceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/opt/CatAtom2Osm/catatom2osm/__main__.py", line 139, in <module>
    run()
  File "/opt/CatAtom2Osm/catatom2osm/__main__.py", line 131, in run
    process(options)
  File "/opt/CatAtom2Osm/catatom2osm/__main__.py", line 69, in process
    CatAtom2Osm.create_and_run(a_path, o)
  File "/opt/CatAtom2Osm/catatom2osm/app.py", line 104, in create_and_run
    app.run()
  File "/opt/CatAtom2Osm/catatom2osm/app.py", line 141, in run
    self.process_building()
  File "/opt/CatAtom2Osm/catatom2osm/app.py", line 449, in process_building
    self.building.move_address(self.address)
  File "/opt/CatAtom2Osm/catatom2osm/geo/layer/cons.py", line 426, in move_address
    self.move_entrance(
  File "/opt/CatAtom2Osm/catatom2osm/geo/layer/cons.py", line 365, in move_entrance
    bg = building.geometry()
UnboundLocalError: local variable 'building' referenced before assignment

Estoy ejecutando el programa en Linux. El contenido del archivo catatom2osm.log es el siguiente (dividido en las dos ejecuciones que he hecho de catatom2osm):

catatom2osm.log - primera ejecución
2022-02-04 11:38:12,880 - DEBUG - Usando Python 3.8.10
2022-02-04 11:38:15,289 - DEBUG - Inicializada la API de QGIS 3.10.4-A Coruña
2022-02-04 11:38:15,289 - DEBUG - Usando GDAL 3.0.4
2022-02-04 11:38:15,290 - INFO - Comienza el procesado de '21007'
2022-02-04 11:38:15,290 - DEBUG - Buscando la url para la capa 'CadastralParcels' de '21007'...
2022-02-04 11:38:15,560 - INFO - Descargando '21007/A.ES.SDGC.CP.21007.zip'
2022-02-04 11:38:17,891 - INFO - Leídos 509 características en '21007/A.ES.SDGC.CP.21007.cadastralzoning.gml'
2022-02-04 11:38:18,413 - DEBUG - Loaded 14 features in 'rusticzoning' from 'cadastralzoning.gml'
2022-02-04 11:38:18,414 - DEBUG - 1 multi-polygons splitted into 2 polygons in the 'rusticzoning' layer
2022-02-04 11:38:18,887 - DEBUG - Loaded 495 features in 'urbanzoning' from 'cadastralzoning.gml'
2022-02-04 11:38:18,887 - DEBUG - 68 multi-polygons splitted into 181 polygons in the 'urbanzoning' layer
2022-02-04 11:38:19,006 - INFO - Municipio: 'Aracena'
2022-02-04 11:38:19,008 - DEBUG - Buscando la url para la capa 'buildings' de '21007'...
2022-02-04 11:38:19,649 - INFO - Descargando '21007/A.ES.SDGC.BU.21007.zip'
2022-02-04 11:38:21,130 - INFO - Leídos 4281 características en '21007/A.ES.SDGC.BU.21007.building.gml'
2022-02-04 11:38:22,023 - INFO - Leídos 11659 características en '21007/A.ES.SDGC.BU.21007.buildingpart.gml'
2022-02-04 11:38:22,046 - INFO - Leídos 276 características en '21007/A.ES.SDGC.BU.21007.otherconstruction.gml'
2022-02-04 11:38:35,509 - DEBUG - Loaded 4281 features in 'building' from 'building.gml'
2022-02-04 11:38:39,188 - DEBUG - Loaded 11659 features in 'building' from 'buildingpart.gml'
2022-02-04 11:38:39,311 - DEBUG - Loaded 276 features in 'building' from 'otherconstruction.gml'
2022-02-04 11:38:39,315 - DEBUG - Buscando la url para la capa 'addresses' de '21007'...
2022-02-04 11:38:39,536 - INFO - Descargando '21007/A.ES.SDGC.AD.21007.zip'
2022-02-04 11:38:40,204 - INFO - Leídos 5629 características en '21007/A.ES.SDGC.AD.21007.gml'
2022-02-04 11:38:41,956 - DEBUG - Loaded 4661 features in 'address' from 'address.gml'
2022-02-04 11:38:41,959 - INFO - Leídos 4 características en '21007/A.ES.SDGC.AD.21007.gml'
2022-02-04 11:38:41,962 - INFO - Leídos 287 características en '21007/A.ES.SDGC.AD.21007.gml'
2022-02-04 11:38:42,653 - DEBUG - Joined 'postaldescriptor.gml' to 'address'
2022-02-04 11:38:43,315 - DEBUG - Joined 'thoroughfarename.gml' to 'address'
2022-02-04 11:38:43,403 - INFO - Descargando 'auxsrcs/portal_Huelva.csv'
2022-02-04 11:38:53,102 - INFO - Leídos 203361 características en 'auxsrcs/portal_Huelva.csv'
2022-02-04 11:39:00,190 - INFO - Analizadas 4404 direcciones de 'CDAU'
2022-02-04 11:39:00,201 - INFO - Añadidas 3159 direcciones de 'CDAU'
2022-02-04 11:39:03,203 - INFO - Generado 'address.geojson'
2022-02-04 11:39:03,205 - INFO - Descargando 'current_highway.osm'
2022-02-04 11:39:06,901 - INFO - Leído 'current_highway.osm': 2102 nodos, 426 vías, 7 relaciones
2022-02-04 11:39:06,959 - DEBUG - Reprojected the 'highway' layer to 'ETRS89 / UTM zone 29N' CRS
2022-02-04 11:39:08,362 - DEBUG - Eliminadas 526 direcciones rechazadas por nombre de vial
2022-02-04 11:39:08,475 - DEBUG - Reprojected the 'address' layer to 'WGS 84' CRS
2022-02-04 11:39:08,939 - DEBUG - Loaded 7294 nodes, 0 ways, 0 relations from 'address' layer
2022-02-04 11:39:09,810 - INFO - Generado 'address.osm': 7294 nodos, 0 vías, 0 relaciones
2022-02-04 11:39:09,849 - DEBUG - Reprojected the 'urbanzoning' layer to 'WGS 84' CRS
2022-02-04 11:39:09,871 - DEBUG - Reprojected the 'rusticzoning' layer to 'WGS 84' CRS
2022-02-04 11:39:10,096 - INFO - Generado '21007/boundary.poly'
2022-02-04 11:39:21,688 - INFO - Generado 'urban_zoning.geojson'
2022-02-04 11:39:22,099 - INFO - Generado 'rustic_zoning.geojson'
2022-02-04 11:39:22,190 - DEBUG - Loaded 608 features in 'rusticzoning' from 'urbanzoning'
2022-02-04 11:39:22,794 - INFO - Generado 'zoning.geojson'
2022-02-04 11:39:23,055 - INFO - Generado '21007/highway_names.csv'. Por favor, compruébelo y ejecute de nuevo
catatom2osm.log - segunda ejecución
2022-02-04 14:32:50,739 - DEBUG - Usando Python 3.8.10
2022-02-04 14:32:51,525 - DEBUG - Inicializada la API de QGIS 3.10.4-A Coruña
2022-02-04 14:32:51,525 - DEBUG - Usando GDAL 3.0.4
2022-02-04 14:32:51,525 - INFO - Comienza el procesado de '21007'
2022-02-04 14:32:51,660 - INFO - Leídos 509 características en '21007/A.ES.SDGC.CP.21007.cadastralzoning.gml'
2022-02-04 14:32:51,880 - DEBUG - Loaded 14 features in 'rusticzoning' from 'cadastralzoning.gml'
2022-02-04 14:32:51,880 - DEBUG - 1 multi-polygons splitted into 2 polygons in the 'rusticzoning' layer
2022-02-04 14:32:52,075 - DEBUG - Loaded 495 features in 'urbanzoning' from 'cadastralzoning.gml'
2022-02-04 14:32:52,075 - DEBUG - 68 multi-polygons splitted into 181 polygons in the 'urbanzoning' layer
2022-02-04 14:33:04,338 - DEBUG - Merged 4 close vertices in the 'rusticzoning' layer
2022-02-04 14:33:04,338 - DEBUG - Created 7 topological points in the 'rusticzoning' layer
2022-02-04 14:33:53,321 - DEBUG - Simplified 8792 vertices in the 'rusticzoning' layer
2022-02-04 14:33:54,574 - DEBUG - Deleted 3 invalid geometries in the 'urbanzoning' layer
2022-02-04 14:33:54,574 - DEBUG - Deleted 2 spike vertices in the 'urbanzoning' layer
2022-02-04 14:33:56,961 - DEBUG - Merged 35 close vertices in the 'urbanzoning' layer
2022-02-04 14:33:56,961 - DEBUG - Created 88 topological points in the 'urbanzoning' layer
2022-02-04 14:34:01,293 - DEBUG - Simplified 13627 vertices in the 'urbanzoning' layer
2022-02-04 14:34:01,313 - INFO - Municipio: 'Aracena'
2022-02-04 14:34:01,919 - INFO - Leídos 4281 características en '21007/A.ES.SDGC.BU.21007.building.gml'
2022-02-04 14:34:02,813 - INFO - Leídos 11659 características en '21007/A.ES.SDGC.BU.21007.buildingpart.gml'
2022-02-04 14:34:02,847 - INFO - Leídos 276 características en '21007/A.ES.SDGC.BU.21007.otherconstruction.gml'
2022-02-04 14:34:05,268 - DEBUG - Loaded 4281 features in 'building' from 'building.gml'
2022-02-04 14:34:09,476 - DEBUG - Loaded 11659 features in 'building' from 'buildingpart.gml'
2022-02-04 14:34:09,561 - DEBUG - Loaded 276 features in 'building' from 'otherconstruction.gml'
2022-02-04 14:34:09,848 - INFO - Leídos 5629 características en '21007/A.ES.SDGC.AD.21007.gml'
2022-02-04 14:34:11,508 - DEBUG - Loaded 4661 features in 'address' from 'address.gml'
2022-02-04 14:34:11,511 - INFO - Leídos 4 características en '21007/A.ES.SDGC.AD.21007.gml'
2022-02-04 14:34:11,514 - INFO - Leídos 287 características en '21007/A.ES.SDGC.AD.21007.gml'
2022-02-04 14:34:12,178 - DEBUG - Joined 'postaldescriptor.gml' to 'address'
2022-02-04 14:34:12,833 - DEBUG - Joined 'thoroughfarename.gml' to 'address'
2022-02-04 14:34:14,193 - INFO - Leídos 203361 características en 'auxsrcs/portal_Huelva.csv'
2022-02-04 14:34:17,136 - INFO - Analizadas 4404 direcciones de 'CDAU'
2022-02-04 14:34:17,145 - INFO - Añadidas 3159 direcciones de 'CDAU'
2022-02-04 14:34:19,466 - INFO - Generado 'address.geojson'
2022-02-04 14:34:19,548 - DEBUG - Eliminadas 7721 direcciones rechazadas por nombre de vial
2022-02-04 14:34:19,549 - INFO - Descargando 'current_address.osm'
2022-02-04 14:34:39,702 - INFO - Leído 'current_address.osm': 96 nodos, 12 vías, 4 relaciones
2022-02-04 14:34:41,438 - DEBUG - Removed 42 building parts outside the outline
2022-02-04 14:34:41,438 - DEBUG - Deleted 252 building parts with no floors above ground
2022-02-04 14:34:41,910 - DEBUG - 893 multi-polygons splitted into 2557 polygons in the 'building' layer
2022-02-04 14:34:49,277 - DEBUG - Deleted 4 invalid geometries in the 'building' layer
2022-02-04 14:34:49,277 - DEBUG - Deleted 4 zig-zag vertices in the 'building' layer
2022-02-04 14:34:49,277 - DEBUG - Deleted 6 spike vertices in the 'building' layer
2022-02-04 14:35:12,834 - DEBUG - Merged 1499 close vertices in the 'building' layer
2022-02-04 14:35:12,834 - DEBUG - Created 6032 topological points in the 'building' layer
2022-02-04 14:35:17,991 - DEBUG - Located 2 swimming pools over a building
2022-02-04 14:35:17,992 - DEBUG - Translated 5945 level values to the outline
2022-02-04 14:35:17,992 - DEBUG - Merged 4424 building parts to the outline
2022-02-04 14:35:17,992 - DEBUG - Merged 986 adjacent parts
2022-02-04 14:35:24,812 - DEBUG - Simplified 12247 vertices in the 'building' layer

¿Puedo aportar cualquier otra información que sea de interés para el error?

agarciamontoro commented 2 years ago

Algunos datos más:

Así que parece que pueda ser algo específico de Aracena.

agarciamontoro commented 2 years ago

Y algo más de información, que he obtenido añadiendo algunas líneas de debug alrededor de la parte que da fallos, en la función move_entrance del archivo geo/layer/cons.py:

        log.debug(_("Moving entrance for %d buildings"), len(ad_buildings))
        for bu in ad_buildings:
            log.debug(_("New building with local ID %s"), bu["localid"])
            bg = bu.geometry()
            log.debug(_("\tGeometry: %s"), bg)
            d, c, v = bg.closestSegmentWithContext(point)[:3]
            log.debug(_("\tDistance: %d"), d)
            if d < distance:
                (building, distance, closest, vertex) = (bu, d, c, v)
        bg = building.geometry()

El último log antes del fallo es:

2022-02-04 20:28:35,672 - DEBUG - Moving entrance for 1 buildings
2022-02-04 20:28:35,672 - DEBUG - New building with local ID 2718206QC1021N
2022-02-04 20:28:35,672 - DEBUG -       Geometry: <QgsGeometry: Polygon ((712587.98649999999906868 4201568.81300000008195639, 712588.79105609050020576 4201562.65335558727383614, 712589.46450000000186265 4201557.49749999959021807, 712578.1215000000083819 4201557.33800000045448542, 712576.50500000000465661 4201567.84599999990314245, 712587.98649999999906868 4201568.81300000008195639))>
2022-02-04 20:28:35,672 - DEBUG -       Distance: 278044555624

Así que parece que el edificio que está dando problemas tiene localId = 2718206QC1021N, que entiendo que es este: https://www1.sedecatastro.gob.es/CYCBienInmueble/OVCConCiud.aspx?UrbRus=U&RefC=2718206QC1021N0001HY&esBice=&RCBice1=&RCBice2=&DenoBice=&from=OVCBusqueda&pest=rc&RCCompleta=2718206QC1021N&final=&del=21&mun=7

Parece ser que la distancia que devuelve closestSegmentWithContext es 278044555624, que es mayor que 9e9. En esta llamada a move_entrance, ad_buildings sólo tiene un edificio, así que building nunca se inicializa.

Creo que mis conocimientos no dan para mucho más, porque aún no entiendo bien cómo funciona el programa (aunque me gustaría, sobre todo para poder contribuir). Si necesitas cualquier otra cosa, dímelo y veo en qué puedo ayudar :)

¡Gracias!

agarciamontoro commented 2 years ago

Este apaño funciona, y saca los datos para Aracena sin problema:

        bu = ad_buildings[0]
        bg = bu.geometry()
        d, c, v = bg.closestSegmentWithContext(point)[:3]
        (building, distance, closest, vertex) = (bu, d, c, v)

        for bu in ad_buildings[1:]:
            bg = bu.geometry()
            d, c, v = bg.closestSegmentWithContext(point)[:3]
            if d < distance:
                (building, distance, closest, vertex) = (bu, d, c, v)

Pero no estoy seguro de si es lo que se quiere hacer o no. Si lo veis correcto, puedo abrir una PR.

javiersanp commented 2 years ago

Confirmado. Muy bien documentado.

javiersanp commented 2 years ago

Captura de pantalla de 2022-02-05 20-59-42 Se están cargando las direcciones CDAU con coordenadas y referencia catastral incorrecta.

javiersanp commented 2 years ago

Error no relacionado:

2022-02-05 21:14:46,288 - INFO - Descargando 'auxsrcs/portal_Cordova.csv'                                               
2022-02-05 21:14:46,967 - ERROR - 404 Client Error: Not Found for url: https://www.juntadeandalucia.es/institutodeestadisticaycartografia/cdau/portales/portal_Cordova.csv

Cordoba con v

agarciamontoro commented 2 years ago

¡Gracias por echarle un vistazo!

Se están cargando las direcciones CDAU con coordenadas y referencia catastral incorrecta.

Pero están como duplicadas, ¿no? Las siguientes dos capturas son de Carboneras, una en medio del mar (37.9179, -12.5444) y la otra con las coordenadas correctas (37.9179, -6.5444) . Parece que están casi duplicadas al completo:

En el mar Coordenadas correctas
image image

Avísame si hay alguna forma en la que pueda ayudar a resolver el problema :)

javiersanp commented 2 years ago

Los datos de CDAU están en CRS 25830, los de Catastro en CRS 25829.

javiersanp commented 2 years ago

02dfa98d Commit que corrige el problema reproyectando las coordenadas.

javiersanp commented 2 years ago

Pero están como duplicadas, ¿no?

Las del mar son las del CDAU, las correctas las de Catastro.

javiersanp commented 2 years ago

@agarciamontoro Creo que está resuelto el problema. Comprueba que la versión del programa es 2.5.3 (catatom2osm -v). Haz una copia del highway_names.csv y bórralo para que se repita el proceso de crearlo. Repite la edición del highway_names.csv aprovechando todo lo que puedas de la copia que hiciste. Haz la segunda ejecución y ahora no debería de dar error. Si quieres puedes comprobar el address.geojson (todas las direcciones fuuente) y el address.osm (las direcciones filtradas que terminan en los archivos de tareas).

Muy bien trazado el error. Gracias por encontrar el problema.

agarciamontoro commented 2 years ago

Lo acabo de comprobar en local y con la nueva versión funciona sin problema. Lo he probado desde cero, borrando todos los datos que tenía (lo he hecho antes de leer tu mensaje, pero no pasa nada porque no había hecho muchas ediciones). ¡Muchas gracias!

Los datos de CDAU están en CRS 25830, los de Catastro en CRS 25829.

Entiendo que esto son distintos tipos de sistemas de coordenadas, ¿es así? Esto queda ya fuera del ámbito de la issue, así que si quieres lo hablamos por cualquier otro lado. Es simplemente por aprender más sobre todo esto.

Muy bien trazado el error. Gracias por encontrar el problema.

Gracias a ti por la velocidad en arreglarlo :) Por mí ya se puede cerrar el issue.

javiersanp commented 2 years ago

https://es.m.wikipedia.org/wiki/Sistema_de_coordenadas_universal_transversal_de_Mercator https://en.m.wikipedia.org/wiki/Spatial_reference_system https://epsg.io/25830 https://es.m.wikipedia.org/wiki/Sistema_Europeo_de_Referencia_Terrestre_1989 Si son distintos sistemas de referencia, bueno en realidad distintos husos (el 29 y el 30) del sistema ETRS89.

javiersanp commented 2 years ago

Te veo buenas mañas. Si te apetece colaborar en el programa mira #90.