Screen check
The GCP planner needs a bigger screen.
Open this page on a tablet or computer. Placing and dragging pins on a phone is too fiddly to do well, so the planner only runs on screens at least 600 pixels across on the short side (small tablets like the iPad mini and up).
Full width, edge to edge. Your line runs down the middle. Use the width you plan to fly.
Satellite imagery is USGS orthophoto (often 1 to 3 years old). Drag to pan; pinch or scroll to zoom. Full screen gives you a bigger map.
Your saved projects
Team projects
Fly your original boundary. Your camera or LiDAR swath reaches past the edge lines, so points 25 ft outside are still captured. Check the outer pins fall inside your swath, ideally well in from the edge of the photos. Why: DroneDeploy wants GCPs at least 50 ft (up to 100 ft) in from the edge of the map, OpenDroneMap says 10 to 30 m (about 33 to 100 ft) in from the perimeter so each target shows up in at least 5 photos, and FHWA warns that points too close to the site edges can warp, so keep them off the far edges of the flight where overlap is thin. Check shots are different: ASPRS Edition 2 wants checkpoints evenly spread through the project area, and the USGS Lidar Base Specification says all checkpoints go inside the project area, so we keep them inside.
- Falkner & Morgan, Aerial Mapping: Methods and Applications, Ch. 11, §11.1.3 Skeletal Ground Control ("it is desirable to have exterior photo control points located outside the mapping area")
- Propeller: How Many AeroPoints and Ground Control Points Do I Need? (spacing about twice your flight height; at least five GCPs)
- Pix4D blog: Do more GCPs equal more accurate drone maps? (Nevada DOT test) (errors outside the controlled block grew with distance)
- DroneDeploy: How do I use ground control points? (a 50 to 100 ft buffer between GCPs and the edge of the map)
- OpenDroneMap docs: Ground Control Points (10 to 30 m from the perimeter so each GCP is in at least 5 images)
- FHWA HIF-20-034: UAS for surveying and mapping ("Keep GCPs no more than 500–1,000 ft apart"; stagger them on long corridors)
- USGS Lidar Base Specification: data processing requirements ("All checkpoints shall be located within the DPA"; well spread across the project area)
- ASPRS Positional Accuracy Standards for Digital Geospatial Data, Edition 2 (summary, PE&RS May 2025) (checkpoints must be separate from control; at least 30 for a full accuracy test; fewer allowed on small drone jobs if reported)
Where the spacing rules come from
There is no single law for GCP spacing. These defaults come from published guidance by the companies that make the software and gear. Change any number to match your contract or your own testing.
| Photogrammetry area (Typical) | An even grid of GCPs. The ones on the edge go 25 ft outside your boundary; the rest stay on the grid inside. A rectangle or square gets a GCP at each corner, plus one in the middle when a side is longer than the max gap (750 ft default). Bigger ones get more, so no GCP is more than the max gap from its nearest neighbor. Spacing at most 660 ft if the drone has no RTK/PPK (Aerotas: 600 to 700 ft at 200 ft flight height; North Dakota DOT: no more than 600 ft), or 1,000 ft with RTK/PPK (Datumate; FHWA says 500 to 1,000 ft; Utah DOT practice: no more than 1,000 ft). A 40-acre square comes out to 9 GCPs (3 × 3). |
|---|---|
| Photogrammetry corridor | GCPs on alternating sides every 1,000 ft with an RTK/PPK drone (North Dakota DOT, Datumate), or every 500 ft without (Propeller; Aerotas 500 to 1,000 ft), plus a pair at each end, all 25 ft outside the edge lines. Neighbor GCPs stay within 750 ft of each other (FixFinder default; you can change it), so long sections and bends get extra GCPs. Check shots go near the middle of a triangle of GCPs. A 2.1 km road study found this zigzag-plus-end-pairs layout gave the best accuracy for the work (Ferrer-González et al. 2020). |
| LiDAR area | One GCP near each corner plus one in the center (GeoCue; Wyoming DOT adds the center point over 40 acres). Past 50 acres we add 1 more per 25 acres, close to Phoenix LiDAR's "about 10 for every 250 acres" and GeoCue's 500 m (1,640 ft) circle rule. |
| LiDAR corridor | Alternating sides every 1,500 ft (Aerotas) plus a pair at each end. Also put points at the start and end of every flight block and in each overlap (GeoCue: every 500 m, about 1,640 ft). Set your flight blocks above and we add them. |
| Check shots | Areas: 1 per 10 acres (North Dakota DOT), at least 5 (our default), with at least one in each quarter of the site. Corridors: both ends plus every ½ mile, on alternating sides (North Dakota DOT). Always inside your boundary, never on a GCP, and never used to build the map. For LiDAR, put them on flat, hard ground like pavement (DJI L2 guide). |
| ASPRS 30 | A full ASPRS Edition 2 accuracy test wants at least 30 check shots. Pick "Set a number" and enter 30 if your contract asks for it. Fewer than 30 is OK if your report states the count. |
| Other options | Light: corners plus center, no more than 1,312 ft (400 m) apart (DJI Enterprise; Pix4D: 5 to 10 is usually enough). Dense: spacing = 2 × flight height (Propeller), for hills or tight specs. Answer "No" to the RTK/PPK question for the tighter non-RTK spacing. |
| Base distance | Single-base RTK within about 12 mi (20 km). |
How tight is good enough? In TopoMatters' 25-acre test, a DJI P1 camera and an L2 lidar both landed under 0.2 ft error with ground control. Wyoming DOT is stricter than most: it wants 10 check shots per 10 acres. Follow your contract when it says more.
- Propeller: How to Collect Quality Drone Data, Part 4: Long Corridors ("Place a GCP on each side of the corridor at least every 500ft (150m)")
- Propeller: How Many AeroPoints and Ground Control Points Do I Need? (spacing about twice your flight height; at least five GCPs)
- Propeller: Ground Control Placement and Distribution (perimeter and middle; at least 6 ft apart)
- Pix4D: Number and distribution of GCPs in corridor mapping (offset GCPs from one another, plus a pair at each end)
- Pix4D: Getting GCPs on the field (number and distribution) ("A minimum number of 5 GCPs is recommended. 5 to 10 GCPs are usually enough, even for large projects"; one in the center; not right at the edge)
- Pix4D blog: Ground control points, why are they important? (a square site: one GCP at each corner and one in the center; Nevada DOT found little benefit past 5 to 10)
- GeoCue: How to plan a corridor mapping project (lidar: start and end of each flight block, each overlap, and every 500 meters)
- DJI Zenmuse L2 Operation Guide v1.0 (lidar checkpoints evenly spread around and in the middle, on flat ground)
- DJI Enterprise: Ground Control Points (at least five; at most about 400 m or 1,312 ft apart; corners plus center; Nevada DOT saw diminishing returns after about 10)
- Datumate: GCP Distribution in the Survey Area (at least 5 GCPs, every 400 ft for non-RTK flights and every 1,000 ft for RTK flights)
- Aerotas: Ground Control Point Planning (non-RTK: perimeter plus even spread, 5 minimum; 200 ft flight height = 600 to 700 ft spacing; RTK drones: 1,500 ft)
- Aerotas: Linear Mission Planning (non-RTK corridors: pairs or alternating sides every 500 to 1,000 ft; a GCP or pair every 1,500 ft on 3,000 ft sections)
- FHWA HIF-20-034: UAS for surveying and mapping ("Keep GCPs no more than 500–1,000 ft apart"; stagger them on long corridors)
- FHWA HIF-23-060: UAS peer exchange (Utah DOT practices) ("Keep GCPs no more than 1,000 feet from each other")
- North Dakota DOT: Surveying UAS Guidelines (sites: GCPs no more than 600 ft apart, 1 checkpoint per 10 acres; roads: max 1,000 ft on alternating sides, checkpoints at each end and every 1/2 mile)
- Wyoming DOT Survey Manual, Section X: Unmanned Aerial Vehicles (4 corner targets, a 5th in the center over 40 acres; corridors no more than 1,320 ft apart; RTK can reduce GCPs but check shots are still required)
- Ferrer-González et al. 2020, Remote Sensing 12(15):2447 (2.1 km road: GCPs alternating sides with a pair at each end did best; 9 to 11 GCPs, or 4.3 to 5.2 per km)
- GeoCue: True View check point recommendations (a point at every corner and one in the middle; on bigger jobs add one wherever 500 m circles around points do not touch)
- Phoenix LiDAR: Ground control best practices (about 10 points for every 250 acres, spread evenly; ASPRS Ed. 2 wants at least 30 for a full test)
- TopoMatters: Real-world testing of DJI P1 and L2 (25-acre test: both sensors under 0.2 ft RMSE with ground control; P1 RTK-only under 0.25 ft)
- ASPRS Positional Accuracy Standards for Digital Geospatial Data, Edition 2 (summary, PE&RS May 2025) (checkpoints must be separate from control; at least 30 for a full accuracy test; fewer allowed on small drone jobs if reported)
- NGS User Guidelines for Single Base Real Time GNSS Positioning v2.1
The 25 ft outside distance is FixFinder's default, not a published number. Change it to suit the site. Check shots stay at least about 25 ft inside your boundary.
These are planning spots, not final spots
We place pins by math, not by looking at the ground. Before the job, open the KMZ in Google Earth or your controller and move any pin that lands on:
- trees, buildings, power lines or anything that blocks the sky or the drone's view,
- water, steep slopes, traffic lanes, or private land you can't get to,
- spots right next to tall objects or sudden drops (ASPRS suggests keeping vertical check points about 10 ft or more from them).
Keep the pattern even when you move them. Measure every GCP and check shot with your rover, and use the measured coordinates, not these.
How splitting works
Pick Yes at step 1 to split. It is the same splitter FixFinder used before, with the same files.
- We find the two ends of the corridor and draw a smooth centerline down the middle.
- Cuts go straight across, at right angles to that centerline, from one edge of the corridor to the other, so cuts never cross.
- We slide each cut until every section has the same area (or the same length along the centerline, if you pick that).
- Neighbors share the exact same cut points, so there are no gaps and no overlaps. We check that the sections add up to the original area.
- GCPs are planned once across the whole boundary, not per section. Each seam gets a pair of GCPs where the cut meets the outer edge, pushed out past the outer boundary only. Nothing is pushed out at the seams inside the job.
- A pin counts for every section within your shared pin distance (100 ft by default, FixFinder's own number). That way, seam pins show up in both flights.
Areas are computed on an equal-area map projection of the WGS 84 globe, then checked with Turf.js geodesic area.
DJI Pilot 2 and FlightHub 2 tips
DJI Pilot 2: copy one section file (KML or KMZ) to the controller's SD card or storage, then go to Flight Route › Import Route (KMZ/KML) and choose Area Route (mapping). Pilot 2 draws the flight lines for you.
DJI FlightHub 2: in a project, open Map Annotations › Import and pick a KML/KMZ. Right-click the area and choose "Convert to mapping area". FlightHub 2's flight route import only takes DJI WPML route files, which these are not.
Each section file holds one Placemark with one Polygon: WGS 84 longitude/latitude, a 0 height on every corner, clamped to the ground, no holes, no extra styling. DJI does not publish a full KML spec for Area Route import, so we use this plain, widely used layout. The pin KMZ files are for Google Earth and your data collector, not for flight routes.
Sources: DJI FlightHub 2 FAQ (imports KML points, lines and areas), DJI FlightHub 2 User Guide v2.4 (Annotation Management: import KML; flight-route KMZ files need wpmz/template.kml and wpmz/waylines.wpml), Propeller: Importing missions with DJI Pilot 2 (Flight Route › Import Route (KMZ/KML)).
What you get
Split (Yes at step 1): one zip with <Project>/KML and <Project>/KMZ (one boundary file per section, <Project>_01, _02…), an optional overview KML, the combined pin files below (each pin says which section or sections it belongs to), and an optional Section pins folder with one pin KMZ per section.
- <Project>.kmz: pins with built-in icons (works offline). Yellow = GCPs (G01, G02…), purple = check shots (CS01, CS02…), green = bases (B01…, only if you picked your own base), plus your area outline.
- <Project>.kml: the same pins. Icons load from Google's standard pushpins.
- <Project>_points.csv: name, type, latitude, longitude (WGS 84 decimal degrees). Most data collectors (Emlid Flow, Trimble Access, Carlson SurvPC) can import a CSV like this for stakeout.
Files are checked against the OGC KML 2.2 schema. Everything is made in your browser. Your file is never uploaded.
Limits
- Corridor mode works best for long strips (roads, pipelines, power lines). Use Area mode for fields and sites.
- Heights are not planned. Put some points on high and low ground yourself (Propeller and DJI both suggest this).
- Holes inside a polygon are ignored.
- Base spots sit on the centerline (corridor) or in the middle of each part of the area. Move them to a safe, open, secure place.
- Splitting works best for long, mostly straight corridors. Wide blobs or Y-shaped corridors with branches won't split well; split branches into separate polygons first. Tight bends can make wedge-shaped sections.
- Boundaries drawn as many separate lines (Trimble Business Center and many CAD exports) are joined when the line ends meet within about 0.03 ft. We close gaps up to 0.5 ft and tell you.
Map, privacy and software
Your KML is read in your browser and never uploaded. The zip is made on your device. The map loads picture tiles from USGS or OpenStreetMap for the spot you are looking at. Those servers see which area you view, but never your file.
The map uses Leaflet (BSD-2). Satellite view: USGS The National Map imagery (USDA NAIP, public domain). Street view: © OpenStreetMap contributors. No map account or key is used.
Hillshade, Contours and 3D are optional and off until you tap them. Hillshade and contour lines come from USGS 3DEP bare-earth elevation (public domain). Detail is up to about 3 ft (1 m) per pixel where USGS has lidar, and about 33 ft (10 m) where it doesn't. When Hillshade is on, the Shade button sets how dark it is (35, 60 or 85%). Contours are drawn in your browser in feet (NAVD 88): every 2 ft when zoomed all the way in, then 5, 10, 20 or 40 ft as you zoom out, with every fifth line bold and labeled. Steep or hilly views may use a wider step so the lines stay readable. The 3D view uses MapLibre GL JS (BSD-3) and the free Terrain Tiles on AWS Open Data (Mapzen; US heights from USGS 3DEP at about 33 ft (10 m) per pixel, 10 ft (3 m) in some areas, so small bumps and ditches won't show). In 3D, the Height button stretches hills 1, 1.5, 2 or 3 times so they are easier to see. You can edit pins in 3D too: tap a pin to select it and drag it, or pick + GCP, + Check shot or + Base and tap the ground. Pins land where you tap on the 3D ground, so they match the 2D map. With a mouse in 3D, drag to turn and tilt the view, and right-drag (or hold Ctrl or Cmd and drag) to move around. On a touch screen, one finger moves the map and two fingers turn and tilt it. Tap 2D map to go back to the flat map. Contours only show in 2D. 3D needs a browser with WebGL. Planning spots and files never depend on these layers.
Zips are made with JSZip (MIT). Files are read with togeojson (BSD-2), and split sections are checked with Turf.js (MIT). They load only when you pick a file. Licenses.
This tool is open for a sponsor, $49/mo. See how