jueves, 21 de julio de 2011

Reportando zonas propensas a inundaciones en OpenStreetMap...

Hola Maperos!!!

Bueno, lo que pensaba sería un sencillo procedimiento para reportar las áreas inundadas (ver posts anteriores) en OpenStreetMap (OSM) no resultó tan sencillo. Decidí utilizar el script ogr2osm para convertir un archivo shapefile en un archivo con extensión .osm que pueda ser leido por JOSM, uno de los tantos clientes para manipular datos en OSM, y luego fácilmente reportarlo a sus repositorios. El problema fue que los shapefiles originados desde la clasificación de los rasters presentaban siluetas 'pixeladas' (ver figura) y el número total de nodos resultaba exageradamente alto.

Trabajando solo con la selección de los 10 más grandes cuerpos de agua, el número total era superior a los 37000 nodos. Generar el archivo .osm tomaba muchísimo tiempo y se obtenian archivos de tamaño superior a los 190 Mb. Además de que no resultaría para nada práctico subir un archivo de estas características, JOSM (o mejor, mi pobre laptop) ni siquiera era capaz de abrir un archivo de estas dimensiones. La mejor solución para este caso era usar técnicas de suavizado o generalización. La idea es eliminar un porcentaje de los nodos, sacrificando el detalle pero favoreciendo la manipulación, sin perder la información más relevante del mapa.

El algoritmo Douglas-Peucker (DP) es, tal véz, la técnica más utilizada para simplificar mapas. QGIS posee su propia implementación ([Vector -> Geometry tools -> Simplify geometries]) pero la verdad no me funcionó para nada. GRASS implementa este algoritmo, y otros, con el comando v.generalize. A travéz del plugin de GRASS para QGIS se puede tener acceso a toda su funcionalidad desde esta interfaz. Entre las opciones más interesantes esta Snake method for line smoothing (ver figura) que da una versión mucho más estilizada del mapa pero aún con gran cantidad de nodos. La version de DP en GRASS tampoco ofreció una gran mejora, solo pudo eliminar un 33% de los nodos.

La solución final fue MapSharper.org. Este es un servicio web que permite aplicar los algoritmos Douglas-Pecker y Visvalingam-Whyatt online. Aquí se puede acceder a un demo de la aplicación en Internet. Usando MapSharper la simplificación del mapa resultó trivial. El siguiente video ilustra todo el proceso:


Una vez con la version .osm del shapefile es muy simple abrirlo desde JOSM, asignarle la etiqueta flood_prone=yes y publicarlo en la base de datos de OpenStreetMap para que este a disposición de la comunidad. Se debe aclarar que antes de convertir el mapa a .osm se debe reproyectar al sistema de coordenadas WGS 84 (Grados, minutos y segundos) usado por OSM y la mayoria de aplicaciones de SIG en la web.

1 comentario:

andres sin miedo dijo...

Via [federico.explorador AT nevados.org] en la lista de correo de OpenStreetMap Colombia:

"Temo que con la eliminación de nodos fuiste demasiado lejos: mirando el video de tu tutorial, queda aproximadamente un nodo sobre cada 400m de distancia, que es demasiado poco. He usado el wms suministrado por CERN en JOSM http://cernunosat05.cern.ch/arcgis/services/FL-20110521-COL/Flood_Analysis/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&Styles=default&; entonces por la resolución disponible de la imagen me parece razonable que haya un nodo aproximadamente cada 100 metros.

Es decir, del monto original de nodos tendrías que reducir no a un 10%, sino a un 40% solamente. O incluso, no eliminar ningún nodo, sino reducir el tamaño de las áreas que se importan a OSM y ser más selectivo para la escogencia de estas áreas. Mas detalle que hay sobre todo alrededor de las zonas urbanas, más utilidad tiene para el mapeo en función de la prevención de desastres con las autoridades locales y las comunidades afectadas."