Librerías liblas y laspy para manejar datos LIDAR

Los archivos tipo LAS corresponden a un formato de archivo binario (con licencia pública) usado para el intercambio de nubes de puntos tridimensionales y que ha sido desarrollado, en un principio, para el intercambio de datos LIDAR (Light Detection and Ranging); los cuales son obtenidos por el barrido de un LASER aerotransportado. Además, este formato soporta el intercambio de cualquier tupla de datos tridimensionales x,y,z que a bien tenga considerarse.

A pesar de que existe para QGIS una GUI (LAStools) que permite gestionar para este tipo de formato las tareas más comunes, en este post voy a considerar el manejo de las librerías liblas y laspy que garantizan el uso con el intérprete de Python y, por extensión, con PyQGIS. Los desarrolladores recomiendan el uso de la librería laspy, en lugar de liblas, porque la primera, combinada con numpy, carga automáticamente los datos como array lo que facilita el manejo de las tuplas de valores.

En Debian ambas librerías están disponibles simplemente con instalar liblas-bin y python-liblas. No obstante, a pesar de las recomendaciones iniciales vamos a comenzar con liblas. Con liblas y Python, la manipulación y obtención de ciertos parámetros en el header de los archivos las puede ser laboriosa y, por tanto, algunos recomiendan un análisis exploratorio de los archivos con ‘lasinfo’ (línea de comandos). Para probar vamos a bajar y descomprimir el archivo siguiente Autzen_Stadium.zip; cuyo nombre por default es lidar.las (un binario con apenas 300 kB de información).

En consola de bash; con la ruta donde lo guardé y el modificador –no-check que evita el escaneado de los datos (muy importante si sólo nos interesa el header porque este tipo de archivos puede contener hasta 500 millones de tuplas con datos):

lasinfo --no-check /home/zeito/pyqgis_data/lidar.las

donde un extracto de lo que se obtiene corresponde a:

---------------------------------------------------------
  Header Summary
---------------------------------------------------------

  Version:                     1.2
  .
  .
  .
  Number of Points by Return:  9079 1244 288 42 0 
  Scale Factor X Y Z:          0.01000000000000 0.01000000000000 0.01000000000000
  Offset X Y Z:                -0.00 -0.00 -0.00
  Min X Y Z:                   635589.01 848886.45 406.59
  Max X Y Z:                   638994.75 853535.43 593.73
  Spatial Reference:           
LOCAL_CS["NAD83(HARN) / Oregon Lambert (ft)",
    GEOGCS["NAD83(HARN)",
        DATUM["unknown",
            SPHEROID["unretrievable - using WGS84",6378137,298.257223563]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433]],
    AUTHORITY["EPSG","2994"],
    UNIT["foot",0.3048]]
.
.
.
  Dimensions
---------------------------------------------------------
  'X'                            --  size: 32 offset: 0
  'Y'                            --  size: 32 offset: 4
  'Z'                            --  size: 32 offset: 8
  'Intensity'                    --  size: 16 offset: 12
  'Return Number'                --  size: 3 offset: 14
  'Number of Returns'            --  size: 3 offset: 14
  'Scan Direction'               --  size: 1 offset: 14
  'Flightline Edge'              --  size: 1 offset: 14
  'Classification'               --  size: 8 offset: 15
  'Scan Angle Rank'              --  size: 8 offset: 16
  'User Data'                    --  size: 8 offset: 17
  'Point Source ID'              --  size: 16 offset: 18
  'Time'                         --  size: 64 offset: 20

Este header contiene mucha información útil pero ahora sólo nos vamos a centrar en la proyección que pudimos haber filtrado con:

lasinfo --no-check /home/zeito/pyqgis_data/lidar.las| grep -i epsg

para obtener:

    AUTHORITY["EPSG","2994"],

Con el código EPSG del archivo de origen (2994), la reproyección a EPSG:4326 es sumamente sencilla mediante la utilidad las2las. El modificador – – scale, con los valores señalados abajo, es muy importante a la hora de obtener buena precisión cuando se trabaja con grados en formato decimal.

El comando completo corresponde a:

las2las -i /home/zeito/pyqgis_data/lidar.las -o /home/zeito/pyqgis_data/lidar_rp.las --a_srs EPSG:2994 --t_srs EPSG:4326 --scale 0.000001 0.000001 0.01

que ejecutado en consola de bash produce el archivo lidar_rp.las con el extracto de su header siguiente:

---------------------------------------------------------
  Header Summary
---------------------------------------------------------

  Version:                     1.2
  .
  .
  .
  Number of Points by Return:  9079 1244 288 42 0 
  Scale Factor X Y Z:          0.00000100000000 0.00000100000000 0.01000000000000
  Offset X Y Z:                -0.000000 -0.000000 -0.00
  Min X Y Z:                   -123.075000 44.050000 123.93
  Max X Y Z:                   -123.062500 44.062500 180.97
  Spatial Reference:           
GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0],
    UNIT["degree",0.0174532925199433],
    AUTHORITY["EPSG","4326"]]
.
.
.

Se observa que el factor de escala fue tomado de la manera esperada; al igual que la reproyección. Por si los valores de Z parecen “extraños” hay que recordar que la proyección de origen (EPSG:2994) viene dada en pies (ft).

En el próximo post exploraremos que tan difícil es trabajar con Python y liblas.

Esta entrada fue publicada en LIDAR, SIG, Software Libre. Guarda el enlace permanente.

2 respuestas a Librerías liblas y laspy para manejar datos LIDAR

  1. Pingback: Librería liblas para manejar datos LIDAR con Python | El Blog de José Guerrero

  2. Pingback: Caracterización de archivos *.las (datos LIDAR) con módulo liblas de Python | El Blog de José Guerrero

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s