LAS y LAZ: Los Formatos Estándar para Nubes de Puntos LiDAR
¿Qué son LAS y LAZ?
LAS (LASer file format) es el formato de archivo binario estándar de la industria para almacenar datos de nubes de puntos de LiDAR (Light Detection And Ranging) aerotransportado, terrestre y móvil. Desarrollado y mantenido por la American Society for Photogrammetry and Remote Sensing (ASPRS), la especificación LAS define un formato de registro fijo y compacto que almacena las coordenadas X, Y, Z de cada retorno láser junto con intensidad, número de retorno, clasificación, tiempo GPS y color RGB opcional.
LAZ es el equivalente comprimido de LAS — un formato de compresión sin pérdida que típicamente reduce el tamaño del archivo 5–10× respecto a LAS sin ninguna pérdida de datos. La extensión .laz es universalmente entendida en toda la industria geoespacial.
Ambos formatos almacenan registros de puntos — un registro por retorno láser — en un array binario plano precedido por una cabecera de longitud variable.
Estructura de un Archivo LAS
Un archivo LAS consta de:
- Bloque de Cabecera Pública — firma de archivo (
LASF), fecha de creación, número de registros de puntos, caja delimitadora (mín/máx X/Y/Z), factores de escala y desplazamientos, ID de formato de datos de puntos - Registros de Longitud Variable (VLRs) — bloques de metadatos opcionales antes de los datos de puntos: sistema de referencia de coordenadas (como WKT o claves GeoTIFF), definiciones de bytes extra
- Registros de Datos de Puntos — el array de registros de puntos, uno por retorno láser
Formatos de Datos de Puntos (PDRFs)
| PDRF | Campos | Uso típico |
|---|---|---|
| 0 | X, Y, Z, Intensidad, NumRetorno, Clasificación, ÁnguloEscaneo, ID de Fuente | LiDAR aerotransportado básico |
| 1 | + Tiempo GPS | Con temporización |
| 2 | + Rojo, Verde, Azul | Colorizado |
| 6 | ReturnNum extendido, Clasificación extendida, ÁnguloEscaneo en 1/1000° | Estándar LAS 1.4 |
| 7 | PDRF 6 + RGB | LAS 1.4 colorizado |
Codificación de Coordenadas
Las coordenadas de los puntos se almacenan como enteros de 32 bits (int32), no como flotantes. La cabecera contiene:
- Factores de escala (típicamente 0,001 para precisión milimétrica)
- Desplazamientos (sustraídos antes de dividir por la escala)
Coordenada real = (valor_entero × escala) + desplazamiento
Códigos de Clasificación LAS
ASPRS define valores de clasificación estándar:
| Código | Significado |
|---|---|
| 0 | Sin clasificar |
| 1 | Sin asignar |
| 2 | Suelo |
| 3 | Vegetación baja |
| 4 | Vegetación media |
| 5 | Vegetación alta |
| 6 | Edificio |
| 7 | Punto bajo (ruido) |
| 9 | Agua |
| 10 | Carril |
| 11 | Superficie de carretera |
| 13 | Cable – Guarda |
| 14 | Cable – Conductor |
| 15 | Torre de transmisión |
| 17 | Tablero de puente |
La clasificación de suelo (código 2) es la base para generar MDT (Modelos Digitales del Terreno).
Trabajar con LAS/LAZ en Python: laspy y PDAL
laspy — E/S de LAS/LAZ puro en Python
import laspy
import numpy as np
# Leer un archivo LAS/LAZ
las = laspy.read('vuelo.laz')
print(f"Puntos: {len(las.points):,}")
# Acceder a coordenadas (aplica automáticamente escala + desplazamiento)
x = las.x # array NumPy float64
y = las.y
z = las.z
intensidad = las.intensity
# Filtrar: mantener solo puntos de suelo (clasificación 2)
mascara_suelo = las.classification == 2
print(f"Puntos de suelo: {mascara_suelo.sum():,}")
# Escribir puntos filtrados a un nuevo archivo LAS
las_suelo = laspy.LasData(header=las.header)
las_suelo.points = las.points[mascara_suelo]
las_suelo.write('solo_suelo.laz')
Lectura por trozos para archivos grandes
# Leer en trozos para evitar cargar 50 GB en RAM
with laspy.open('tile_grande.laz') as f:
for trozo in f.chunk_iterator(10_000_000): # 10M puntos por trozo
z_values = trozo.z
print(f"Rango z del trozo: {z_values.min():.2f} – {z_values.max():.2f}")
PDAL — Point Data Abstraction Library
import pdal
pipeline = pdal.Pipeline("""
{
"pipeline": [
{
"type": "readers.las",
"filename": "entrada.laz"
},
{
"type": "filters.smrf",
"ignore": "Classification[7:7]"
},
{
"type": "writers.gdal",
"filename": "mdt.tif",
"resolution": 0.5,
"output_type": "mean",
"dimension": "Z",
"where": "Classification == 2"
}
]
}
""")
count = pipeline.execute()
print(f"Procesados {count:,} puntos")
Este pipeline lee LAZ, ejecuta el filtro de suelo SMRF y genera un MDT GeoTIFF de 0,5 m de resolución a partir de los puntos de suelo.
Conversión de Formatos
# LAS → LAZ (compresión sin pérdida)
laszip entrada.las -o salida.laz
# LAZ → LAS (descomprimir)
laszip entrada.laz -o salida.las
# LAS → CSV (para inspección)
las2txt -i entrada.las -o puntos.txt -parse xyzirn
# LAS → GeoTIFF MDT
lasgrid -i suelo.laz -step 1.0 -elevation -o mdt_1m.tif
# Reproyectar sistema de coordenadas
las2las -i entrada.laz -epsg 4326 -o wgs84.laz
Flujos de Trabajo Geoespaciales Clave
- Generación de MDT/MDS: filtrar puntos de suelo → interpolar a ráster
- MDS normalizado (nMDS): MDS − MDT = modelo de altura sobre el suelo para árboles/edificios
- Detección de edificios: clasificar retornos con alta intensidad y disposición planar
- Selvicultura: modelo de altura del dosel (MHD) a partir de primeros retornos; segmentación de árboles
- Inspección de infraestructuras: corredor ferroviario, detección de líneas eléctricas
Consejos Prácticos
- Usa siempre LAZ para almacenamiento y transferencia — no hay razón para mantener LAS sin comprimir salvo que una herramienta específica lo requiera
- Comprueba el CRS: los archivos LAS frecuentemente carecen de sistema de referencia de coordenadas. Inspecciónalo con
lasinfoopdal info; añade CRS conlas2las -epsg XXXX - Los factores de escala importan: si las coordenadas parecen incorrectas al importar en GIS, verifica la escala/desplazamiento de la cabecera con
lasinfo -i archivo.las -no_check - PDRF 6+ para datos nuevos: LAS 1.4 PDRF 6 soporta números de retorno extendidos, mayor resolución de ángulo de escaneo y más bits de clasificación
- COPC (Cloud-Optimized Point Cloud) es el diseño LAZ nativo en la nube que permite acceso mediante solicitudes de rango HTTP — el equivalente de nubes de puntos al GeoTIFF optimizado para la nube
LAS/LAZ es el formato universal para cualquier aplicación que genere o consuma datos de escáner láser.
Conversiones relacionadas
Conversiones frecuentes del catálogo: