Herramientas Libres para trabajar con datos LiDAR


En los últimos años ha proliferado el uso del LiDAR como técnica topográfica. Básicamente, consiste en un telémetro láser que mide el tiempo que tarda una pulso láser en ir y volver después de haber rebotado en un objeto. De este modo consigue hallar la distancia entre el instrumento y el objeto. Es decir, es sencillamente un distanciómetro, pero con la particularidad de que puede llegar a medir unos 100000 puntos por segundo (100 MHz). Si, además, incorporamos a los equipos de medición un GPS que nos dé la posición y un sistema inercial que nos de la orientación si estamos en movimiento, podemos dar coordenadas globales, normalmente en el sistema WGS84, a todos los puntos medidos. Por tanto, tendremos lo que se denominan nubes de puntos de los cuales conoceremos su posición en un sistema de referencia global, además de otras características relativas al objeto, como la intensidad o diferentes ecos de retornos, o referentes a la medición como ángulo de emisión del pulso, tiempo o distancia relativa al sensor.

Las compañías que desarrollan instrumentación LiDAR, ya sean telémetros aerotransportados, dando lugar a lo que se denomina en inglés Airborne Laser Scanning (ALS), o telémetros terrestes, Terrestrial Laser Scanning (TLS), también desarrollan su propio software destinado a:

  1. Extraer los datos del equipo de medida y ofrecer los datos en algún
    formato propio o, al menos, conocido.
  2. En algunos casos, hacer post-proceso de dichos datos y obtener productos
    cartográficos finales.

Sin embargo, como en el ecosistema de los GIS, existe un software privativo que monopoliza casi todo el mercado del software para realizar los trabajos de post-proceso. No voy a dar el nombre de ninguno de estos paquetes porque el objetivo de esta entrada es justamente la contraria, exponer las posibilidades existentes para utilizar software libre a la hora de trabajar con datos LiDAR.

Lamentablemente, para extraer los datos de la mayoría de los equipos actuales no hay alternativas y necesitamos utilizar obligatoriamente software privativo. Comprar la licencia no es el verdadero problema, porque si tenemos dinero para comprar un equipo que cuesta varias decenas de miles de euros es que también podemos comprar al menos una licencia por un par de miles. Lo peor es lo que verdaderamente implica el software privativo, es decir, que no eres libre de hacer lo que quieras con producto adquirido. Sin embargo, si alguien quiere hacerse un telémetro láser, puede utilizar el módulo para la captura de datos de las librerías PCL, ya que soporta algunos dispositivos conocidos. Pero sobre la librería PCL y otras más hablaremos más datelladamente en otra entrada. Además, en la mayoría de los casos, cuando podamos acceder a datos LiDAR, estos estarán ya en un fomato conocido. Lo lógico es que obtengamos los datos en el formato LAS que es el formato estándar que define la ASPRS (American Society for Photogrammetry and Remote Sensing).

Hay varias librerías libres para la lectura y escritura de archivos en este formato LAS. La decana de ellas es LASlib. Está desarrollada y mantenida por Martin Isenburg y está escrita en C++. Está licenciada bajo LGPL, por lo que se puede utilizar en otros paquetes, aunque sean privativos. Al descargar estas librerías y compilarlas genera unas herramientas llamadas LAStools que sirven para la gestión de archivos LAS (las2las, lasmerge), para creación de LAS a partir de archivos de texto (txt2las) o archivos de texto a partir de LAS (las2txt), para dar información sobre archivos (lasinfo, lasprecision, lasdiff) o para crear un índice espacial de los puntos dentro de los archivos (lasindex). En las últimas versiones, también se crea la herramienta laszip que sirve para comprimir archivo LAS. El formato de salida es LAZ y el archivo de comprimido ocupa SOLO entre el 7% y 20% del tamaño del archivo original. A todo esto hay que añadir que con la librería LASlib también se distribuye otra librería para leer y escribir formatos LAZ, también en C++ y también con licencia LGPL. Para los usuarios de windows, además, están disponibles otras herramientas precompiladas, de las cuales no voy a dar detalles porque no son libres, sino que son shareware.

