domingo, 9 de octubre de 2011

Y todo por una impresora...

Hola a todos,

Este post es solo para compartir los slides de una charla que tuve la oportunidad de dictar primero en el marco del FLISoL 2011 y después en la Universidad Mariana gracias a una gentil invitación de mi amigo Cristhian Lombana. La charla se titula igual que este post y trata sobre como una loca idea en 1984 acerca de liberar el código fuente de los programas informáticos ha revolucionado los modelos de desarrollo y de negocios (no solo de software) y ha trascendido a otras áreas del conocimiento e impactado de manera importante diversos sectores e industrias, particularmente la de los contenidos digitales.

Pueden descargar las 'fuentes' en formato ODP en este link o los 'binarios' en formato PDF aqui.
Gracias Xerox!!!

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.

lunes, 18 de julio de 2011

Análisis de Imagenes Landsat TM para la Identificación de Áreas Propensas a Inundaciones.

Hola maperos!!!

Este post es para resumir el conjunto de entradas dedicadas al análisis de imagenes Landsat TM para identificar áreas propensas a inundaciones usando Software Libre. Como caso de estudio se utilizó el área del bajo cauce del rio Magdalena en el norte de Colombia durante las inundaciones del primer semestre del 2011. Aquí están los enlaces a cada uno de los tutoriales:


Happy Mapping!!!

viernes, 8 de julio de 2011

Identificando cuerpos de agua y calculando estadísticas de imagenes Landsat clasificadas con SAGA GIS y QGIS

Hola maperos!!!

Llegando al final del conjunto de entradas dedicadas al análisis de imagenes Landsat para identificar áreas propensas a inundaciones en esta oportunidad veremos como tratar las imagenes clasificadas que obtuvimos en el post anterior, extraer los cuerpos de agua de cada imagen y restar uno del otro para poder cuantificar la extensión de las zonas afectadas.

La imagen clasificada que arroja SAGA GIS no es más que un raster donde cada pixel tiene un valor que representa una determinada clase (de 0 a 3 en nuestro ejemplo). Identificar a que clase pertenece cada valor será un trabajo del análista y dependerá de las características de la imagen. Por ejemplo, en algunos casos la nubosidad puede hacer parte de la clasificación o, en otros, diferentes tipos de vegetación o suelos pueden interpretarse como distintas clases por el clasificador. Sin embargo, para nuestro caso nuestro mayor interés será hacia la correcta identificación de los cuerpos de agua, el resto de las clases pueden ser omitidas.

Usando el diálogo de las propiedades de la imagen vamos a asignar un color más adecuado a cada clase en la toma clasificada para el 2011 aunque al final se extraerá la clase que se corresponde a los cuerpos de agua, que para este caso no solo incluyen rios y lagos sino también las zonas afectadas por las inundaciones. Para hacer esto usamos el comando [Raster -> Raster Calculator] en QGIS para hacer una simple operación que descarte las demás clases dejando solo la de nuestro interés. La operación:

Raster@banda = valor

hará que a todos los pixeles que correspondan al valor especificado se les asigne 1 y a todos los demás se les cambie a un valor de 0. En nuestro raster, los cuerpos de agua están representados por un valor de 2 por lo que la operación:

RioClass2011@1 = 2


será suficiente para aislar los pixeles que representan los cuerpos de agua en un nuevo raster. Solo para facilitar la visualización editaremos las propiedades de la nueva imagen para dar transparencia a los pixeles que no nos interesan y asignar un color más apropiado a los cuerpos de agua. El siguiente video ilustra lo dicho:


El proceso se repite para la imagen del 2010. Ahora contamos con dos imagenes cuyos pixeles representan con un 1 las áreas cubiertas por agua y con un 0 las que no. Usando una simple sustracción en el Raster Calculator podremos obtener aquellos pixeles que en el 2011 están cubiertos por agua (1) y no lo estaban en el 2010 (0), con lo que podriamos sugerir que se tratan de zonas afectadas por las inundaciones. El siguiente video muestra como restar de los pixeles de la imagen del 2011, sus correspondientes en el 2010:


Ahora contamos con una imagen raster donde se puede visualizar que el impacto de las inundaciones del 2011 en Colombia a sido considerable en el área de estudio, pero para cuantificar de manera precisa los alcances de las inundaciones debemos trasformar el raster en un imagen vectorial. Para hacerlo, usamos el comando [Raster -> Polygonize] en QGIS (este proceso puede tomar varios minutos). Esto nos permitirá medir el área de los polígonos resultantes usando las propiedades de la tabla de atributos que se genera junto con el archivo de polígonos (Shapefile). Esta tabla introduce un nuevo registro por cada polígono en el archivo al cual se le pueden asociar una serie de características (nombre, área, perimetro, etc.).

Para nuestro caso, primero seleccionamos solo los polígonos con valor de 1 que vienen desde el raster y al resultado adicionamos una nueva columna que calcula el área de cada polígono en Hectáreas (ha). Hay que aclarar que el Sistema de Referencia de Coordenadas original de las imagenes de Landsat (UTM Zone 18N) facilita el proceso ya que los valores calculados estarán en metros cuadrados, es por eso que solo debemos dividir por 10.000 para obtener el valor en hectáreas. Luego usamos el plugin 'Statist' para calcular las estadísticas del campo adicionado y obtener el total de hectáreas afectadas. El siguiente video muestra estos ultimos pasos:


De los resultados podemos apreciar que en total hubo alrededor de 37.241,64 ha de zonas afectadas por las inundaciones en la región y, aunque hay que hacer algunas consideraciones y limitaciones al estudio, sin duda es una cantidad preocupante. El cuerpo de agua más extenso alcanzó las 3.500 ha!!! Imagínense un solo charco de 3.500 hectáreas que antes no estaba ahí. Comparando la mayor concentración de zonas afectadas con la imagen del 2010 podemos apreciar que buena parte se trata de áreas cultivables.

Limitaciones del estudio.

Es importante también aclarar que estos valores se deben tomar con cuidado. Existen algunas limitaciones en este análisis que se deben discutir. Primero, las dos imágenes Landsat corresponden a diferentes meses del año, puede ser que no sea del todo estricto comparar los meses de Enero y Marzo. Puede que sea normal que ciertas áreas se inunden a finales de este ultimo mes. Aqui es muy importante contrastar los resultados finales con experiencia y conocimiento local para evaluar si la imagen del 2010 refleja bien el comportamiento 'natural' de los cuerpos de agua.

Otro inconveniente se da a la hora de la clasificación. La nubosidad introduce grandes problemas en esta etapa. Muchas sombras de las nubes son confundidas con cuerpos de agua por el clasificador y estos pueden impactar en el número de hectáreas afectadas. Posibles soluciones son la eliminación manual de estos 'falsos' cuerpos de agua o el uso de mascaras para eliminar las nubes y sus sombras antes de la clasificación. La conversión desde una imagen raster a sus correspondientes poligonos también puede introducir un aumento en el tamaño de los cuerpos de agua.

Bueno, con esto terminamos las entradas dedicadas al análisis de imagenes Landsat para la detección de zonas propensas a inundaciones. En un siguiente post espero poder compartir un sencillo procedimiento para reportar estas zonas en OpenStreetMap para que queden a disposición de la comunidad.

martes, 14 de junio de 2011

Clasificando imagenes Landsat con SAGA GIS

Hola Comunidad!!!

Siguiendo con nuestra serie de entradas sobre el análisis y detección de áreas propensas a inundaciones usando imágenes Landsat y software libre, en esta entrada veremos como hacer un clip a nuestra área de interés y aplicar un algoritmo de clasificación para extraer los cuerpos de agua. Como habíamos dicho en la entrada anterior, es muy pesado trabajar con la imagen completa de Landsat (alrededor de 7800 x 6900 pixeles por cada banda) por lo que usaremos el comando [Raster -> Clipper] para recortar la imagen. Partiremos de los virtual rasters (Rio2010 y Rio2011) generados anteriormente para hacer el corte directamente sobre las 7 bandas para los dos casos. El siguiente video ilustra el proceso:


Como se puede apreciar en los videos de la serie, las entradas del menu [Raster] son interfaces que nos ayudan a construir debidamente un comando de la librería GDAL y sus respectivos parámetros. Las líneas que se forman en la parte inferior de la interface las podríamos ejecutar perfectamente en la consola de línea de comandos. Es importante guardar la extensión del clip que hacemos para posteriores análisis. Es posible que se tenga acceso a una nueva imagen en el futuro (ya sea Landsat o de otro proveedor) y estas coordenadas resultarán útiles para continuar el estudio en la misma área de interés.

Ahora que hemos limitado la región de estudio podremos efectuar la clasificación de manera más ágil. Los algoritmos de clasificación se basan en los valores que registra un objeto en particular en cada una de las 7 bandas (o en general sobre el espectro electromagnético). Por ejemplo, la vegetación en general tendrá bajos valores en la bandas azul y rojo pero reflejará más el verde (lo que explica su coloración característica). Sin embargo, lo que más caracteriza la vegetación es el fuerte cambio entre la banda roja e infraroja, esto se conoce como el 'Red Edge'. Por otro lado, el agua se caracteriza por sus bajos valores en las bandas infrarojas. En términos generales, los valores característicos de un determinado objeto en el espectro electromagnético generan lo que se conoce como su firma espectral (o spectral signature). Los algoritmos de clasificación usarán la firma espectral de cada pixel para agrupar píxeles similares en una misma categoría y diferenciarlos de los otros. El siguiente es un corto video que muestra los valores que tienes diferentes objetos en las 7 bandas de la imagen Landsat usando el plugin 'Value Tool':


Para hacer la clasificación de la imagen vamos a usar la herramienta SAGA. En el siguiente video se puede ver como cargar nuestro clip de la imagen Landsat, configurar los parametros y ejecutar el algoritmo de clasificacion y guardar de vuelta la imagen clasificada para trabajarla desde QGIS. Aunque el video solo muestra el proceso para la imagen del 2010, el procedimiento es el mismo para el clip del 2011.


Como se puede apreciar, la clasificación de la imagen puede tomar mucho tiempo, es aquí donde toma relevancia el clip a la zona de interés. Sin embargo, los principales cambios ocurren en las primeras iteraciones y, si el nivel de cambio es aceptable, es posible deterner el proceso al ejecutar de nuevo el módulo de clasificación. El resultado de la clasificación será una nueva imagen donde cada píxel tendrá uno de 4 valores posibles (0,1,2 o3) dependiendo del cluster (o grupo) al que pertenece.

Bueno, en la siguiente entrega veremos como visualizar correctamente las imágenes clasificadas en QGIS, extraer los cuerpos de agua para cada imagen e identificar que áreas estan cubiertas por agua en el 2011 y no lo estaban en el 2010.

jueves, 2 de junio de 2011

Visualizando imágenes Landsat en Quantum GIS...

Hola comunidad!!!

Continuando con la serie de tutoriales dedicadas al análisis de áreas propensas a inundaciones vamos a ver algunas herramientas para visualizar y manipular imágenes Landsat. Existen varias alternativas para manipular imágenes satelitales y hacer análisis geográfico. En el mundo del open source/software libre podemos nombrar GRASS, SAGA, SPRING, Monteverdi, gvSIG, OpenJump, Quantum GIS (QGIS), entre otros. Las características y ventajas de cada uno son diversas y dependerá de los gustos cual escoger. En este pequeño tutorial vamos a introducir algunas ideas sobre el uso de QGIS. QGIS ha logrado combinar varias técnicas y métodos en una interfáz de fácil uso. La gran ventaja que distingue a QGIS del resto es la gran disponibilidad de plugins de terceros. Es así como, desde la interfaz de QGIS, tenemos acceso a útiles librerias como GDAL (para manipulación de imágenes raster), fTools (para manipulación de imagenes vectoriales), una gran mayoria de comandos GRASS y análisis estadístico con R.

Si estas interesado en compilar desde las fuentes la última versión en desarrollo de QGIS (1.7.0 Wroclaw) aqui hay un excelente tutorial. También se puede descargar desde la página web (Windows) o instalar desde repositorios (Linux), pero en el momento solo esta disponible la version estable (1.6.0 Copiapó). La Open Source Geospatial Foundation compila desde hace un par de años una distribución Live DVD o Live USB basada en Linux con varias de las herramientas mencionadas aqui ya preinstaladas, incluyendo sus instaladores para windows.

Para activar los plugins en QGIS accedemos al menú [Plugins -> Manage Plugins]. Los plugins contenidos en Manage Plugins podriamos decir que son los plugins oficiales pero existe uno particularmente útil, llamado Plugin Installer, que permite instalar los plugins de terceros. Una vez instalado este plugin se puede acceder a la lista de repositorios y plugins externos a través del menú [Plugins -> Fetch Python Plugins] (Para tener acceso a los plugins se debe tener instalado Python). Entre los más útiles para activar/instalar yo recomiendo: GdalTools, RGB Composition, RasterCalc, Statist, OpenStreetMap plugin, Value Tool, fTools y manageR. La lista es muy extensa, desde plugins para la conexión a bases de datos georeferenciales como PostGIS hasta visualización de imágenes desde Google Maps. Hay para escoger.


Después de instalar los plugins GdalTools y fTools deberían aparecer dos nuevos menús (Raster y Vector). La gran mayoria de plugins aparecerán como nuevos iconos en la barra de herramientas o estarán disponibles en el menú Plugins.

Hay algunos plugins y funciones de QGIS que aparecen como paneles en la interfáz. Haciendo click derecho en un área libre de la barra de herramientas se puede escoger u ocultar que paneles desplegar.


Bueno, la idea de esta entrada será usar algunos de los plugins y herramientas de QGIS para analizar y preparar las imágenes que descargamos desde el repositorio de Landsat en la entrada anterior. Para eso ya hemos descomprimido las imágenes JPEG y GeoTIFF en carpetas diferentes para el año 2010 y 2011. Por facilidad, vamos a seguir el siguiente video para ver como cargar las imagenes y hacer una comparación inicial usando las True-Colour composite (JPEG) de las escenas (En lo posible, mira los videos en HD y pantalla completa).


Como dijimos, las imágenes JPEG son utiles para hacer un primer análisis y escoger el área de interés. Después de revisar las tomas, es hora de usar las 7 bandas de la imagen Landsat para preparar nuestro conjunto de datos para un analísis más detallado. Trabajar las 7 bandas en archivos GeoTIFF separados es incómodo y tomará más tiempo por lo que siempre es buena práctica construir un catalogo que integre las 7 tomas en una sola imagen. Para eso utilizaremos el comando [Raster -> Build Virtual Raster].

Después podremos efectuar diferentes combinaciones de las bandas, o composites, para obtener diferentes visualizaciones. La más comun es conocida como True-Colour composite y es la que asigna las Bandas 3, 2 y 1 a los canales RGB de la visualización respectivamente (como en el caso de las imágenes JPEG). De esta manera logramos un efecto real tal cual lo percibirían nuestros ojos o una cámara fotográfica cualquiera. Otro composite muy útil es el False-Colour composite, este asigna las bandas 4, 3 y 2 a los canales RGB. De esta manera el canal 4 (Infrarojo) se pintará de rojo en nuestra visualización permitiendo ver los objetos que reflejan la radiación infraroja, como la vegetación saludable, en un color rojo intenso. Por el contrario, los objetos que absorben la luz infraroja, como el agua, se verán muy oscuros. Como dijimos, las bandas infrarojas resultan extremadamente utiles si queremos categorizar cuerpos de agua. El siguente video explica los pasos:


Como pueden ver, trabajar con las imágenes completas de Landsat, y aún más con las 7 bandas, puede ser muy pesado. En el próximo post veremos como recortar la escena para limitar nuestra área de interés (el cauce bajo del Rio Magdalena) y efectuar una clasificación de los cuerpos de agua para cada toma.

domingo, 22 de mayo de 2011

Descargando imágenes Landsat TM y ETM+...

Hola comunidad!!!

He decidido iniciar una serie de entradas para explicar un interesante procedemiento para analizar imágenes satelitales y detectar cambios en un área específica. La idea de esta serie de tutoriales es recrear un caso de estudio durante la emergencia invernal en Colombia en el primer semestre del 2011 que tuve la oportunidad de trabajar con el equipo de OpenStreetMap Colombia y #BrigadaDigital. La primera parte del tutorial consistirá entonces en introducir las herramientas que se utilizarán, el aŕea de estudio y como obtener los conjuntos de datos.

Este caso de estudio se centrará en la región de la Cienaga de la Mojana y el cauce bajo del Rio Magdalena entre los Departamentos de Bolivar y Cesar en Colombia.


Para el análisis se utilizará herramientas de código abierto. La imagen muestra una captura de pantalla de Quantum GIS desplegando varios shapefiles con los departamentos y municipios de Colombia y dos imágenes Landsat del área de estudio. Quantum GIS (QGIS) es una completa suite de soporte y análisis a sistemas de información geográficos soportado por la Open Source Geospatial Foundation de libre acceso y descarga. Un excelente tutorial para su instalación y compilación desde código fuente para diferentes plataformas puede ser consultado aqui.

En esta primera entrada nos centraremos en como descargar las dos imágenes Landsat desde el portal del Earth Resources Observation and Science (EROS) Center. Una vez en el portal, este abre un pequeño pero muy completo applet (java es requerido) desde donde es posible descargar libremente las imágenes. Existen varios conjuntos de datos pero nos limitaremos a consultar los archivos del programa de satélites Landsat TM y ETM+. Por defecto, la colección desplegada son las imágenes ETM+ pero desafortunadamente estas cuentan con un defecto en la corrección de la toma que introduce unas franjas en la imagen, por lo que para este caso usaremos la colección Landsat TM (Thematic Mapper). A pesar de esto, ETM+ (Enhanced Thematic Mapper Plus) es una gran fuente actualizada de datos de muy buena resolución. La principal diferencia entre TM y ETM+ es que la ultima trae una banda pancromática que, después de cierto proceso, permite aumentar la resolución espacial de la imagén a pixels de 15x15 metros. La resolución máxima de las imagenes TM es de 30x30 metros.

Dado que para el caso de estudio 30 metros son suficientes y que buena parte del área de La Mojana se encuentra afectada por el error de corrección de ETM+ utilizaremos solo imágenes TM. Para cambiar la colección en el Applet vamos a [Collection -> Landsat Archive -> Landsat 4-5 TM]. Los otros parámetros a ajustar son la latitud y longuitud de la toma que queremos descargar, también es posible usar el path/row de la imagen. Como muestra la figura, para el caso de La Mojana y la rivera baja del Magdalena los datos son: [path/row: 8/54, Lat/Long: 8.7/-73.6]


Como la idea del estudio será detectar cambios en la zona (qué áreas están inundadas???) necesitaremos dos imagenes en distintos momentos, antes y después de las inundaciones. La figura anterior muestra la fecha de la imagen (Enero 22 de 2010) un año atrás. La siguiente figura muestra la misma área el 13 de Marzo de 2011, en medio de la segunda ola invernal que azotó a Colombia.


Una vez tenemos las coordenadas y las fecha de las tomas las descargamos haciendo clik en el boton [Add] y luego en [Send to Cart] (Exige registro previo). Si la imagen se encuentra disponible para descarga (Marcan la toma con la palabra 'Downloadable' en la esquina superior izquierda) la descarga se hará de inmediato, sino tomará entre 3 y 5 días mientras preparan la toma y nos avizarán por email cuando la descarga este lista.


Existen 4 opciones de descarga, por lo general, utilizo las dos últimas las cuales vienen georeferenciadas. LandsatLook Images with Geographic Reference es una imagen JPEG mostrando un True Colour Composite (RGB) de la toma, muy util para un análisis preliminar dado su menor tamaño (entre 7 y 8 Mb). Level 1 Product es el conjunto de las 7 bandas de TM en formato GeoTIFF (una imagen por cada banda), mucho más pesado que el anterior (~170MB) pero que permite un análisis mucho más especializado.

Algunas características de las bandas de Landsat TM son:

BandResolutionWavelength µmDescription
130m0.45-0.52Blue
230m0.53-0.61Green
330m0.63-0.69Red
430m0.78-0.90Near Infrared
530m1.55-1.75Short-wave Infrared
660m10.4-12.5Thermal Infrared
730m2.09-2.35Short-wave Infrared


Las bandas infrarojas (4,5 y 7) resultan de gran utilidad para identificar las área inundadas dado que los cuerpos de agua absorben muy bien este tipo de ondas. Las siguientes figuras muestran el Level 1 Product una vez descomprimido y un acercamiento al área de estudio en la banda 4 (Near Infrared).



Suficiente por ahora, en la siguiente entrega nos adentraremos en los detalles de QGIS y como cargar y analizar las imagenes Landsat que acabamos de descargar.