All projects

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
Drone Mapper: orthophoto of 435 photos over the satellite basemap
435 photos processed at full resolution and lined up with the satellite basemap, with survey blocks, a farm road and field huts drawn as GIS layers.
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

  1. 01 · Read

    EXIF and DJI XMP: GPS, gimbal pitch, relative altitude, factory lens calibration. Oblique and take-off frames are dropped.

  2. 02 · Match

    SIFT features and spatial matching by GPS neighbours (COLMAP), so 400+ photos match in minutes instead of hours.

  3. 03 · Solve

    Bundle adjustment with GPS pose priors and a robust loss, then a similarity fit into WGS 84 / UTM.

  4. 04 · Surface

    A 0.5 m DSM from the sparse cloud: neighbourhood medians and edge-preserving smoothing keep roof edges as steps.

  5. 05 · Mosaic

    Each ground pixel from the most nadir photo that actually sees it, seams cross-faded, vignetting and exposure balanced.

  6. 06 · Register

    Optional shift to the Esri/Maxar basemap by gradient correlation, or a 7-parameter Helmert fit to surveyed GCPs.

  7. 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.

Orthophoto before and after occlusion-aware mosaicking
Urban test area. Before: the median breaks at a photo seam. After: one clean line.

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

Flight planning
Flight planning: draw the area, set height and overlap, and send the mission to DJI Fly or export KMZ.
Marking a ground control point
Ground control: mark each surveyed target in a few photos; the app solves the transform and reports the residuals.
GIS layers
GIS layers: shapefiles and drawn features with attributes, on top of the orthophoto.
Satellite imagery search
Sentinel-2 and Landsat search with cloud cover and previews, clipped to the project and enhanced to 2.5 m.
KLHK map layout
Print layout following SK MENLHK No. 399/2024, exported as a one-page 300 dpi GeoPDF that opens in Avenza Maps.

Next case study

Remotepilot.id

Company website for PT Remote Pilot Indonesia, with proposals generated on demand