LAS y LAZ: Formatos de Nube de Puntos LiDAR Explicados
LAS (LASer) es el formato de archivo binario dominante para almacenar datos de nube de puntos LiDAR (Light Detection and Ranging), estandarizado por la Sociedad Americana de Fotogrametría y Teledetección (ASPRS). LAZ es la variante comprimida sin pérdida — esencialmente LAS comprimido con LASzip, el códec de código abierto desarrollado por Martin Isenburg. Juntos, LAS y LAZ sustentan las industrias geoespacial, de topografía, forestal, de vehículos autónomos, arqueológica e inspección de infraestructuras donde se recogen datos de nube de puntos 3D mediante escáneres láser aéreos, móviles o terrestres.
¿Qué es una Nube de Puntos LiDAR?
Un sistema LiDAR emite pulsos láser y mide el tiempo que tarda cada pulso en regresar tras reflejarse en una superficie. Combinado con la posición del escáner (GPS), orientación (IMU) y el ángulo de escaneo, cada pulso devuelto se convierte en un punto 3D con coordenadas (X, Y, Z). Se registran atributos adicionales: intensidad del retorno, número de retorno, clasificación (suelo, vegetación, edificio, agua) y tiempo GPS.
Un levantamiento LiDAR aéreo típico sobre terreno urbano puede recoger 50-500 puntos por metro cuadrado, produciendo miles de millones de puntos para un área de 100 km² — varios cientos de gigabytes de datos LAS brutos.
Estructura del Archivo LAS
Un archivo LAS tiene tres secciones:
1. Bloque de Cabecera Pública (227 bytes, fijo)
Los campos clave incluyen:
- "LASF" — firma mágica (4 bytes)
- Versión Major/Minor — actualmente 1.0 a 1.4
- Point Data Format ID — define los atributos de cada punto (0-10)
- Factores de escala y offsets — para convertir enteros a coordenadas reales
- Bounding box — extensión mínima/máxima en X, Y, Z
Los factores de escala y offsets son críticos: LAS almacena X, Y, Z como enteros de 32 bits por compacidad:
X_real = X_entero × X_escala + X_offset
Valores típicos: escala = 0.001 (precisión de milímetros), offset = origen del sistema de coordenadas.
2. Registros de Longitud Variable (VLRs)
Los VLRs almacenan metadatos que varían por archivo: la definición del sistema de referencia de coordenadas (CRS), definiciones de bytes extra (atributos definidos por el usuario) y datos de aplicación personalizados.
El VLR más importante es el Sistema de Referencia de Coordenadas — almacenado como entradas GeoKeyDirectory o WKT (Well-Known Text). Sin este VLR, las coordenadas de los puntos son números arbitrarios sin significado geográfico.
3. Registros de Datos de Puntos
El cuerpo del archivo LAS. Cada registro es una estructura binaria de tamaño fijo definida por el Point Data Format ID.
Formato 0 (20 bytes, mínimo):
X, Y, Z: 3 × int32
Intensidad: uint16
Bits de retorno: uint8 (número de retorno, num retornos, dirección/borde de escaneo)
Clasificación: uint8
Ángulo de escaneo: int8
Datos de usuario: uint8
ID de fuente: uint16
Formato 6 (LAS 1.4, 30 bytes): añade tiempo GPS (double, 8 bytes) y amplía los rangos de clasificación.
Códigos de Clasificación ASPRS Estándar
| Código | Clasificación |
|---|---|
| 0 | Creado, nunca clasificado |
| 1 | Sin clasificar |
| 2 | Suelo |
| 3 | Vegetación baja |
| 4 | Vegetación media |
| 5 | Vegetación alta |
| 6 | Edificio |
| 7 | Punto bajo (ruido) |
| 9 | Agua |
| 10 | Ferrocarril |
| 11 | Superficie de carretera |
| 13-16 | Cables y torres eléctricas |
| 17 | Tablero de puente |
LAZ: Compresión LASzip
Los archivos LAZ son archivos LAS comprimidos con el códec LASzip. LASzip logra ~8:1 de compresión en datos LiDAR típicos explotando:
-
Predicción entre puntos: los puntos LiDAR en líneas de escaneo adyacentes tienen coordenadas altamente predecibles. LASzip predice el siguiente punto y codifica solo el residuo.
-
Codificación específica por campo: cada campo usa la codificación óptima para su distribución de datos.
-
Procesamiento en chunks: LAZ comprime 50.000 puntos por unidad, habilitando descompresión paralela y acceso aleatorio a chunks.
| Formato | Tamaño (1B puntos) | Acceso |
|---|---|---|
| LAS | ~30 GB | Secuencial O(1) |
| LAZ | ~3-4 GB | Chunk-aleatorio O(1) |
| LAS + gzip | ~10 GB | Solo secuencial |
Python: laspy
import laspy
import numpy as np
# Leer un archivo LAS/LAZ
with laspy.open('levantamiento.laz') as f:
las = f.read()
print(f"Versión LAS: {las.header.version}")
print(f"Formato de punto: {las.header.point_format.id}")
print(f"Número de puntos: {len(las.points):,}")
# Acceder a atributos de puntos como arrays NumPy
x = las.x # coordenadas X reales (float64, escala/offset aplicados)
y = las.y
z = las.z
intensidad = las.intensity
clasificacion = las.classification
print(f"\nRango de intensidad: {intensidad.min()} - {intensidad.max()}")
print(f"Clasificaciones presentes: {np.unique(clasificacion)}")
# Filtrar solo puntos de suelo (clase 2)
mascara_suelo = clasificacion == 2
x_suelo = x[mascara_suelo]
y_suelo = y[mascara_suelo]
z_suelo = z[mascara_suelo]
print(f"\nPuntos de suelo: {mascara_suelo.sum():,} de {len(x):,}")
# Filtrar por bounding box
mascara_roi = (x >= 400000) & (x <= 401000) & (y >= 5100000) & (y <= 5101000)
puntos_roi = las.points[mascara_roi]
# Escribir un nuevo archivo LAZ con puntos filtrados
cabecera = laspy.LasHeader(point_format=las.header.point_format, version=las.header.version)
cabecera.offsets = las.header.offsets
cabecera.scales = las.header.scales
with laspy.open('solo_suelo.laz', mode='w', header=cabecera, do_compress=True) as escritor:
escritor.write_points(las.points[mascara_suelo])
PDAL: Point Data Abstraction Library
PDAL es la navaja suiza del procesamiento de nubes de puntos — soporta más de 50 formatos y cientos de operaciones de procesamiento mediante una interfaz de pipeline JSON:
{
"pipeline": [
{
"type": "readers.las",
"filename": "entrada.laz"
},
{
"type": "filters.reprojection",
"in_srs": "EPSG:25830",
"out_srs": "EPSG:4326"
},
{
"type": "filters.csf",
"resolution": 1.0,
"rigidness": 3
},
{
"type": "filters.range",
"limits": "Classification[2:2]"
},
{
"type": "writers.las",
"filename": "suelo_wgs84.laz",
"compression": "laszip"
}
]
}
pdal pipeline extraccion_suelo.json
pdal info entrada.laz --summary
pdal translate entrada.las salida.laz --writers.las.compression=true
Conclusión
LAS y LAZ son la base de la industria de procesamiento LiDAR aéreo. Su estructura binaria — combinando registros de puntos de tamaño fijo para acceso aleatorio rápido con un rico conjunto de atributos que cubre intensidad, clasificación, tiempo GPS y datos de forma de onda — los hace únicamente adecuados para flujos de trabajo geoespaciales de nube de puntos. La compresión LASzip de LAZ logra ratios de ~8:1 con acceso aleatorio por chunks, haciendo práctico almacenar y procesar levantamientos de miles de millones de puntos. Comprender la codificación escala/offset de LAS, los códigos de clasificación, los VLRs del sistema de referencia de coordenadas y las herramientas Python (laspy, PDAL) te equipa para trabajar con cualquier conjunto de datos LiDAR desde el modelado del terreno hasta la documentación del patrimonio cultural.
Conversiones relacionadas
Conversiones frecuentes del catálogo: