Mission planning · Photogrammetry · macOS

Plan the flight. Fly it.
Render it. Repeat.
All locally.

Draw a survey area, get an autonomous waypoint mission with live FAA airspace checks — then turn the photos into a measurable 3D model on your own Mac. No account. No cloud. No subscription.

Free and local. macOS 12+, Apple Silicon for photogrammetry.

DroneMap Studio planner: survey grid over Mokoliʻi island with a Honolulu Mode C airspace finding
GSD
2.13
cm / px
Photos
495
frames
Distance
8.77
km
Batteries
3
M4T

Real screenshot, real stats: a 28.9 ha survey of Mokoliʻi planned in the app. The photo behind it is from the flight.

One app · three jobs

From survey area to measurable model, without leaving your Mac

Flight Planner

Draw a rectangle or polygon, pick your drone and camera, set altitude and overlap — the waypoint grid, POI orbits and live mission stats update as you type. Reshape any corner after the fact; the mission regenerates.

FAA airspace, live

Restriction layers render straight onto the map, and the app warns automatically when your plan conflicts with them. The mission in the screenshot above found the Honolulu Mode C veil on its own.

3D model & measure

Feed the flight's photos to your Mac's GPU — Apple Object Capture builds a textured 3D model locally. Then measure it: distance, path, area and height, right in the viewer.

The planner

See the mission in three dimensions before anything flies

Every screenshot on this page is the actual app, planning and reconstructing the same island: Mokoliʻi — Chinaman's Hat — off Oahu's windward coast.

Routes at altitude, ground in view

This is a terrain-following mission wrapped over the island itself — the waypoint lattice rides the ground at a held height above terrain, drawn in 3D at the altitudes it actually flies, so a route that would clip a slope is visible before export, not after takeoff.

The flight safety check runs on the finished mission and names its verdicts: launch reference, terrain profile, ground clearance leg-by-leg, and the 400 ft limit against the ground directly beneath. What it can't verify it discloses — here, two airspace layers that couldn't be fetched are listed as not checked, never silently skipped.

Live capture of the app: a terrain-following waypoint lattice draped over Mokoliʻi in the 3D view, with every flight safety check verdict green

Live capture: 608-frame terrain-following mission over Mokoliʻi — every clearance verdict green

Passes for the terrain the world actually has

Beyond the grid: POI orbits (full rings, partial arcs, look-up passes), 360° photo stations, corridor missions, facade scans, and building passes — a descending helix at stand-off distance, every frame aimed at the structure.

No-go zones are enforced in the plan itself: keep-out areas are subtracted and routed around; obstacles with a height are overflown with clearance.

Live capture of the app: a top-down ring pass around Mokoliʻi on the Apple 3D map, home point on the beach, with the flight safety check panel attached

The island flown as a structure — a top-down ring pass on the Apple 3D map, safety verdicts attached

The model side

The island, rebuilt on the Mac that planned it

1,123 visual frames from a 19-minute evening flight, reconstructed with Apple Object Capture and georeferenced from the camera poses — scale landed within 0.2 % of true.

Textured, georeferenced, measurable

The model is metric and north-up in the take-off frame, so measurements mean something: distance, path, area, height, volume — plus cut/fill against a design surface.

Every capture carries its accuracy report: pose-fit residuals, checkpoint RMSE if you import control points, and the smallest blunder the data could even have caught — so "no errors found" is a measurement, not a shrug.

Textured 3D reconstruction of Mokoliʻi island in the model viewer

Object Capture output in the viewer — reef to summit in one mesh

Thermal, projected onto the terrain

Fly a thermal-equipped aircraft and the infrared frames are projected onto the reconstructed surface — 1,123 IR frames painted onto this island's geometry, viewable side-by-side with the visual model.

Radiometric layers stay with the capture they came from; the app refuses to drape one flight's thermal raster over another flight's geometry.

Thermal layer projected onto the 3D island model

The same geometry wearing its thermal layer

Hillshaded elevation surface of the island

