1a9dfc8f8d
feat(offroute): Phase O3b — trail entry index, Valhalla stitching, /api/offroute endpoint
...
Phase A: Trail Entry Point Index
- Extract highway endpoints from idaho-latest.osm.pbf using osmium + ogr2ogr
- Store 740,430 entry points in /mnt/nav/navi.db (SQLite with spatial index)
- Entry points by class: service (271k), footway (152k), residential (146k),
track (111k), path (26k), unclassified (16k), tertiary (9k), secondary (4k),
primary (4k), bridleway (15)
Phase B: Pathfinder → Valhalla Stitching (router.py)
- OffrouteRouter orchestrates wilderness pathfinding + Valhalla on-network routing
- Queries entry points within 50km (expanding to 100km if needed)
- MCP pathfinder routes to nearest reachable entry point
- Calls Valhalla pedestrian/bicycle/auto costing for on-network segment
- Returns GeoJSON FeatureCollection with wilderness + network + combined segments
Phase C: Flask Endpoint
- POST /api/offroute with start/end coordinates, mode, boundary_mode
- Returns GeoJSON route with per-segment metadata and turn-by-turn maneuvers
Validated: 42.35,-114.30 → Twin Falls downtown
- Wilderness: 0.5km, 9min | Network: 36km, 413min | Total: ~421min
- 21 turn-by-turn instructions, segments connect at entry point
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-08 13:44:34 +00:00
26d4bc7478
feat(offroute): Phase O2b — WorldCover friction integration, lake avoidance validated
...
- New friction.py: reads WorldCover friction VRT, resamples to match
elevation grid, provides point sampling for validation
- Modified cost.py: accepts optional friction array, multiplies Tobler
time cost by friction multiplier, inf for water/nodata (255/0)
- Modified prototype.py: loads friction layer, passes to cost function,
validates path avoids water cells (friction=255)
Validated on Idaho test bbox:
- Path avoids Murtaugh Lake (no water cells on path)
- Friction along path: min=10, max=20, mean=10.2
- Effort increased 3.4% vs Phase O1 due to friction multipliers
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-08 06:33:45 +00:00
f2a0f81580
feat(offroute): Phase O1 foundation — PMTiles decoder, Tobler cost, MCP pathfinder prototype
...
- dem.py: Terrarium-encoded PMTiles tile reader with LRU cache
- Decodes WebP tiles from planet-dem.pmtiles
- Stitches tiles into numpy elevation grids for arbitrary bboxes
- Provides pixel-to-latlon coordinate conversion
- cost.py: Tobler off-path hiking cost function
- speed = 0.6 * 6.0 * exp(-3.5 * |grade + 0.05|) km/h
- Max slope cutoff: 40 degrees → impassable
- Returns time-to-traverse (seconds/cell) as cost metric
- prototype.py: Standalone validation on Idaho test bbox
- 43km × 80km bbox (~17M cells at 14m resolution)
- scikit-image MCP_Geometric Dijkstra pathfinder
- Outputs GeoJSON LineString with path metadata
- Validated: 61.6km path, 21.3 hours effort time
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-07 23:43:56 +00:00