¿Qué es E57?
E57 es un formato de archivo abierto estándar para almacenar datos producidos por sistemas de imagen 3D — escáneres láser terrestres, escáneres de luz estructurada portátiles, sistemas fotogramétricos y LiDAR aerotransportado. Publicado por ASTM International como ASTM E2807-11, E57 fue desarrollado para abordar una brecha crítica en la industria del escaneado 3D: cada fabricante de escáner tenía su propio formato propietario, lo que hacía que el intercambio de datos entre plataformas de software fuera complicado y propenso a errores.
A diferencia de LAS (que se centra en los atributos de puntos LiDAR aerotransportado), E57 está diseñado para flujos de trabajo de registro multiescaneado — puede almacenar múltiples posiciones de escaneado dentro de un único archivo, asociar fotografías panorámicas en color con cada escaneado y preservar el sistema de coordenadas original del escáner junto con las coordenadas registradas globales.
Estructura del Archivo E57
Un archivo E57 tiene una estructura híbrida que combina metadatos XML con datos de puntos binarios compactos:
Archivo E57
├── Cabecera XML (UTF-8, sin comprimir)
│ ├── e57Root
│ │ ├── formatName = "ASTM E57 3D Imaging Data File"
│ │ ├── guid = "{3F2504E0-4F89-11D3-9A0C-0305E82C3301}"
│ │ ├── versionMajor = 1, versionMinor = 0
│ │ ├── data3D (array de posiciones de escaneado)
│ │ │ ├── [0] Escaneado desde posición de trípode A
│ │ │ │ ├── guid, name, description
│ │ │ │ ├── pose (cuaternión de rotación + traslación)
│ │ │ │ ├── acquisitionStart / acquisitionEnd (ISO 8601)
│ │ │ │ ├── sensorVendor, sensorModel, sensorSerialNumber
│ │ │ │ ├── pointCount = 12.847.332
│ │ │ │ └── points → (desplazamiento a sección binaria)
│ │ │ └── [1] Escaneado desde posición de trípode B
│ │ └── images2D (fotos panorámicas opcionales)
│ │ └── [0] imagen panorámica esférica
└── Secciones Binarias (páginas CompressedVector)
├── Datos de puntos: XYZ cartesiano + intensidad + RGB + índice de retorno
└── Datos de imagen: blobs JPEG o PNG
La cabecera XML siempre está en el desplazamiento de bytes 0 del archivo y especifica desplazamientos de bytes exactos en las secciones binarias para cada bloque de datos.
Atributos de Datos de Puntos
La nube de puntos de cada escaneado puede llevar un rico conjunto de atributos por punto:
| Atributo | Tipo | Descripción |
|---|---|---|
cartesianX, Y, Z |
float64 | Coordenadas en marco del escáner o global |
sphericalRange |
float64 | Distancia desde el origen del escáner (metros) |
sphericalAzimuth |
float64 | Ángulo horizontal (radianes) |
sphericalElevation |
float64 | Ángulo vertical (radianes) |
intensity |
float32 | Intensidad del retorno láser (normalizada 0–1) |
colorRed, Green, Blue |
uint8 | Color RGB (de la cámara del escáner) |
returnIndex |
uint8 | Qué retorno (1.°, 2.°, último) para escáneres multirretorno |
timeStamp |
float64 | Tiempo GPS de adquisición del punto |
rowIndex, columnIndex |
int32 | Posición en cuadrícula para escaneados estructurados (panorámicos) |
isInvalidData |
bool | Marca los retornos de rango fallidos |
Los atributos rowIndex/columnIndex son significativos: los escáneres terrestres producen nubes de puntos estructuradas — cada punto corresponde a una posición angular específica en una cuadrícula regular, preservando las relaciones de vecindad.
Registro de Escaneados y Pose
Una de las características más importantes de E57 es el almacenamiento de la pose de registro — la transformación de cuerpo rígido (rotación + traslación) que mapea cada escaneado desde su sistema de coordenadas local del escáner al sistema de coordenadas global del proyecto:
<pose type="Structure">
<rotation type="Structure">
<w type="Float">0.9999247</w>
<x type="Float">0.0000000</x>
<y type="Float">0.0122715</y>
<z type="Float">0.0000000</z>
</rotation>
<translation type="Structure">
<x type="Float">15.243</x>
<y type="Float">-3.891</y>
<z type="Float">0.000</z>
</translation>
</pose>
La rotación se almacena como un cuaternión unitario (w, x, y, z). Esto permite que el software compatible con E57 ensamble automáticamente las encuestas multiescaneado en una nube de puntos registrada coherente.
Lectura de E57 con Python (pye57)
pye57 envuelve la biblioteca C++ libE57Format:
import pye57
import numpy as np
# Abrir un archivo E57
e57 = pye57.E57("escaneado_edificio.e57")
# Inspeccionar la cabecera del archivo
cabecera = e57.get_header(0) # índice de escaneado 0
print(f"Nombre del escaneado: {cabecera.name}")
print(f"Número de puntos: {cabecera.point_count}")
print(f"Sensor: {cabecera.sensor_vendor} {cabecera.sensor_model}")
# Leer puntos del escaneado 0
datos = e57.read_scan(0, ignore_missing_fields=True)
xyz = np.column_stack([datos["cartesianX"],
datos["cartesianY"],
datos["cartesianZ"]])
print(f"Forma de la nube de puntos: {xyz.shape}") # (N, 3)
# Leer TODOS los escaneados y combinarlos
todos_los_escaneados = []
for i in range(e57.scan_count):
datos_scan = e57.read_scan(i, ignore_missing_fields=True)
pts = np.column_stack([datos_scan["cartesianX"],
datos_scan["cartesianY"],
datos_scan["cartesianZ"]])
todos_los_escaneados.append(pts)
combinado = np.vstack(todos_los_escaneados)
print(f"Total de puntos en todos los escaneados: {len(combinado):,}")
Procesamiento de E57 con PDAL
PDAL (Point Data Abstraction Library) proporciona una potente interfaz de pipeline para E57:
{
"pipeline": [
{
"type": "readers.e57",
"filename": "escaneado_edificio.e57",
"scan_index": 0
},
{
"type": "filters.voxeldownsize",
"cell": 0.02
},
{
"type": "writers.las",
"filename": "escaneado_muestreado.las",
"minor_version": 4,
"dataformat_id": 6
}
]
}
pdal pipeline e57_a_las.json
E57 vs LAS: Cuándo Usar Cada Uno
| Característica | E57 | LAS/LAZ |
|---|---|---|
| Organismo estándar | ASTM | ASPRS |
| Múltiples escaneados en un archivo | Sí | No (un archivo por escaneado) |
| Imágenes panorámicas integradas | Sí | No |
| Registro/pose del escaneado | Integrado | Archivos sidecar externos |
| Uso principal | Escaneado terrestre/interior | LiDAR aerotransportado, geoespacial |
| Soporte en software SIG | Limitado | Excelente |
| Ecosistema Python | pye57 | laspy, PDAL |
E57 es la elección natural cuando:
- Se trabaja con datos de escáneres FARO, Leica, Matterport u otros terrestres
- El registro multiescaneado y las fotos panorámicas deben preservarse juntos
- El flujo de trabajo permanece dentro del software de escaneado (Autodesk ReCap, FARO SCENE, Leica Cyclone)
LAS/LAZ es la elección natural cuando:
- Se trabaja con entregas de LiDAR aerotransportado de contratistas de topografía
- Se integran datos en flujos de trabajo SIG (QGIS, ArcGIS Pro, pipelines PDAL)
Tamaños de Archivo Típicos
| Tipo de escaneado | Puntos | Tamaño E57 |
|---|---|---|
| Habitación pequeña, resolución 5 mm | ~5 millones | ~200 MB |
| Una planta de edificio | ~50 millones | ~1,5 GB |
| Levantamiento completo de edificio (10+ escaneados) | ~500 millones | ~15 GB |
| Gran infraestructura exterior | ~2.000 millones | ~60 GB |
Las panorámicas JPEG integradas añaden 5–20 MB por posición de escaneado.
Conversiones relacionadas
Conversiones frecuentes del catálogo: