Exportación WPML KMZ
ARGUS incluye un generador de KMZ WPMZ de frontend (kmz-generator.ts)
que produce un blob .kmz en el formato Wayline Production File
v1.0.3 de DJI. El mismo generador se usa tanto para exportación
manual desde el planificador como para subida automática durante el
envío al dock.
Disposición de archivo
Un KMZ generado es un ZIP comprimido con deflate que contiene:
wpmz/template.kml— plantilla KML con metadatos de misión y defaults de waypoint (desdebuildTemplateKml).wpmz/waylines.wpml— WPML listo para ejecución con la lista completa de waypoints y overrides por punto (desdebuildWaylinesWpml).res/— recursos embebidos opcionales. ARGUS no emite nada aquí; la carpeta está reservada para payloads de recursos de aeronave.
Ambos archivos declaran los namespaces KML
(http://www.opengis.net/kml/2.2) y WPML
(http://www.dji.com/wpmz/1.0.3). El tipo MIME del blob es
application/vnd.google-earth.kmz.
Exportación manual
Planificador → Exportar → WPML KMZ. La descarga se produce en el
navegador mediante generateKmz(mission, options). Úsalo para:
- Cargar la misión en DJI Pilot 2 en un smart RC.
- Archivar para auditoría / regulatorio.
- Entregar a socios que vuelan su propio hardware DJI.
Exportación automática al enviar a DJI
DjiMissionDispatcherService.dispatchToDock ejecuta:
generateKmz(mission, options)— produce el blob.- Solicita una URL presigned de la Cloud API;
PUTdel blob a S3 conContent-Type: application/vnd.google-earth.kmz. - Llama a
registerWaylinepara registrar la clave del objeto con DJI Cloud y recibe undjiWaylineId. - Crea una tarea de vuelo (
taskType: 1= wayline) que referencia la clave S3. - Llama a
prepareTask; el dock maneja el resto mediante MQTT.
Campos emitidos
Nivel de misión (desde buildMissionConfigXml)
<wpml:flyToWaylineMode>safely</...><wpml:finishAction>—goHome/autoLand/gotoFirstWaypoint/noAction.<wpml:exitOnRCLost>—executeLostAction(predeterminado) /exitImmediately.<wpml:executeRCLostAction>—goBack(predeterminado) /hover/land.<wpml:takeOffSecurityHeight>— sólo cuandotakeoffSecurityHeightestá establecido.<wpml:globalRTHHeight>— sólo cuandorthAltitudeestá establecido.<wpml:globalTransitionalSpeed>.<wpml:droneInfo>/<wpml:payloadInfo>— enums de dron + payload.
Globales de plantilla (desde buildTemplateKml)
<wpml:autoFlightSpeed>—speedMpsde la misión.<wpml:globalHeight>—altitudeMde la misión.<wpml:heightMode>—relativeToStartPoint/WGS84/EGM96/aboveGroundLevel.<wpml:gimbalPitchMode>usePointSetting</...>.<wpml:waypointHeadingMode>— uno de los cinco valores (followWayline,fixed,manually,towardPOI,smoothTransition).<wpml:waypointTurnMode>— predeterminadotoPointAndStopWithDiscontinuityCurvature, conforme a especificación para stop-at-waypoint.<wpml:waypointTurnDampingDist>(0.2–1000 m).
Por waypoint (desde buildPlacemarks)
<wpml:executeHeight>— la altitud del waypoint.<wpml:waypointSpeed>— si el waypoint sobrescribe la velocidad.<wpml:useGlobalHeight>0</>+<wpml:executeHeightMode>— si el waypoint sobrescribe el frame de altura.<wpml:waypointHeadingParam>— modo de rumbo + ángulo + POI por punto.<wpml:waypointTurnParam>— modo de giro + amortiguación por punto.<wpml:gimbalPitchAngle>.<wpml:actionGroup>con un<wpml:actionTrigger>(reachPoint/betweenAdjacentPoints/multipleTiming) y una lista ordenada de entradas<wpml:action>—takePhoto,startRecord,stopRecord,hover,gimbalRotate,rotateYaw,focus,zoom,customDirName.
Acciones de cámara (desde buildCameraSettingsXml)
Por especificación, el generador sólo emite los tres hijos legales
de actionActuatorFuncParam de takePhoto / startRecord:
<wpml:fileSuffix>— siempre emitido (obligatorio).<wpml:payloadLensIndex>— lista separada por comas de lentes habilitadas (predeterminadowide,zoom).<wpml:useGlobalPayloadLensIndex>—1= usar conjunto de lentes a nivel de misión,0= override desde esta acción.
Otros campos de cámara en DroneCameraSettings (focus, metering,
exposure, ISO, aperture, shutter, dewarp) no se emiten a WPML
— el firmware ≥ 1.6 rechaza elementos desconocidos dentro de
actionActuatorFuncParam. Esos ajustes se aplican mediante
comandos MQTT de control de cámara en vivo en su lugar.
Limitaciones conocidas
- Corredores de mapping 3D. El patrón
mappingconmappingCaptureMode: 'both'emite un compuesto nadir + oblicuo pero aún no emite el elemento<wpml:mappingStrip>exclusivo de spec. Los corredores de franja siguen siendo volables mediante la ruta genérica de waypoint, pero sin las optimizaciones de mapping del lado de la aeronave que DJI ofrece para ese elemento. - Modos inteligentes. Foco, smart-follow, panorama y POI-track se controlan en el momento del vuelo mediante mensajes MQTT DRC (drone-remote-control), no horneados en el KMZ.
- Defaults de aeronave. Los defaults del generador apuntan a la
familia Mavic 3D (
droneEnumValue: 77). PasadroneEnumTypeenKmzGenOptionspara otras aeronaves.