Galería de vuelos: fotogrametría con dron en un mapa 3D
Ocho levantamientos con dron sobre un mapa 3D: cinco en Bogotá, uno en Zipaquirá, uno en Cerinza y uno en Ibagué. Cada modelo se abre en el navegador y baja por partes.
Drones, Fotogrametría, 3D Tiles, MapLibre, three.js, Next.js
El detalle
La galería junta los levantamientos en un mapa 3D que se abre con un enlace. Cada modelo está partido en 3D Tiles, con niveles de detalle, y el navegador pide solo lo que está en pantalla, así que se recorre también desde el celular.
Los ocho vuelos viven en un mismo explorador, sobre el terreno, y cada modelo aparece solo cuando te acercas a él. El mapa base es de OpenFreeMap, con imágenes de Esri como opción, y el terreno, de los Terrain Tiles públicos de AWS: ninguno se genera por vuelo, y del vuelo se publica solo la malla 3D.
Las teselas están en Cloudflare R2. El repo trae también la tubería que convierte lo que exporta el software de fotogrametría (SLPK u OBJ) en 3D Tiles georreferenciados, aunque todavía se corre paso por paso.
Características
- Explorador a pantalla completa con los ocho vuelos, sus huellas y una ficha por vuelo
- Los modelos aparecen solos al acercarte, y el mapa completo abre de una
- Terreno prendido desde el inicio, hundido bajo la huella de cada malla para que el DEM de 30 m no la atraviese
- Detalle de cerca entre 0,75 y 1,7 cm por pixel de textura en los vuelos que salieron de SLPK
- Enlaces directos a cada vuelo (/?v=zipaquira) y funciona en el teléfono
- Modelos 3D bajo CC BY 4.0 y código bajo Apache-2.0
Stack tecnológico
- Next.js 16 y React 19, con el tema de GeoAI LATAM
- MapLibre GL JS; mapa base de OpenFreeMap o imágenes de Esri, terreno de AWS
- 3d-tiles-renderer sobre three.js; glb con meshopt y texturas KTX2
- Teselas en Cloudflare R2
- Tubería en Node y Python: Obj2Tiles, gltfpack y scripts propios para SLPK, georreferenciación y huellas
- Desplegado en Vercel
Lo difícil
- El conversor estándar de SLPK a 3D Tiles ponía mal la altura de las cajas y dejaba la geometría sin comprimir: hubo que escribir uno propio
- Sin puntos de control, las alturas de los modelos quedaban entre 20 y 256 m por encima del terreno por el GPS del dron, y seis de los ocho venían ladeados, hasta 68 m por km en Cerinza. Se corrigen en el navegador, sin rehacer las teselas
- En Brave aparecían columnas de terreno de cientos de metros sobre Zipaquirá: el navegador altera al azar píxeles leídos de un canvas, y en el formato Terrarium un bit cambiado son 256 m
- Obj2Tiles generaba texturas con 95 % de relleno, que llenaban la caché del visor y los niveles finos nunca aparecían
Lo aprendido
- Para los vuelos nuevos conviene exportar SLPK y no OBJ: trae los niveles de detalle hechos y queda en cerca del 40 % de su tamaño
- La altura de un modelo sin puntos de control se mide en el borde de la malla, no en el suelo abierto de adentro: SRTM mide techos y árboles
- Un visor 3D en la web se juega en qué no descarga