diff --git a/README.md b/README.md index 1ec67b7..ebd7792 100644 --- a/README.md +++ b/README.md @@ -8,17 +8,26 @@ ## Using +For each county, run the four steps in order using the dashboard. Each step must complete before the next: + +1. **Download county data** — fetches the county dataset (or upload a shapefile ZIP for paths) +2. **Download OSM data** — queries Overpass for the relevant features in the county +3. **Convert to GeoJSON** — converts the county data to OSM-tagged GeoJSON +4. **Diff vs OSM** — compares county data against OSM; produces added (green) and removed (red) GeoJSON + +Open the result in the Map Viewer. Green = features in county data missing from OSM (candidates to add). Red = features in OSM not in county data. Hide the OSM (gray) and county (purple) layers to focus on the diff. Click a feature to inspect its properties and accept or exclude it. Open accepted features in JOSM for final review before uploading. + ### Roads +Queries Overpass for all highway types: motorway, trunk, primary, secondary, tertiary, residential, unclassified, and their link variants, plus service and track. + ### Addresses -Run after Roads to reduce validation errors. Easiest to hide existing (gray) and removed (red) and just focus on what new addresses to add. - -Open in JOSM, and download the affected areas from OSM including highways with this Overpass query: +Run roads first — having street geometries in JOSM reduces address validation errors during upload. Queries Overpass for all `addr:*` nodes and ways. Easiest to also hide removed (red) and focus only on added (green) addresses missing from OSM. ### Paths -Only Sumter currently has paths available. +Only Sumter currently has paths available. Queries Overpass for foot, bicycle, and multi-use paths. ## Docker Quick Start @@ -81,22 +90,37 @@ docker push your-registry.example.com/you/osm-import-tools ## Features ### Main Dashboard (/) -- Run data processing scripts for Lake and Sumter counties -- View real-time script output -- Access to: - - Diff Roads - - Diff Addresses - - Diff Multi-Use Paths - - Download OSM Data +- Run data processing scripts per county (Roads, Paths, Addresses) +- View real-time script output with colored status indicators +- Live CPU/memory/disk usage charts during execution +- Cancel running jobs +- Quick-access links to processed GeoJSON files ### Map Viewer (/map) -- Interactive map viewer for GeoJSON files -- Upload and compare OSM, Diff, and County data -- Filter by removed/added features -- Hide highway=service roads -- Drag-and-drop layer reordering -- Click on features to view properties -- Accept/reject diff features +- Interactive Leaflet map for comparing GeoJSON layers +- Layer controls with drag-and-drop reordering +- Filter by added (green) / removed (red) features +- Hide service, track, and unclassified roads +- Click features to inspect properties +- Accept/reject diff features and save results +- Multi-select mode (or Shift+drag) for bulk operations + +### Counties (/counties) +- Define counties with ID, name, state, color, and download URLs +- Download/upload the `counties.yml` config file + +### Street Exceptions (/exceptions) +- Manage street name corrections (e.g. "D Angelo" → "D'Angelo") +- Download/upload the `exceptions.yml` config file + +### Exclusions (/exclusions) +- Define field/value pairs to exclude from diff output +- Exclude button on map popups for quick additions +- Download/upload the `exclusions.yml` config file + +### Authentication +- Login required for all write operations +- Admin user configured via `ADMIN_PASSWORD` environment variable ## Volume Mounts @@ -106,17 +130,39 @@ The Docker container mounts a single data directory: Inside `/data`, the structure is: - `/data/lake/` - Lake County data - `/data/sumter/` - Sumter County data +- `/data/counties.yml` - County definitions +- `/data/exceptions.yml` - Street name corrections +- `/data/exclusions.yml` - Exclusion rules +- `/data/users.yml` - User credentials All changes are persisted on the host in the local `./data` folder. ## API Endpoints -- `GET /` - Main dashboard -- `GET /map` - Map viewer +### Auth +- `GET /api/auth-status` - Check authentication status + +### Script Execution - `POST /api/run-script` - Execute a processing script -- `GET /api/job-status/` - Get script status and logs +- `GET /api/job-status/` - Get job status and logs +- `POST /api/cancel-job` - Cancel a running job + +### File Operations - `GET /api/list-files` - List available GeoJSON files -- `GET /data/` - Serve GeoJSON files +- `POST /api/upload-file` - Upload shapefile ZIP +- `POST /api/clear-data` - Delete all county data files +- `GET /data/` - Serve data files + +### Configuration +- `GET /api/config/` - Download a YAML config file +- `POST /api/config/` - Upload a YAML config file +- `GET/POST /api/counties` - Get or save county configuration +- `GET/POST /api/exceptions` - Get or save street exceptions +- `GET/POST /api/exclusions` - Get or save exclusions +- `POST /api/exclusions/add` - Append new exclusions (skips duplicates) + +### System +- `GET /api/system-stats` - CPU, memory, and disk usage ## Troubleshooting @@ -166,56 +212,3 @@ addr:postcode=33513 addr:state=FL addr:street=Hideaway Circle - Sr is SR (State Route) - - - -### Corrections - -{ - "corrections": [ - { - "from": "D Angelo Lane", - "to": "D'Angelo Lane" - }, - { - "from": "Lajolla Circle", - "to": "La Jolla Circle" - }, - { - "from": "Gardena Court", - "to": "Gardenia Court" - }, - { - "from": "Glenmont Court", - "to": "Glenmount Court" - }, - { - "from": "Pawleys Island Path", - "to": "Pawley's Island Path" - }, - { - "from": "Oday Street", - "to": "O'Day Street" - }, - { - "from": "Obrien Place", - "to": "O'Brien Place" - }, - { - "from": "Ohara Court", - "to": "O'Hara Court" - }, - { - "from": "Drive Randy Mcdaniel Way", - "to": "Doctor Randy McDaniel Way" - }, - { - "from": "Mcneillrescue Lane", - "to": "Rescue Lane" - }, - { - "from": "Longleaf Lane", - "to": "Long Leaf Lane" - } - ] -}