Flight Assist

Grid Generator — Manual

SAR MISSION BUILDER · WPML EXPORT FOR DJI PILOT 2
DRONE COMPATIBILITY
Built for the DJI Matrice 30T (default), DJI Mavic 3 Thermal (M3T), and DJI Matrice 4T (M4T). Pick your aircraft in the Drone section at the top of the settings panel — camera FOVs and the WPML mission file format adapt automatically. Other DJI drones (M350, M300, M3M, M3E, M4E / M4D / M4TD) are not currently supported; use "Request another drone" below if you need one added.
Contents
  1. What this tool does
  2. 5-minute workflow
  3. Drone selection
  4. Camera modes
  5. Search patterns
  6. Flight parameters
  7. Safety & finish behaviour
  8. Per-strip speed
  9. Editing the polygon
  10. Importing to Pilot 2
  11. Common workflows
  12. Altitude & regulations
  13. Troubleshooting
  14. Sending missions to FlightHub 2
  15. Glossary

1 · What this tool does

The Grid Generator builds DJI Waypoint missions in WPML format (.kmz) for SAR-grade area coverage on supported DJI drones (currently M30T, M3T, and M4T). Three patterns: GRID and SPIRAL draw a polygon → produce systematic strip coverage; HASTY drops pins → produces a visit-each route with hover at each. Pick the pattern that fits the phase of search you're at. The tool calculates strip spacing from camera FOV + altitude + overlap (for GRID/SPIRAL) and routes pins nearest-neighbour with 2-opt refinement (for HASTY) — so coverage is uniform rather than guesswork.

Typical use cases: SAR (search-and-rescue), suspect containment, asset overflight, perimeter inspection.

2 · 5-minute workflow

  1. Centre the map on your area — the page auto-pans to your location on load (silent if you decline browser geolocation). Pan/zoom by touch, or tap ⋯ MORE📍 LOCATE to re-centre / enter coordinates manually.
  2. Tap ✏️ DRAW, then tap the map to place vertices around the search area. The first vertex is green; tap it again (or tap ✓ DONE) to close the polygon. ⟵ UNDO removes the last point.
  3. Open ⚙️ SETTINGS — choose camera, altitude, overlap, pattern, speed, finish behaviour.
  4. Tap ⚡ GENERATE. The grid (strips + waypoints) renders on the map. Check the stats card: strips, waypoints, estimated duration, path length.
  5. Tap ⋯ MORE🚁 SET START, then tap the corner you want the mission to begin from. The waypoint order reverses if needed so the first WP is closest to your chosen start.
  6. (Optional) ⋯ MORE✏️ EDIT drags polygon vertices, then re-GENERATE. 🏎️ SPEED (primary toolbar) overrides individual strip speeds (e.g. slow over a specific zone).
  7. Tap ⬇️ DJI KMZ. Two files download: SAR…m20260527.kmz and the same content as .zip. On Android FlightHub 2 use the .zip — the picker greys out .kmz.
  8. Import in Pilot 2. Easiest if you built this on the RC Plus directly (Firefox is pre-installed — see §10): the file is already on the controller, just open Mission Library → ⋯ → Import Mission and pick it. If you built on a phone/laptop, copy via USB-C first.

3 · Drone selection

At the top of the settings panel, pick the aircraft you'll fly the mission on. The choice persists per-browser in localStorage so you only set it once per device.

The drone choice is baked into the KMZ. The WPML mission file embeds the aircraft's identifier (DJI calls it droneEnumValue) — DJI Pilot 2 reads this and refuses to fly a mission built for a different airframe. Always confirm the Drone selector matches the aircraft you're flying before generating the grid.

Changing the drone after a grid is generated turns the GENERATE button yellow ("stale") because the new drone's FOV changes the strip spacing. Tap GENERATE again to rebuild.

4 · Camera modes

Camera choice drives the calculated swathe (ground width per pass), which drives strip spacing, which drives total flight time. Pick deliberately.

WIDE   84° FOV · 24 mm equivalent

Best for general daytime area search. Wider swathe → fewer strips → faster coverage. The default.

THERMAL   ~57° FOV · IR sensor

