Skip to content

Submitting an ODM job

A MappingJob is the unit of work for ARGUS photogrammetry. One job = one image set → one processing run → one bundle of artifacts. Jobs are scoped to an operationId and flow through the ODM worker stages on the backend.

Creating a job

From the org Mapping feature (/en/mapping/) or the operation’s mapping tile:

  1. Click New mapping job.
  2. Set the name (required).
  3. Pick Outputs (MappingOutputType, multi-select):
    • orthomosaic — 2D ortho (GeoTIFF / COG).
    • 3d_model — textured 3D mesh (OBJ + glTF).
    • point_cloud — LAS / LAZ.
    • dem / dsm — elevation / surface.
    • ndvi — vegetation index (requires NIR band).
    • thermal_map — thermal mosaic.
  4. Pick Quality (MappingQuality):
    • preview — fast low-res validation.
    • low — quick, reduced detail.
    • medium — default.
    • high — high detail, longer runtime.
    • ultra — maximum detail.
  5. Optionally set CRS — presets EPSG:4326 (WGS 84), EPSG:3857 (Web Mercator), EPSG:3395 (World Mercator), or leave blank to let ODM auto-detect.
  6. Click Create job. Status becomes pending.

The tile also offers Clone job on any existing job to prefill the form with the same outputs / quality / CRS — handy for re-running after tweaks.

Uploading source images

With the job selected, drag photos onto the drop zone or use the file picker. Accepted: JPG / JPEG / PNG / TIF / TIFF / DNG.

Upload behaviour:

  • Files upload one-at-a-time with per-file byte-level progress.
  • The overall bar is a smoothed blend: completed files contribute 1 each, the in-flight file contributes its byte-level fraction (avoids the staircase effect on large images).
  • Status sits at uploading until every file lands. A failure surfaces on MappingJob.error; fix and re-upload.

When images are in place, click Start processing. Status flips to queued.

Auto-creation from a mapping mission

A DroneMission with pattern: 'mapping' and autoProcessOnCompletion: true (default) spawns a job on the backend as soon as the mission reaches dji_completed. The mission’s captured media is wired up as the job source — no manual upload step. Disable the flag on the planner if you want to curate the image set first.

Processing stages

The worker walks the ODM pipeline. MappingJob.steps[] streams per-stage timestamps and progress:

StageWhat’s happening
queuedWaiting for an ODM worker slot.
initialisingDownloading images from S3 into the worker.
matchingSIFT / feature matching between overlapping photos.
sfmStructure-from-motion — camera poses + sparse cloud.
denseDense point-cloud reconstruction.
meshingMesh from the dense cloud.
texturingTexture baking onto the mesh.
tiling3D Tiles / COG generation for in-app preview.
completedOutputs ready; artifacts[] populated.
failedTerminal; error carries the last-log excerpt.
cancelledUser-cancelled; partial outputs discarded.

Overall progress (0-100) is updated in sync with step progress.

Outputs

Once completed:

  • Artifact list — each MappingArtifact carries type, format, sizeBytes, bounds ([west, south, east, north]), thumbnailUrl, and — for 3D — a tilesetUrl.
  • Download — the UI calls getArtifactDownloadUrl(jobId, type) which returns a presigned S3 URL. Fallback is the legacy baked-in artifact.url.
  • Preview — thumbnails inline; 3D tilesets load into the ops-map 3D view.
  • Archive — an archive pseudo-artifact bundles the full ODM all.zip.

Cancel / delete / re-run

  • Cancel a running job — the worker is told to stop; status goes to cancelled.
  • Delete — removes the job and its S3 artifacts.
  • Re-run — use Clone job to produce a new job from the same settings. ODM runs do not mutate in place.