Upload an orthomosaic to start the imagery appears here as a tiled layer — then draw the field over it
Spot Spraying
How this works — read me first
Work top to bottom; each step unlocks the next.
Ortho — upload ONE stitched orthomosaic. It appears on the map so you can see the ground.
Field — draw the boundary over the ortho (or paste WKT/GeoJSON, or reuse a saved one). Detection then runs automatically.
Prescription — density thresholds turn weeds into spray zones.
No drone data yet? Give a field in step 2 (draw, paste, load, or “Use sample field”) and use Sample map in step 3 — random spray areas, every export, nothing else needed.
Review — approve before delivery.
Your ortho must be a single stitched GeoTIFF (not raw drone
photos), RGB (≥3 bands), in a projected metre CRS — a UTM zone or a
supported national grid (Stereo70, S-JTSK, RD, Lambert-93, …). Only geographic lat-lon
(EPSG:4326) needs reprojecting first:
gdalwarp -t_srs EPSG:32635 in.tif ortho_utm.tif
No drone data? Make a matching test ortho, upload it, then click
“Use sample field” in step 2:
npx tsx scripts/make-sample-ortho.ts
1 Ortho
Reopens a flight by id — picks up a stitch still running, or jumps straight to step 2 when its ortho is ready. The last flight is remembered in this browser and restored automatically.
Upload orthophoto
Stitch raw frames
Picking a file previews its footprint + thumbnail locally — no upload. Uploading runs the CRS/band QA and the full ortho appears on the map as a tiled layer; then you draw the field over it.
Select every frame from the flight. They're stitched into one georeferenced orthophoto on the server (a few minutes), then you draw the field over it — same as an uploaded ortho.
2 Field
GeoJSON (.geojson/.json) or a zipped shapefile (.zip with .shp + .dbf + .prj), in WGS84.
Draw: click points on the map; click the first point, “Finish”, or Enter to close; Esc to cancel.
Keep the field inside the ortho's footprint (needs ≥90% coverage).
Picks the plant model for the crop detector and for “Propose with model” in step 5. Saved with the flight straight away.
Lower threshold = more sensitive. If you see weeds the detector missed (green under red cells), set e.g. 0.03 and ‘Set field’ again — re-detection reuses the uploaded ortho.
Lower = more sensitive: more plants found, more false hits. Blank = the model's own threshold. ‘Set field’ again to re-detect — it reuses the uploaded ortho.
Upload an ortho first, then draw the field over it.
Detector missed a patch, or flagged clean crop? Toggle cells, save, and the prescription + machine export follow your call. Every correction is stored to train the model.
+ Add weed
- Erase
Click or drag on the map to paint. Only inside the field.
3 Prescription
Spray where density ≥ threshold. Doses = rate per zone (first = clean / no-spray). Buffer grows spray zones outward for boom lag + GPS jitter.
Picks what goes into the one-zip application map. The separate downloads (field SHP / ISOXML, zones SHP, spots SHP) are always all there.
Terminal task data (ISOXML customer / farm / product)
Written into the TASKDATA (CTR / FRM / PDT / CTP) so the terminal lists the task under the right customer and farm. Topcon needs a product to assign the map to a tank.
Driving direction & section alignment
Line up the spray cells with how you drive the field, so the boom's sections switch on/off cleanly along each pass — instead of a north-aligned grid. Optional.
No driving line — cells stay north-aligned.
Each spray decision covers one boom section. Section width is how wide it is across the pass — perpendicular to your driving line; section length is how far it holds along the pass. (Your whole boom is many sections wide.) A driving line needs a section width.
Sample map — no drone data needed
Lays a few random spray areas inside the field (as if weeds were found there) and runs the same prescription and every export. For terminal tests. Needs only a field from step 2.
Runs after a flight is ready.
4 Review
Approval is the delivery gate — download the SHP/GeoTIFF above for the sprayer. (Map-drawn corrections + label capture land in a later phase.)
5 Annotation
Needs an orthophoto (step 1). Labels individual weed plants for training a detector — separate from the prescription.
▢ New area
⬚ Box
• Point
↖ Select
Looks for plants like the ones already confirmed in this flight (selected class; until 3 are confirmed, the strongest proposals stand in). Tells bare soil from a crop stand by itself. Best in a stand, where the colour-based Propose misses rosettes. Replaces its own earlier unreviewed suggestions in the area. Takes a few seconds.
An area is done when every plant in it is labelled — its empty space then counts as “no weed”. Proposals (dashed; the plant model's dotted) must be accepted or deleted first. With ↖ Select, drag a selected label to move it or drag its corner to resize it (an adjusted proposal counts as accepted). Keys: 1–9 class · A area · B box · P point · S select · Del delete · Enter accept · D done · N next open area · M propose with model · Esc stop.