Elevation surface

737,649 height samples on a 0.30 m grid, built from the mesh — the basis for volumes, contours, terrain following and change detection.

Thermal orthomosaic of the island

Thermal orthomosaic

The infrared record as a flat, georeferenced raster — export it, difference it between flights, or drape it back onto the model.

Other sites

An island is the easy case

Four more captures out of the same app, from the weeks after the island flight — a clock tower, an industrial complex in visible and infrared, and a 26-hectare park. Every figure below is read straight out of that capture's own record.

Aloha Tower reconstructed in the DroneMap Studio 3D viewer, seen from the front — clock faces, copper roof and spires resolved

A tower, not a terrain

Orbit a vertical landmark and the same pipeline resolves clock faces, finials and the copper roof. Nothing about the reconstruction assumes you are pointing the camera at the ground.

Aloha Tower162 frames solvedpose fit ±0.66 m1.3 cm grid
Malina Complex model in the viewer beside the Model Accuracy panel, which reports plus or minus 1.19 metres against 2,042 laser control points and refuses a verdict because the photos span two flights

It grades itself — or says why it can't

The accuracy panel checks the model against the aircraft's own laser rangefinder: 2,042 surveyed ground points, no targets to lay out. Here it reports the error and then withholds the verdict, because the photos came from two flights whose take-off heights differ by 1.41 m.

Malina Complex1,264 frames solvedlaser ±1.19 m2,042 control points
The same Malina Complex geometry wearing its thermal layer — roof and yard temperature structure in orange and purple

The same geometry, in infrared

1,021 radiometric frames projected onto the surface they were flown over, boresight solved from the capture itself. The layer stays bound to its own capture — it will not drape over a different flight's geometry.

Malina Complex · IR1,021 frames42.7% coverage
Palsey Mink Baseball park reconstructed in the viewer — ball diamonds, tree line and paths across a 311 metre site

Or a whole park

Nadir, oblique and tower passes in one capture — 25.9 hectares of reconstructed surface on a 0.56 m grid. The solver placed all 2,000 frames it was given, and the thermal pass covered two thirds of that ground.

Palsey Mink Baseball park2,000 frames solved25.9 ha surfaceIR 65.7%

The flight safety check

One button. Twelve questions asked of your finished mission.

Press it and the app re-runs every check against the mission as it stands right now, then tells you what it found — in a list you read top to bottom before you drive to the site.

What it checks
Launch reference Where the app thinks the ground is under your take-off point, and where that number came from — because every altitude in the mission is measured up from it.
Terrain profile Whether the terrain-following heights still describe this mission, or something changed after they were built and quietly turned it back into a flat one.
Ground clearance Walks the whole route leg by leg and checks it clears the ground by the required margin — naming which elevation data judged it, since the public sources disagree by tens of metres at summits.
400 ft limit Whether any point sits more than 400 ft above the ground directly beneath it — which is how the rule is written, not 400 ft above where you launched.
Airspace Your plan against the FAA layers, checked as areas and as flight lines, so a restriction the route merely crosses is caught too.
Obstacles What is standing up inside the area — towers, masts, buildings — and whether anything is taller than your mission altitude. The ground check can't see structures at all, so nothing else has looked.
Radio shadow Whether terrain hides any waypoint from where you're standing, and what it cost to raise the ones it did — a raised waypoint keeps its aim, so the bottom of a wall may stop being photographed.
Photo rate Whether the camera can actually keep up with the shots the mission asks for at the speed it flies.
360° stations Whether any panorama needs more frames than its ring can hold — and says so rather than flying a station that quietly misses part of the sphere.
Waypoint budget The whole mission against the file limits your aircraft will accept, counted in the same units the exported file uses.
Passes not flown Any pass you enabled that produced no flight path — over budget, failed to build, or missing a number it refuses to guess — named individually.
Route caveats The honest footnotes: legs nothing routed around, climbs not counted in the flight time, anything the plan carries that you should know before you fly it.

Unknown is never green

A check that didn't finish, couldn't reach its data, or was switched off reads DID NOT RUN and says why. It never shows a tick it didn't earn.

The report also dies the moment you change the mission — a green result describing a plan you've since edited is worse than no result, so it's replaced with “run it again”.

Some numbers it won't invent

The lowest laps of a building pass are the closest, most cluttered flying in the mission, and the ground at the foot of a building holds cars, fences, trees and people no terrain model can see. So “Stop descent at” has no default — the pass won't build until the person standing at the base chooses it.

The check adds visibility, not permission. Export asks the same questions again before it writes the file.

Getting the work out

Straight to the controller. Straight into your other tools.

Both ends of the job leave this app in a form something else can actually open — the mission on the aircraft that flies it, the model in the software your client already runs.

Mission files your aircraft actually flies

Missions from this app have flown a DJI Matrice 4T, a Mini 5 Pro and an Air 3S — per-waypoint gimbal, altitude and heading verified by reading them back out of the photographs those flights took.

.kmzDJI WPML
.csvLitchi
.waypointsArduPilot Copter / Plane
.kmlGoogle Earth
.geojsonGIS

Send it to the controller over the cable

Plug the controller into your Mac by USB-C and press send. No SD card, no cloud account, no e-mailing a file to yourself in the car park. The app works out which flight app the controller runs — from its USB name, then confirmed against its filesystem — because the two need completely different transfers, and sending the wrong shape doesn't fail, it just puts the file somewhere the app never looks.

DJI Fly

RC 2, RC-N via phone

DJI Fly tracks each waypoint mission by UUID and won't read a loose file, so the app replaces a slot's contents in place. The mission already there is backed up first, and the transfer is size-verified.

DJI Pilot 2

RC Plus 2, RC Pro, Smart Controller

Pilot 2 imports from its own route library, and its browser only looks in one folder — so the mission is placed exactly there, not in Documents where a “successful” transfer is invisible.

macOS ships no MTP stack at all, so the protocol is implemented natively inside the app rather than depending on Android tooling you'd have to install.

The model, in the format the next program wants

A reconstruction is only worth what the next person can open. Export the surface as a mesh, a point cloud, contours or a raster — with textures when the look matters — and it lands in the CAD, BIM, mine-planning or GIS package that's already in use.

.dxfcontours + surface
.ifcBIM
.laspoint cloud
.tifGeoTIFF
.obj+ textures
.fbx+ textures
.ply
.stl
AutoCAD / Civil 3DDXF
RevitIFC
NavisworksIFC / FBX
SketchUpDXF / OBJ
Deswik / MicromineDXF / LAS
Datamine / Maptek VulcanDXF / LAS
QGIS / ArcGISGeoTIFF
3ds MaxFBX

You won't find .rvt or .dwg here, and shouldn't anywhere else either — they're proprietary and no third-party tool can write them honestly. IFC and DXF are Autodesk's own published interchange formats, and they open natively.

Local-first

Your site data never leaves your machine

DroneMap Studio is a standalone macOS app. Double-click it — no Terminal, no browser tab, no login screen.

  • No account, no cloud, no subscription. Planning, airspace checks and photogrammetry all run on your Mac.
  • Photogrammetry on your own GPU. Client sites stay on your disk — the island model above never touched a server.
  • One data store. Projects, captures, models, offline tiles and elevation live in ~/Library/Application Support/DroneMapStudio.
  • Works offline once prepared. Download a working area first — tiles, elevation, airspace, obstacle heights — and plan or re-plan in the field with no network at all.

Get it

Build once, then it's just an app

# one-time build (needs Xcode Command Line Tools)
$ cd DroneMapStudio
$ ./mac/build_app.sh
# → ~/Applications/DroneMapStudio.app — double-click to launch

Requirements: macOS 12 or later. Apple Silicon for photogrammetry (Object Capture); the Planner runs on any Mac. Python 3 is bundled with macOS and used internally — you never invoke it. All JavaScript libraries ship inside the app, so it always starts.