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 el zoning #69

Closed Crashillo closed 2 years ago

Crashillo commented 2 years ago

Al ejecutar el zoning, después de largo tiempo:

$ catatom2osm -z 28900
Using default tag: latest
latest: Pulling from egofer/catatom2osm
Digest: sha256:ea58253ca395c1d8020e204b619e608710faea4a848d7cd42d58931adc92cf43
Status: Image is up to date for egofer/catatom2osm:latest
2021-12-13 09:57:28,235 - INFO - Comienza el procesado de '28900'
2021-12-13 09:57:30,639 - INFO - Leídos 12141 características en '28900/A.ES.SDGC.CP.28900.cadastralzoning.gml'
2021-12-13 09:57:46,708 - INFO - Municipio: 'Madrid'                                                                                                                                                               
Traceback (most recent call last):                                                                                                                                                                                 
  File "/usr/local/bin/catatom2osm", line 11, in <module>
    load_entry_point('catatom2osm', 'console_scripts', 'catatom2osm')()
  File "/opt/CatAtom2Osm/catatom2osm/__main__.py", line 114, in run
    process(options)
  File "/opt/CatAtom2Osm/catatom2osm/__main__.py", line 37, in process
    app.run()
  File "/opt/CatAtom2Osm/catatom2osm/app.py", line 137, in run
    self.output_zoning()
  File "/opt/CatAtom2Osm/catatom2osm/app.py", line 342, in output_zoning
    self.rustic_zoning.export_poly(out_path)
  File "/opt/CatAtom2Osm/catatom2osm/layer.py", line 1147, in export_poly
    mun = Geometry.merge_adjacent_features([f for f in self.getFeatures()])
  File "/opt/CatAtom2Osm/catatom2osm/layer.py", line 214, in merge_adjacent_features
    geom = geom.combine(p.geometry())
AttributeError: 'NoneType' object has no attribute 'combine'
Crashillo commented 2 years ago

https://github.com/OSM-es/CatAtom2Osm/blob/31bf6279d9c28bb148fd130c06eb92fd5ca5b76b/catatom2osm/layer.py#L212-L214

La función geometry debe devolver un nulo. Por eso decía de meter un log ahí, y que siga el proceso:

try:
  geom = geom.combine(p.geometry())  
except: 
  print(geom, p, ....)
  continue
javiersanp commented 2 years ago

Eso es meter el problema debajo de la alfombra. Hay que averiguar por qué sale nulo el resultado de hacer la combinación. Hay que irse a versiones anteriores, comprobar que no pasaba, ir avanzando versión hasta detectar en cual empezó a ocurrir y aislar el cambio que introdujo el problema. Si encontrase otro municipio que diera el mismo problema y tardara menos tiempo ayudaría bastante.

Crashillo commented 2 years ago

No es necesario poner el continue para que no pete. Pero sabiendo que ahí pueden producirse errores, escupir un log más detallado siempre será buena opción.

javiersanp commented 2 years ago

Con la opción --log=DEBUG sale un log más detallado.

El mar, 14 dic 2021 a las 13:11, Hugoren Martinako (< @.***>) escribió:

No es necesario poner el continue para que no pete. Pero sabiendo que ahí pueden producirse errores, escupir un log más detallado siempre será buena opción.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/OSM-es/CatAtom2Osm/issues/69#issuecomment-993524369, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAMIBRO6ETZGY2DLDBURQT3UQ4667ANCNFSM5J63EZ5Q . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

javiersanp commented 2 years ago

El problema lo introducía la zona con etiqueta '022' que tiene geometría incorrecta (isGeosValid). Empezó a aparecer con el commit cb0d435 al cambiar el orden de la llamada a self.rustic_zoning.difference(self.urban_zoning) Las geometrías incorrectas son reparadas en el método append de ZoningLayer, pero vuelven a aparecer algunas después de hacer la diferencia. En realidad es mejor calcular el polígono administrativo antes de la diferencia. Cambio el orden de la operación y se soluciona.

javiersanp commented 2 years ago

@Crashillo tienes los archivos de zonas en https://wetransfer.com/downloads/a7d017864c6a977afc59ef37983ec0c920211216132500/402f72952145fde693a5cc80e5afd69f20211216132523/e65487