CASEDesktop · Photogrammetry & GIS
Drone Mapper
A desktop app that turns drone photos into an orthophoto, a surface model, and a print-ready map in one click. I wrote the orthophoto engine in C++, the GIS tools around it, and the licensing platform it sells through.
- Role
- Designer, engine and app engineer
- Period
- 2026
- Platform
- macOS (Apple silicon) and Windows

- 435 photos
- to a full-resolution orthophoto in 27 min on a MacBook
- 1.5 cm
- ground pixel, orthophoto and DSM as tiled BigTIFF
- ~13,500
- lines: C++ engine, Electron app, licensing backend
- 2 platforms
- macOS (Developer ID signed) and Windows
01The problem
Mapping shouldn’t need a specialist
After more than a decade of survey flights, the slow part was never the flight. It was the desk work: expensive licences, Docker setups, dozens of parameters, and then redrawing every map by hand to match the formats Indonesian agencies require.
Drone Mapper puts that whole chain in one app for the pilots and foresters I train: plan the flight, drop in the photos, press Start, and print a map that follows the BIG or KLHK standard, with coordinates a field team can navigate by. Everything runs on the user’s own computer; photos never leave it.
02Product
Seven steps, one button
01 · Read
EXIF and DJI XMP: GPS, gimbal pitch, relative altitude, factory lens calibration. Oblique and take-off frames are dropped.
02 · Match
SIFT features and spatial matching by GPS neighbours (COLMAP), so 400+ photos match in minutes instead of hours.
03 · Solve
Bundle adjustment with GPS pose priors and a robust loss, then a similarity fit into WGS 84 / UTM.
04 · Surface
A 0.5 m DSM from the sparse cloud: neighbourhood medians and edge-preserving smoothing keep roof edges as steps.
05 · Mosaic
Each ground pixel from the most nadir photo that actually sees it, seams cross-faded, vignetting and exposure balanced.
06 · Register
Optional shift to the Esri/Maxar basemap by gradient correlation, or a 7-parameter Helmert fit to surveyed GCPs.
07 · Publish
Tiled GeoTIFFs with overviews, BIG/KLHK print layouts, and a georeferenced GeoPDF for Avenza Maps.
03Engine · Orthorectification
Straight roads, honest roofs
Stitching photos onto a smoothed ground model makes buildings smear and breaks roads where two photos meet. The engine builds a sharper surface model and, for every pixel, walks the line of sight over it to check the ground is really visible from that photo.
Hidden ground is taken from another photo instead, so roofs stay in one piece and seams no longer zig-zag across the road. Tested on a dense residential area: same processing time, cleaner edges.

Hard parts
What made it difficult
Quality without a dense point cloud
A sparse reconstruction barely outlines buildings, so the engine combines an edge-preserving DSM, an occlusion test and a fallback for high-rises to avoid smeared roofs and holes.
Huge rasters, small memory
Orthophotos of 25,000 px a side are written tile by tile with an overview pyramid, and the print layout streams only the detail the page needs at 300 dpi.
Two operating systems, one engine
The same C++ code builds with Homebrew libraries on macOS and with vcpkg and MSVC on Windows, scripted inside a virtual machine.
Licensing that respects field work
Plans are enforced on the server, but a seven-day offline grace keeps the app working where there is no signal.
Outcome
Who it helps
One click
No Docker, no parameters to tune; the defaults are tuned for DJI surveys.
Private by design
Processing runs on the user’s computer; photos are never uploaded.
Maps agencies accept
Layouts follow PerKa BIG No. 3/2016 and SK MENLHK No. 399/2024 out of the box.
Usable in the field
GeoPDF exports open in Avenza Maps with live GPS position.
04Skills · What it took
The craft behind it
Programming
Systems, desktop, web
- C++17 engine on libtiff, libgeotiff, PROJ and libjpeg-turbo, parallelised with OpenMP; tiled BigTIFF writer with an overview pyramid so a 25,000 px orthophoto opens instantly.
- Super-resolution of Sentinel-2 to 2.5 m: an ONNX Runtime CNN run in overlapping tiles, with an FFT low-pass constraint that keeps the result faithful to the measured reflectance.
- Electron + React + TypeScript desktop app with MapLibre; IPC to the engine, live progress, and print-to-PDF at 300 dpi with full-resolution imagery streamed from the GeoTIFF.
- Licensing on drone.co.id (Next.js, Prisma, PostgreSQL): device-code sign-in, monthly plans with Midtrans, server-enforced quotas, vouchers, and an offline grace period.
GIS & photogrammetry
Geodesy, remote sensing, cartography
- Orthorectification with occlusion testing: the view ray is walked over the DSM, so ground behind a building never takes the roof from a photo that sees it from the side.
- Ground control: points triangulated from marks in 2-4 photos, a Horn/Helmert similarity to the survey coordinates, and an RMSE report on control and check points.
- Co-registration to satellite basemaps by normalised gradient correlation, applied only when all four quadrants agree.
- Sentinel-2 and Landsat from the Planetary Computer STAC API, clipped to the project polygon; SHP/GeoJSON layers; ISO 32000 GeoPDF.
- C++17
- OpenMP
- libtiff / GeoTIFF
- PROJ
- COLMAP
- ONNX Runtime
- TypeScript
- Electron
- React
- MapLibre GL
- Next.js
- Prisma
- Midtrans
05Screens
A closer look





Next case study
Remotepilot.id
Company website for PT Remote Pilot Indonesia, with proposals generated on demand
