GeoFlight Planner: planificación de vuelos fotogramétricos
Planifica vuelos fotogramétricos con DJI Mini 4 Pro y Mini 5 Pro en el navegador y descarga un KMZ en formato WPML.
React, TypeScript, ArcGIS, Drones, DJI, Fotogrametría

Imagen base de Esri; créditos del mapa: IDECA Bogotá, PNNC, Esri, TomTom, Garmin, METI/NASA, USGS y US Census Bureau.
Créditos
Captura de GeoFlight Planner con una misión sobre la Biblioteca El Tintal, Bogotá. Imagen base de Esri; créditos del mapa: IDECA Bogotá, PNNC, Esri, TomTom, Garmin, METI/NASA, USGS y US Census Bureau.
El detalle
GeoFlight Planner nació de un Mini 5 Pro sin modo de mapeo en DJI Fly y de no querer pagar una suscripción mensual por matemáticas que están en cualquier libro. Dibujas el área en el mapa, ajustas el GSD y el solapamiento, y te llevas un KMZ con la estructura WPML de DJI para cargarlo en DJI Fly.
La app calcula la altura, la velocidad y la separación entre fotos y entre líneas, y arma la ruta con uno de cuatro patrones de vuelo. Todo el cálculo corre en el navegador, sin servidor y sin cuenta.
Características
- Mapa interactivo:
- dibuja polígonos de área de interés con ArcGIS Maps SDK
- Drones:
- presets de cámara para el Mini 4 Pro y el Mini 5 Pro. Agregar otro es editar dos archivos (la ficha de cámara en types/index.ts y la opción del selector en ConfigPanel.tsx), si conoces el identificador que DJI le asigna al dron
- 4 patrones de vuelo:
- Grid (serpentina), Doble (dos pasadas cruzadas, pensado para modelos 3D), Corredor (experimental: tres líneas fijas en sentido norte-sur o este-oeste) y Órbita (una vuelta con centro en el promedio de los vértices)
- Cálculo automático:
- altura, velocidad y espaciado de fotos a partir del GSD objetivo y con la resolución completa de la cámara (48 MP en el Mini 4 Pro, 50 MP en el Mini 5 Pro); si disparas a menor resolución, cada píxel mide en el terreno más que el GSD que pediste
- Exportación KMZ:
- el archivo lleva wpmz/template.kml y wpmz/waylines.wpml, y en Android lo copias a la carpeta waypoint de DJI Fly, un atajo que DJI no documenta
- Opciones avanzadas:
- altitud manual y ángulo del gimbal (nadir, oblicua o ajuste fino)
- Gratis y sin registro:
- abres la página y planificas
- Código público en GitHub:
- puedes leerlo y auditarlo
Stack tecnológico
- React 18, TypeScript y Vite
- ArcGIS Maps SDK for JavaScript para el mapa interactivo
- Todo el cómputo en el navegador: la generación de la misión corre en un Web Worker
- proj4 para las transformaciones WGS84 ↔ UTM, con la zona UTM del centro del área
- jszip para empaquetar el KMZ dentro del mismo worker
- CSS propio por componente, sin framework de estilos
- Vitest para las pruebas de los patrones Grid y Doble, la proyección, la simplificación, WPML y KMZ
Lo difícil
- Documentación DJI: la especificación WPML lista solo drones enterprise y ningún Mini, así que para DJI Fly hubo que adaptarla sin una guía oficial
- Cálculos: las fórmulas son las estándar (GSD, huella, solapamiento). Lo delicado son los datos de cada cámara: la ficha de DJI no trae el ancho del sensor en milímetros ni la focal del lente (solo la equivalente), y en el Mini 5 Pro el sensor cargado (3:2) no cuadra con la foto (4:3)
- Compatibilidad: DJI no publica los identificadores de los Mini que van dentro del KMZ; en el código están estimados y falta confirmarlos con cada firmware
- Rutas largas: con un waypoint por foto, un área grande se llena de puntos; la app avisa cuando la misión pasa de 99 y ofrece simplificarla
Lo aprendido
- Las fórmulas (GSD, huella, solapamiento) están en cualquier libro de teledetección; lo que no está publicado son los datos de cada cámara, y ahí se fue el trabajo
- Sin backend hay una cosa menos que mantener, y el polígono y la misión no salen del navegador (las teselas del mapa base y los archivos del SDK sí llegan desde los servidores de Esri)
- Adaptar WPML a un dron que la especificación no lista deja datos sin confirmar: el identificador de cada Mini dentro del KMZ sigue estimado hasta probarlo con cada firmware