De la librería LASlib se hizo un fork y nació la librería libLAS, que está bajo el auspicio de OSGeo. También escrita en C++ pero incorporan bindings para una gran cantidad de lenguajes de programación. También incorpora herramientas para la gestión de archivos en formato LAS y texto, que se llaman de igual manera que las LAStools, aunque la utilización de los comandos pueda variar. Las diferencias que existen actualmente entre ambas librerías se pueden encontrar aquí.

La librería SPDLib es bastante reciente. Tanto es así que empezó a desarrollarse en el verano de 2011. El formato estándar que utiliza para trabajar con datos LiDAR se denomina precisamente SPD (Sorted Pulse Data) y está basado en el formato HDF. Es un formato de datos ordenados e indexado que está optimizado para el acceso rápido a los datos y en el que es posible trabajar con toda la señal del pulso de retorno, en inglés full waveform, no sólo con ecos discretos, como hace las librerías anteriores. Y precisamente ésta es una de sus grandes virtudes. Por lo demás, está en consonancia con las librerías ya vistas. Está desarrollada en C++, con bindings para python e IDL, y con licencia GPL. Al compilar se crean una serie de herramientas para la gestión, manipulación e información de archivos SPD, así como una herramienta imprescindible para transformar entre formatos LAS y SPD. Otra de las ventajas que presenta es que incorpora utilidades para generar modelos digitales en cualquier formato soportado por gdal, y para aplicaciones forestales. ¡Todas ellas libres! Sin embargo, al ser desarrollada principalmente por una sola persona y ser tan reciente, uno de los problemas que presenta es la escasa y, en algunos casos, inexacta documentación.

Sin duda, existen más librerías capaces de trabajar con datos LiDAR pero con otros propósitos distintos a los que hemos cubierto aquí. Las intentaremos tratar en otras entradas. Manteneos atentos.

PD: Mientras escribo estas líneas me llega un tuit en el que hablan de otra libreria
en python para leer y escribir datos LiDAR en formatos LAS. Se llaman laspy :)

Primeras impresiones de Smart Citizen


Smart Citizen es un proyecto que apareció en goteo hace un año. Goteo es una web de crowdfunding al estilo de Kickstarter. Apareció poco después del Air Quality Egg, al cual llegué tarde para participar. Así que nada, cuando vi una idea similar me apunté sin pensármelo mucho. ¿Cuál es la idea? Bien es sencillo, imaginad una red completamente voluntaria para la medición de variables medioambientales, sobre todo aquellas relacionadas con la contaminación tanto acústica como de cualquier otro tipo. Esa red no estaría controlada por ningún organismo, realmente es una red porque existe una forma común de acceder a todos los datos, pero los miembros ni se conocen, ni tienen por qué tener los mismos objetivos, ni las mismas motivaciones. ¿A que recuerda a otras actividades similares? Efectivamente, se trata al igual que en OSM por ejemplo, de «mapear» el territorio solo que de una forma diferente, un paso más allá de la representación estática de la realidad, hacia un conocimiento más profundo de nuestro entorno al entrar en el mundo de los sensores en tiempo real, de la famosa Internet de las Cosas.

Tanto Smart Citizen como AQE solo son los comienzos de una nueva generación de hardware, software y servicios que nos harán ser más conscientes (y espero concienciados) de nuestro entorno, de la calidad del mismo y de cómo evoluciona tanto en el corto plazo como con miras un poco más alejadas. Con todo este conjunto de datos en bruto publicados en tiempo real, ¿quién sabe qué innovaciones veremos en los próximos años y cómo éstas afectarán nuestras vidas?.

En fin, volviendo al caso concreto de Smart Citizen, hace poco me llegó la placa. Básicamente es una placa Arduino con una placa superior de sensores (shield en el argot Arduino) y una batería. La placa ya viene con el software precargado aunque ciertamente van a ir saliendo actualizaciones del mismo que hay que cargar con el entorno de desarrollo estándar de Arduino, sin mucho más misterio.

SCK

Para poner en marcha la placa solo hay que configurar la red wifi a la que se conectará. Esto se hace a través de la web mediante un applet java que realiza todo el proceso. El único problema que tuve es que en mi caso, cuando se genera el puerto para el dispositivo no tengo permisos para usarlo por lo que tuve que ejecutar un sencillo sudo chmod 777 /dev/ttyACM0 para que fuera capaz de cargar la configuración. Una vez cargada, se reinicia la placa y empieza a enviar datos sin mayor inconveniente, quedando publicados de forma automática en la web.

La web todavía está en desarrollo, bueno TODO está aún en desarrollo, incluyendo el firmware que ciertamente aún no presenta los datos de los sensores todo lo bien que debiera. Por ejemplo los valores de calidad de aire vienen en Ohmios, en lugar de las más típicas «partes por millón». Todo esto estoy seguro que se irá puliendo y aún cuando algún sensor no vaya del todo fino (me temo que el de sonido, por ejemplo), solo como primera aproximación a lo que puede ser el disponer de una red de sensores publicando en tiempo real toda esta información es más que interesante.

La red Smart Citizen está sobre todo (de momento) enfocada en Barcelona, de hecho la mía es la única placa hasta la fecha activada en la provincia de Valencia.

Smart CItizen en Barcelona

Por otro lado todavía hay mucho que hacer en cuanto a la presentación de los datos que se van subiendo a su plataforma. Además de la web del sensor hay algún punto de acceso para descargar en formato JSON todos los registros y también una web para ver datos más antiguos que los escasos 20 minutos que se pueden ver desde la web oficial.

En fin de momento eso es todo, la placa ahora mismo la tengo «indoor» porque aún tengo que ver cómo le conecto un panel solar o bien saco un cable USB para poder tenerla en el balcón de casa, y que haga medidas lo más estables posible. Ya iré contando.

Geocamp


La semana pasada en Óbidos tuvo lugar el tercer Geocamp de Portugal. Geocamp es un modelo de jornada en cierta manera similar a otras desconferencias como las Barcamp o las Wherecamp donde la idea inicial es que la gente llegue y proponga sus charlas y el mismo día se organice todo el evento en función de lo que le apetezca a la asistencia.

En realidad esto este año no ha sido del todo así porque el programa parece que estaba más o menos claro al arrancar el día y por tanto no hubo esa dinámica de grupo de decidir qué se presenta y cuándo. Así y todo sí se hizo una ronda inicial de presentación de todos los asistentes, cosa que está muy bien para tener una idea de qué tipo de gente asiste, qué podrían esperar y tal.

Yo acudí con Pablo, Micho y Fran, unos amigos geoinquietos gallegos que muy amablemente me recogieron en Oporto y con los que pasé el fin de semana.

Cuando me inscribí no tenía ninguna idea interesante que contar pero al poco tiempo y viendo un trabajo que había empezado yo y que estaba terminando Vicente, pensé que podía ser un caso de uso que podría quedar bien en un evento como el Geocamp. Se trata de un pequeño ejemplo de uso de Geokettle, un software que usamos a diario en Prodevelop para todo tipo de tareas que hay que ejecutar de forma repetida y a menudo desatendida. Geokettle es un verdadero GIS de escritorio (en su variante gráfica) que permite diseñar complejos flujos de trabajo en los que se involucran datos geográficos y que luego pueden ejecutarse por consola de forma programada. Dejo el enlace a las diapositivas que darán una idea (en parte divertida espero) sobre lo que conté.

Fom CAD to DB

Centrándome en el evento, me gusta mucho el formato por varias razones. En primer lugar el detalle con el que se diseña, buscando un lugar alejado de la ciudad pero que tenga algo que ofrecer, una comida en un espacio abierto al aire libre en el que poder conversar con una cerveza fresquita, varias pausas que buscan tanto el descanso como la conversación, que sea un evento para poca gente donde prime la interactividad frente a la pasividad de «ir a que te cuenten un rollo», la multidisciplinariedad de las charlas variando del open data en la administración electrónica al uso de drones para fotogrametría o el arte digital. Lo importante es que siempre hay un punto de conexión en las ciencias de la información geográfica, pero con una amplitud de miras que invita a participar y charlar.

2013-05-25 13.43.05

Si no tienes nada realmente interesante que hacer el 22 de junio y esto que te he contado te parece atractivo, que sepas que los mismos amigos gallegos con lo que pasé el fin de semana pasado están organizando para ese día un evento muy muy, pero que muy parecido. Se llama Geocamp, oh sorpresa. Yo voy, pero lo que es más importante, gente tan interesante como Juan Freire, Juan Marín o Jorge Arévalo estarán por allí para pasarlo bien.

¿A QUE TE APUNTAS?

Geohacking against corruption


Last week I was with three colleges of Prodevelop and other 20 hackers at the 15th Anticorruption Conference in Brasilia. We participated in a four days hackathon working in groups to create web or mobile applications about transparency and corruption.

How we end up on that event? Well Alberto read the call at a mailing list and we signed up without too much confidence, but 6 days before the event we got an email, 2 days before the flight tickets were arranged and 1 day before we got the accommodation information. Yes that was crazy. In fact everyone said we were crazy but well, why not?

Anyway, we arrived and met some incredibly interesting people, many of them working on transparency and corruption fight. They presented their projects, ideas or needs and we set up 8 or 10 groups to collaborate. Most of people were developers but others were designers, lawyers and well, you know, a cartographer :-).

Final tweaks before application presentations #15iacc

After four days of coding, some partying, an unknown number of beers and table football plays and not too much sleeping we presented our projects to a jury that decided a prize winner to further development of their idea. Yeah, there was a prize and most of us didn’t know about it after two days or so of working.

Techincal tools wrap up

Hacker futbolín

I worked with Alberto and Dani on the idea of see how a 3D globe visualization could work to visualize the brand new Open Bank Project API (more info at our project slides). This API is aimed to give information to any organization that wants to offer their bank activity. We thought that a 3D visualization could be powerful and well, we think we were quite successful according to the number of questions and comments. Simon, the API developer was there and he thought that expressing the bank activity as a concatenation of sounds could be also expressive and at the end we saw some bank accounts singing!! Thus at the end we had to pretty different “visualizations” of their new API.

Money Journey

Our fourth prodeveloper, Carlos, worked with Juan and Gustavo to produce a new layer that tracks the relation between deforestation and cattle ranching at Amazonas region. They designed a new layer for Infoamazonia portal using TileMill and Mapbox and with the help of a fellow, it was deployed and ready to be published.

We spend a week learning of amazing people, some of them working really hard to make our world better so for me it was a great experience and I was not so surprised to see how well geospatial technologies fit on this field and how we, the geospatial professionals, can help these people to develop interesting applications. I hope we will have more opportunities to work with them in the future.

And because being grateful is a good thing, I want to thank Transparency International for giving us the opportunity to be at Brasilia and do all this stuff, thanks!!

IMG_8690

Update: Just for the records, I’ll add also a nice video created by Alberto with more photos of our week at Brasilia

OpenLayers Cookbook


OpenLayers CookBook

I’ve been honoured to help Antonio to produce this book as a technical reviewer so I owe him at least a short note here (well in fact I promised him to do it!). Having the opportunity to review the book itself has been a great pleasure and an enriching experience, always with the help (and patience) of the Packt people over eight weeks of work. There are some good reviews of the book here and here so I won’t repeat what’s so well described there, take a look on them to see the contents covered and their (good) feedback on the book.

If you know some HTML and JavaScript and really want to get introduced on how to build geospatial web applications, I vividly encourage you to get this book and go beyond the basics with meaningful recipes that step by step, showcase the most important parts of the OpenLayers API.

In my experience, one can start from scratch with the examples but there are many concepts that is better to understand well, like the difference between formats, protocols and strategies (that I finally understood back in 2009, thanks to this great presentation by Tim Schaub). That and more is well covered through examples, really easy to follow and reproduce. Thus I think it’s a good investment to take a book and let someone to tell you how the thing works, isn’t it?

Ah, and as Alper has written on his review:

Please buy the book to support writer instead of downloading the illegal copies. This will courage more people to write this kind of books to support Open Source projects like OpenLayers.

Instalando MapProxy en windows, paso a paso


La semana pasada tuve el placer de formar parte de los formadores de los voluntarios de EUROSHA, un grupo de 25 jóvenes destinados a levantar cartografía en diversos países de África, como parte de las actividades del HOT. Uno de los problemas a los que se enfrentan estos voluntarios es una conexión a internet no muy fiable.

Es perfectamente posible editar datos de OSM offline (guardando los datos a fichero, editando, y resolviendo conflictos de versiones a posteriori), pero lo que no se puede hacer es consultar cartografía de fondo para comparar. Había que hacer algo al respecto. Y la solución fue instalar MapProxy, que permite tomar imágenes ráster de varias fuentes y servirlas como WMS, en local. En un portátil con linux (y python, python-pil y python-pip), instalarlo y probar la configuración por defecto fue una cuestión de minutos.

Ahora bien, los ordenadores que el HOT va a desplegar en África van con windows, principalmente por no disponer del tiempo suficiente para hacer una instalación completa con las herramientas adecuadas para la situación. Improvisemos pues, e instalemos MapProxy tal y como sugiere el manual

We advise you to install MapProxy into a virtual Python environment.

Bueno, pues no hagáis esto. Al instalar python desde cero, lo más probable es que os encontréis con problemas a la hora de instalar las librerías necesarias, en concreto PIL (Python Imaging Library). La manera sencilla de instalar Python para hacer funcionar MapProxy encima es OSGeo4W. Así que descargamos el instalador, elegimos una instalación avanzada, y nos aseguramos de que al menos los paquetes para python y python-pil se van a instalar:

El siguiente paso es descargarse distribute-setup.py y ejecutarlo dentro de una shell de OSGeo4W como administrador:

En esa misma consola, ejecutamos un easy_install mapproxy, y justo después un easy_install pyproj:

En este punto, los ejecutables de MapProxy ya están instalados. Lo podemos comprobar ejecutando mapproxy-util:

Ahora bien, MapProxy es inútil sin un fichero de configuración que le diga qué servicios tiene que cachear. Así que hacemos copia-pega de una configuración de MapProxy para OpenStreetMap, guardamos el fichero resultante como (por ejemplo) C:\OSGeo4W\mapproxy.yaml, y lanzamos mapproxy-util:

¡Et voilà! Nuestro MapProxy está funcionando y respondiendo a peticiones desde localhost:8080, cacheando tiles de OSM para convertirlas en un servicio WMS:

El resto de opciones se pueden consultar en el manual de MapProxy, pero hay unas cuantas cosas a tener en cuenta:

  • MapProxy siempre debe ejecutarse dentro del entorno de OSGeo4W.
  • … lo que quiere decir que si queremos que se ejecute automáticamente, se puede hacer un .bat haciendo copia-pega de C:\OSGeo4W\osgeo4w.bat, y modificando el comando que se lanza en la última línea de ese script.
  • La utilidad para inicializar o refrescar la caché, mapproxy-seed.exe, ha de ejecutarse también dentro del entorno de OSGeo4W.
  • Los datos cacheados se almacenan en el directorio que se especifique en el fichero de configuración, y es relativo a la ruta donde se lanza mapproxy.

6th anniversary!


all-vegan birthday cake!

Today this blog is six years old. That’s a lot of time and it deserves at least a small post to remind you this blog is still alive even if we don’t post a lot. Vicente is busy with his company, Pedro is busy with his recent fatherhood (his baby was born yesterday!!) and me, well I’m busy with my stuff ^_^. But we are lucky at geomatic blog because we have a lot of friends and from time to time we convince someone to join the family and post about what they love as Roberto our astronomer did recently about the summers solstice.

We will try to keep posting as we have time, energy and interesting stuff to share. In the meantime, follow us on twitter (we post interesting links from time to time there) and of course, if you are close to us and don’t have or want your own blog, you are invited to join the team and consider geomatic blog as your home for your geogeekery.

Congratulations to all the team!!