A lightweight desktop-style web app for generating realistic GPS / NMEA paths from field boundaries. Designed for agriculture, simulation, testing, and replay workflows.
The application runs a local Flask server, opens automatically in your browser, and can be packaged as a single Windows EXE with no console window.
- Draw field boundaries directly on a map
- Optional exclusion zones (sloughs, trees, obstacles)
- Automatic headlands + interior passes
- Constant or randomized speed profiles
- Adjustable sampling rate (Hz)
- Generates valid NMEA GPRMC + GPGGA messages
- Outputs files with a
.gpsextension - Saves exports to a predictable local folder
- Preview path before generation
- Single‑instance protection (no double servers)
- Clean quit / shutdown support
- Files are always saved with a
.gpsextension - MIME type is set to
application/octet-streamto avoid browser issues
C:\Users\<you>\Documents\FieldNMEA\Exports
The generated file is also downloaded automatically by the browser.
- Flask runs locally on
http://127.0.0.1:5000 - UI is served from
templates/index.html - Geometry is handled with Shapely
- Coordinate transforms via pyproj
- NMEA generation is fully deterministic and reproducible
When packaged as an EXE:
- Flask runs in the background
- Browser is opened automatically
- No console window is shown
python -m venv .venv
.\.venv\Scripts\Activate.ps1pip install -r requirements.txtpython app.pyYour browser will open automatically.
If you double‑click the EXE while it’s already running:
- The existing instance is reused
- No second Flask server starts
- A new browser tab is opened instead
This is implemented using:
/healthendpoint- Local TCP lock port
The UI includes a Quit App button.
When clicked:
- The browser tab closes
- A
/shutdownrequest is sent - The Flask process terminates cleanly
No orphan background processes remain.
pip install pyinstallerpyinstaller --onefile --noconsole --name FieldGPSMapGenerator --add-data "templates;templates" app.pydist\FieldGPSMapGenerator.exe
Double‑click to run.
MapMaker-Release/
│
├── app.py
├── requirements.txt
├── README.md
├── templates/
│ └── index.html
└── dist/
└── FieldGPSMapGenerator.exe
-
Intended for local use only (not a hosted server)
-
Geometry may fail if:
- Field is too small
- Implement width is too large
- Excessive exclusions collapse the polygon
Error messages will guide parameter adjustments.
The app exposes:
GET /health
Returns:
{ "status": "ok" }Used for single‑instance detection.
- ISOXML export
- Multiple vehicle tracks
- Curved guidance lines
- Speed ramps by headland / interior
- CAN / J1939 replay hooks
- Realistic headlands and AB lines