Detects body heat through light vegetation and at night. Narrower FOV means more strips for the same area — accept the time hit for the detection capability. Best for night SAR, dense bush, recently-deceased searches.

SPLIT SCREEN   Wide + Thermal, single flight

Grid is calculated on the IR FOV so thermal gets full coverage; the wide camera then gets generous over-coverage (this is fine). Set Pilot 2 to split-screen view before takeoff so both feeds are visible simultaneously. Best for SAR where the target may be mobile — one pass gives you both signal types.

Split tip: a yellow banner appears at the top of the map to remind you to set Pilot 2 split-screen view before launch.

5 · Search patterns

SAR doctrine typically progresses hasty → POI → systematic. This tool supports all three phases through three patterns. Pick the one that matches the phase you're at.

GRID (lawnmower) — systematic

Parallel strips, alternating direction. The standard SAR pattern — systematic, predictable coverage. Best for large open areas where you don't know where the target is. Draw a polygon, generate, fly.

SPIRAL — systematic with directional bias

Concentric rings around the centre. Two directions:

HASTY — pin-based quick first-pass

Drop pins on the obvious places — last known position, trail junctions, parking, water features, the vehicle — and the drone visits each in nearest-neighbour order, hovering at each with the gimbal down. The fast first-pass before you commit to a full systematic sweep. Also useful as Drone A in a two-drone parallel operation while a second drone runs a GRID over the same area at a different altitude.

Two ways to drop pins:

Tap any pin to set per-POI overrides (hover time and altitude) or remove it. ⚡ GENERATE routes through the pins (nearest-neighbour, then 2-opt refinement when you have more than ~10 POIs). Each waypoint gets a 15-second hover by default with gimbal nadir.

Two-drone scenario: generate a HASTY mission in this tool for Drone A, then generate a GRID mission for Drone B over the same area. Use different altitudes (e.g. 50 m vs 80 m) so you have visual separation. If Drone A's hasty turns up a hit, recall Drone B before it finishes the systematic sweep.

Terrain-aware altitudes [BETA · v1.2]

By default DJI waypoint missions use altitudes relative to the takeoff point. If you take off in a valley and the next pin is up a mountain, the drone arrives at the same height above the valley — which can be 200 m underground at the pin. This is the classic CFIT (controlled flight into terrain) failure mode for hand-flown SAR.

In the HASTY settings panel, tick Terrain-aware altitudes. When on:

Segment safety (v1.3, shipped). Every straight-line segment between pins is now scanned at ~20 m intervals against Mapbox Terrain-DEM. When the terrain along a segment would rise above the linear flight interpolation between the two endpoints, we insert two transit waypoints — one at the source pin's coordinates lifted to the segment's safe altitude, and one at the destination pin's coordinates at the same altitude. The drone climbs vertically before crossing horizontally, then descends vertically at the destination (the classic safe-mountain SAR procedure). Transit waypoints carry no hover and no gimbal action — they're navigation-only.
Launch point. "Where you'll physically take off from" — the operator's actual location, often distinct from any POI. Affects the RTH-height calculation: with launch set, RTH height = (highest waypoint MSL − launch MSL + 30 m). Without it, we fall back to "lowest pin terrain" as the takeoff reference, which is conservative but can over-shoot the RTH when you launch from a hilltop. Set the launch pin before exporting — two ways: tap the 📍 SET LAUNCH (tap map) button then tap the map, or type the launch coords (decimal or DMS) into the coordinate input and press + SET. Useful when the operator's coords arrive over radio.
Altitude profile chart (v1.4, shipped). When terrain-aware is on and you tap GENERATE, a thin SVG strip appears above the action bar showing the mission's altitude profile: brown silhouette is the terrain along the route, the cyan dashed line is the planned flight path, cyan dots are POIs, and small hollow dots are transit waypoints inserted by the segment-safety scan. The summary line shows the altitude range and whether any segments were lifted. Use this as your final visual check before exporting — if you see the flight line touching or sinking into the brown silhouette anywhere, do not fly. (It shouldn't — the scan should have lifted that segment — but verify with your eyes.)
Datum: we use EGM96 (geoid / MSL) heights via Mapbox Terrain-DEM. SACAA charts and DJI Pilot 2's "ASL" display use the same reference, so the numbers should agree. If you see Pilot 2 reporting an altitude meaningfully different from what the popup said pre-flight, do not take off — investigate first. Likely culprits: barometric drift (±5 m typical, more in unstable weather), GPS vertical error (5-10 m without RTK), or wrong takeoff-point baro zero.
Coverage: Mapbox Terrain-DEM covers the entire globe via SRTM/ALOS. Sub-Saharan Africa including all of South Africa is fully covered with ~16 m vertical accuracy. Coastline-adjacent pins (closer than ~30 m to the sea) may read 0 m — the dataset flattens waterbodies.

6 · Flight parameters

Altitude (AGL)

Higher altitude = wider swathe = fewer strips = faster, but targets appear smaller in the frame. 40–80 m is typical for SAR. Default cap 120 m — see regulations below.

Side overlap

Percentage overlap between adjacent strips. Higher = more thorough but longer flight. 60% is the SAR default — gives confident coverage without absurd flight times. Reduce to 40–50% for fast first-sweep, increase to 75–85% for confirmation passes or thermal-only work.

Grid bearing

The compass heading the strips run along. Set the bearing to match the longest axis of your search area — this gives fewer, longer strips and fewer turns, saving battery. Pick a preset (N/S, NE, E/W, SE) or enter a custom value 0–179°.

Flight speed

Default global speed (m/s). Slow (3 m/s) is right for thermal — the sensor needs dwell time per pixel. Medium (5 m/s) for daytime wide. Fast (8–15 m/s) for first-pass sweeps or when battery is short. Per-strip overrides available — see Per-strip speed.

7 · Safety & finish behaviour

Safe takeoff height

The drone climbs straight up to this height before flying horizontally to the first waypoint. Must clear all obstacles at the launch point — power lines, trees, structures. Defaults to 60 m; raise this if launching from a tight clearing under tree canopy or near power lines. Can exceed your operation altitude — useful purely for obstacle clearance.

Drone heading

Waypoint turn speed

How fast the drone yaws at each waypoint when changing direction. Slow = smooth (~30°/s); Normal ≈ 60°/s (default); Fast ≈ 100°/s. Slow is gentler on gimbal stabilisation and reduces motion blur on imagery; Fast saves seconds per turn × dozens of turns.

Gimbal control

On mission complete

RTH (default) — drone returns to takeoff point and lands automatically. HOVER — drone holds position at the last waypoint (you fly it home manually). LAND — auto-land in place at the last waypoint (only safe if you know what's underneath).

If RC signal is lost

RTH (default) — drone immediately abandons the mission and returns to home. HOVER — drone holds at the lost-signal point waiting for reconnection (consumes battery; risky if signal doesn't return).

8 · Per-strip speed

After GENERATE, tap 🏎️ SPEED to enter Speed Mode. A yellow banner appears, and you can tap any strip on the map to set its individual speed (1–15 m/s) without affecting the others. Yellow-coloured strips have custom speeds. Use this when:

The picker also has RESET this strip, APPLY all strips (use the current strip's speed for everything), and RESET all strips (back to the global speed). Tap SPEED again to exit Speed Mode.

9 · Editing the polygon

After drawing, tap ⋯ MORE✏️ EDIT. Each vertex becomes draggable — adjust as needed. When you're done, tap ⋯ MORE✏️ EDIT again to exit, then ⚡ GENERATE to rebuild the grid. The GENERATE button turns yellow ("stale") when settings change after a grid is built — that's the cue to regenerate before exporting.

Heads-up — MORE menu. The bottom bar keeps five primary actions visible (SETTINGS · DRAW · GENERATE · SPEED · DJI KMZ) and tucks the rest into ⋯ MORE: EDIT, SET START, CLEAR, SEND FH2, PREVIEW, LOCATE. A green dot pulses on MORE whenever an inner action is "ready" — e.g. after GENERATE when SET START unlocks.

10 · Importing to Pilot 2

Best workflow: build directly on the RC Plus (no laptop, no cable)

The RC Plus has Firefox pre-installed. With internet connectivity:

  1. Open Firefox on the RC Plus controller.
  2. Browse to flightassist.co.za.
  3. Build and export the mission as in the 5-minute workflow (DRAW → GENERATE → DJI KMZ).
  4. The two downloaded files land in the RC's internal storage (typically Internal Storage/Download/).
  5. Open DJI Pilot 2 → Mission Library → ⋯ menu (top-right) → Import Mission → pick the file. Mission is ready to fly.

This is the cleanest workflow for SAR / field use — no laptop, no USB transfer, no file shuffling. Recommended whenever the RC has signal.

Alternative: build on phone or laptop, then transfer via USB

  1. Plug the RC Plus into your computer via USB-C. The controller mounts as a drive.
  2. Copy the file (.kmz or .zip — see note below) anywhere on the controller's storage. Internal Storage/Download/ works fine.
  3. Unplug. On the RC Plus, open DJI Pilot 2.
  4. Mission Library → ⋯ menu → Import Mission → select the file.
  5. The mission appears with the name from the file (e.g. SARWIDE60m20260527). Tap to open, review the waypoints visually, then Start.
Why the two files? The DJI FlightHub 2 picker on Android currently greys out .kmz files. The .zip is the same archive with a different extension specifically so the picker accepts it. Both files contain identical mission data — use whichever one your version of Pilot 2 / FH2 picker will open.

11 · Common workflows

Daytime general search

WIDE camera · 60–80 m altitude · 60% overlap · GRID pattern · Normal speed (5 m/s) · Nadir gimbal · RTH on completion. Good first-pass coverage for ~10–30 ha in a single battery.

Night thermal SAR

THERMAL camera · 40–60 m altitude · 60–70% overlap · GRID pattern · Slow speed (3 m/s) for dwell time · Nadir gimbal · RTH. Bring spare batteries — narrower swathe + slower speed eats endurance.

Suspect containment (escape-route priority)

THERMAL or SPLIT · 50–70 m · 70%+ overlap · SPIRAL Outside-In · Slow–Medium speed · Manual gimbal if you may need to peek mid-mission. The perimeter sweep happens first, so any movement outward gets seen before the centre.

Large area, time-critical

WIDE · 100–120 m altitude · 40–50% overlap · GRID · Fast speed (8–12 m/s) · Nadir. Accept reduced detection probability per pixel in exchange for covering more ground per battery; do confirmation passes on hits.

Dual-feed SAR (mobile target)

SPLIT SCREEN · 60–80 m · 60% overlap · GRID · Medium speed · Nadir. Set Pilot 2 to split-screen view before takeoff so the second pilot can watch both feeds simultaneously.

12 · Altitude & regulations

The altitude slider defaults to a 120 m AGL ceiling, which is the standard maximum for VLOS recreational/commercial operations in most jurisdictions without additional clearance. Above 120 m is restricted airspace in most countries and typically requires an Air Traffic Control / aviation-authority clearance and an appropriate operator certificate.

If you have the required certification and clearance for a specific mission, tick "I have ATC clearance / authorisation to exceed 120 m" in Settings → Flight Parameters. The slider unlocks to 365 m (1,200 ft), the cap aligned to the SA CAA RPL ROC standard. The label turns orange as a reminder.

South Africa pilots: 120 m AGL is the default ceiling under Part 101; exceeding it requires ATC coordination and is generally only permissible under a current RPL with an ROC for the operation type. The 365 m cap matches the SA CAA Part 101 maximum for ATC-approved flights. You are responsible for confirming clearance and compliance every flight.
General responsibility: nothing in this tool checks airspace, weather, NOTAMs, or your certifications. Pre-flight checks are your job — the tool just generates the mission file you choose to fly.

13 · Troubleshooting

"Location not available" when I tap MORE → LOCATE (or the page didn't auto-pan)

The browser has blocked geolocation for this site (or location services are off at the OS level). Click the padlock 🔒 in the address bar → Site settings → Location → Allow, then reload. Manual coordinate entry still works as a fallback from the LOCATE button.

Map shows OpenStreetMap, not satellite

The server is unreachable or the Mapbox token couldn't be fetched. The tool falls back to OSM so you can still draw and generate; satellite returns on the next page load. If it persists, check status bar — orange text means a server error was logged.

"SERVER UNAVAILABLE — try again" after tapping DJI KMZ

The KMZ generation runs server-side. Check your internet connection and retry. There is no client-side fallback (by design) — if the server is genuinely down, retry in a minute.

FlightHub 2 file picker can't see my .kmz

Use the .zip instead — same content, different extension that the FH2 Android picker accepts.

Browser blocked the second download

Chrome sometimes blocks rapid multi-file downloads. Click Allow downloads in the address-bar notification, or in chrome://settings/content/automaticDownloads add flightassist.co.za to the allow list.

"WP count exceeds limit" warning

If you see this in DJI Pilot 2, the import has too many waypoints for that version of Pilot 2's importer (modern WPML 1.0.5 supports several hundred — older Pilot 2 builds cap lower). FlightHub 2 typically accepts much larger missions (we've seen 360+ WP imports without complaint). Workarounds: (a) reduce the search area or raise altitude for wider strips → fewer waypoints, (b) split the mission into two and fly them sequentially, or (c) upload via SEND FH2 and sync to Pilot 2 from there.

GENERATE button turned yellow ("stale")

You changed a setting after generating the grid. Tap GENERATE again to rebuild before exporting.

14 · Sending missions to FlightHub 2

The ⬆ SEND FH2 button (under ⋯ MORE, alongside PREVIEW) uploads the generated mission straight into your FlightHub 2 organisation's Route Library, skipping the file download and USB transfer entirely. After upload, open DJI Pilot 2 → Mission Library → pull down to sync, and the mission appears.

One-time connect

The first time you tap SEND FH2, a modal asks for two things, both stored only in this browser's localStorage:

Each upload

  1. Tap ⋯ MORE⬆ SEND FH2 after generating a mission (the button enables when a grid exists, same as DJI KMZ).
  2. Pick the target FH2 project from the dropdown (populated automatically from your org).
  3. Confirm or edit the mission name (alphanumeric, pre-filled as SAR{cam}{alt}m{YYYYMMDD}).
  4. Tap Upload Mission to FH2. The status line cycles through GENERATING KMZ → AUTHENTICATING → UPLOADING → READY IN FH2.
  5. On success, follow the deep link into the FH2 project, then in DJI Pilot 2: Mission Library → pull down to sync. Mission appears.
Hand-flown limitation: FH2's "Create Flight Task" API requires a dock and is not available for hand-flown drones (M30T, M3T). The mission lands in your Route Library; you still launch and fly the mission from Pilot 2 manually. That's no different from importing a KMZ — just without the file shuffle.

Privacy posture

Your Organization Key and API host are stored only in this browser's localStorage on this device. They are sent to our server only at the moment of upload, used to make the DJI API calls, and are never logged, persisted, or written to any database. The KMZ itself is also not stored on our infrastructure. Anyone with access to this browser profile can read the stored key — on shared devices, tap disconnect in the modal's connected view to clear it. See the privacy notice for full detail.

Troubleshooting upload errors

15 · Glossary

TermMeaning
WPMLDJI's Waypoint Mission Language — the XML format inside a .kmz that Pilot 2 reads.
SwatheThe ground width covered by a single camera pass at the configured altitude and FOV.
OverlapPercentage of swathe shared between adjacent parallel strips.
StripOne straight pass of the lawnmower pattern; two waypoints per strip (start + end).
NadirGimbal angle of -90° — pointing straight down at the ground.
AGLAbove Ground Level — altitude relative to ground beneath the drone (not sea level).
RTHReturn To Home — drone autonomously flies back to its recorded takeoff point and lands.
ROCRPAS Operator Certificate (South Africa, SA CAA Part 101) — required for commercial drone operations.
VLOSVisual Line Of Sight — pilot can see the drone unaided.
FH2DJI FlightHub 2 — the mission-management web app and supporting Pilot 2 component.

‹ BACK TO TOOL  ·  ABOUT  ·  PRIVACY
Powered by BizTrack · BZ Tracking Solution (Pty) Ltd