App 2.39.0, server 2.7.0: Grid with map
A new Overview style: the Grid over the roads round the car from
OpenStreetMap, drawn in the floor's perspective, heading up, the bigger
roads glowing brighter, the car as a chevron.
Server: POST /v1/map/roads {z:14,x,y} fetches a tile's drivable roads
from Overpass (OVERPASS_URL; one request at a time, at least a second
apart), simplifies them to tile-local points in four classes, caches
them for 30 days and never logs the tile.
App: MapRoads keeps the 3x3 tiles round the car from its own cache or
the server; GPS only while the style is shown; bearing from the GPS or
from successive positions. Without GPS, server or roads the plain floor
says why. OSM attribution on screen and in LICENSE.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LhzAVaUyqcw5PkGjz4mWW6
This commit is contained in:
@@ -138,6 +138,30 @@ tyre pressures, GPS (lat, lon, elevation, heading) and the is_* flags. It does *
|
||||
confirmed car facts, app structure, UI conventions, build/test/ship, documents. It replaces
|
||||
upstream's EVABRPUploader text. The test emulator is now in the flake: `nix run .#car-emulator`
|
||||
(Android 9 AOSP at 1920×720, 160 dpi; the car build installs as the system user — checked).
|
||||
- 2026-10-26 — App 2.39.0 and server 2.7.0: **Grid with map**, a new Overview style — the Grid
|
||||
over the roads round the car from OpenStreetMap (owner's choice of design: roads through the
|
||||
car's own server, drawn as the floor). Server: `POST /v1/map/roads` `{z:14, x, y}` (the tile,
|
||||
not the position, and in the body so it stays out of access logs) fetches the tile's drivable
|
||||
roads from Overpass (`OVERPASS_URL`, default the public instance, `off` disables; https only;
|
||||
one request at a time, ≥ 1 s apart, identifying User-Agent), turns them into tile-local points
|
||||
in 4 classes simplified with Douglas–Peucker (~1.5 m), caches them in memory (30 days, 3000
|
||||
tiles; failures not cached), gzips when accepted, answers 503 when Overpass fails and never logs
|
||||
the tile. Tests with a fake Overpass (classes, split at missing points, simplification, cache,
|
||||
gzip, validation, 503 without caching, no tile in the log, config). App: `MapRoads` keeps the
|
||||
3×3 tiles round the car (files/map, 30 days, 400 tiles; one at a time on a background thread;
|
||||
a failed tile waits a minute), `RoadTile` parses them failing closed, `MapGeometry` does the
|
||||
web-mercator arithmetic (both tested). GPS only while that style is shown and the app is in
|
||||
front; the bearing from the GPS, or worked out from positions 8 m apart when it gives none.
|
||||
`GridView` with a map draws the roads in the floor's perspective, heading up, 40 m floor steps,
|
||||
up to 900 m ahead, far roads fainter, the car as a chevron, its position run on with the speed
|
||||
between fixes, 20 fps while moving; the trail gives way to the map; "© OpenStreetMap
|
||||
contributors" shown; otherwise the plain floor saying why (waiting for GPS, set up the server,
|
||||
loading, not available). `OVERPASS_URL` in `k8s/server.yaml`; LICENSE.md notes the ODbL. Tested:
|
||||
server unit tests; one real fetch of 3×3 tiles in central Berlin through the server code
|
||||
(20–30 KB each; Overpass answered 502 a few times and the retry got them); on the emulator those
|
||||
tiles from the app's cache with emulator GPS, north up and turning with a simulated drive, both
|
||||
layouts, no GPS, no server; no crash. Not tried: the app fetching tiles from the deployed
|
||||
server (not deployed yet) and anything on the car.
|
||||
- 2026-10-26 — App 2.38.0 published (`car-2.38.0`) and installed on the car through the in-app
|
||||
updater, from 2.35.3 (so Grid, Time circuits, Quest, Visor and Empire are on the car).
|
||||
- 2026-10-26 — App 2.38.0: Overview styles **Visor** (after Halo's helmet display, `VisorView`)
|
||||
|
||||
Reference in New Issue
Block a user