Layers
Upload an orthomosaic to start
the imagery appears here as a tiled layer — then draw the field over it

AGDATASpot Spraying

How this works — read me first
Work top to bottom; each step unlocks the next.
  1. Ortho — upload ONE stitched orthomosaic. It appears on the map so you can see the ground.
  2. Field — draw the boundary over the ortho (or paste WKT/GeoJSON, or reuse a saved one). Detection then runs automatically.
  3. Prescription — density thresholds turn weeds into spray zones.
  4. 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.
  5. 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
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.
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).
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.
Upload an ortho first, then draw the field over it.
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.
Connection…