From d652a4e012d80a1998500e673536ba3fc92bc58d Mon Sep 17 00:00:00 2001 From: Jean-Pierre Martineau Date: Tue, 7 Jul 2026 17:38:39 -0400 Subject: [PATCH] Add an interactive braille OpenStreetMap map of mesh nodes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New `map` tool (menu + `meshtools map` CLI) that plots the mesh's location-sharing nodes over a real OSM street basemap rendered as Unicode braille — streets, rivers, water, and place names — the mapscii idea, but able to plot our own nodes and live inside the TUI. - core/mvt.py: dependency-free MVT/protobuf vector-tile decoder. - core/geo.py: Web Mercator + a pannable/zoomable Viewport and tile math. - services/basemap.py: OpenFreeMap vector tiles (free, no API key), resolved from the versioned TileJSON, disk-cached, offline-safe (stdlib urllib only). - ui/mapcanvas.py: colored braille canvas (per-cell priority, line raster, polygon fill, collision-avoided labels), emits truecolor ANSI. - ui/map_render.py: compositor — basemap styling + node markers with names. - ui/map_screen.py: full-screen screen; wasd/arrows pan, =/- zoom, r reset, Esc/q exit; background tile loading. Offline falls back to nodes on a grid. - tools/map.py: interactive in the menu, one-shot static render on the CLI. Repeaters are prioritised over leaf nodes via advert type: threaded `node_type` through Observation/HeardNode and the persistence layer (schema v4->v5, with an idempotent migration adding observations.node_type). Added TuiSession.base_body_size() so a full-screen screen can size itself to the frame. Tests: tests/test_map.py (24) cover MVT decode against a real cached tile fixture, projection, the canvas, the compositor, offline behavior, and the interactive pan/zoom/reset logic. Full suite: 261 passing. Co-Authored-By: Claude Opus 4.8 --- meshtools/core/connection.py | 26 +- meshtools/core/geo.py | 281 +++++++++++++++++++ meshtools/core/models.py | 29 ++ meshtools/core/mvt.py | 278 +++++++++++++++++++ meshtools/persistence/db.py | 13 +- meshtools/persistence/repository.py | 8 +- meshtools/services/basemap.py | 182 ++++++++++++ meshtools/tools/map.py | 227 +++++++++++++++ meshtools/ui/map_render.py | 313 +++++++++++++++++++++ meshtools/ui/map_screen.py | 217 +++++++++++++++ meshtools/ui/mapcanvas.py | 252 +++++++++++++++++ meshtools/ui/tui/session.py | 17 ++ tests/fixtures/tile_14_4843_5861.mvt | Bin 0 -> 475450 bytes tests/test_map.py | 397 +++++++++++++++++++++++++++ 14 files changed, 2233 insertions(+), 7 deletions(-) create mode 100644 meshtools/core/geo.py create mode 100644 meshtools/core/mvt.py create mode 100644 meshtools/services/basemap.py create mode 100644 meshtools/tools/map.py create mode 100644 meshtools/ui/map_render.py create mode 100644 meshtools/ui/map_screen.py create mode 100644 meshtools/ui/mapcanvas.py create mode 100644 tests/fixtures/tile_14_4843_5861.mvt create mode 100644 tests/test_map.py diff --git a/meshtools/core/connection.py b/meshtools/core/connection.py index ced8a66..c41f919 100644 --- a/meshtools/core/connection.py +++ b/meshtools/core/connection.py @@ -22,7 +22,16 @@ from typing import Callable, Optional from .channels import CHANNEL_SLOT_PROBE_CAP from .events import MeshEvent -from .models import Ack, Contact, Hop, Message, Observation, TraceResult +from .models import ( + NODE_TYPE_CHAT, + NODE_TYPE_REPEATER, + Ack, + Contact, + Hop, + Message, + Observation, + TraceResult, +) #: Module logger; enable DEBUG on ``meshtools.core.connection`` to trace the message pump. _log = logging.getLogger(__name__) @@ -1265,10 +1274,14 @@ class MockDevice(Device): ``advert`` otherwise, carrying a location for the simulated repeaters. """ lat_lon = self._MOCK_LOCATIONS.get(contact.name) + # The two located nodes are the simulated repeaters (fixed infrastructure); the rest + # advertise as ordinary chat nodes, so the map has both classes to prioritise. + node_type = NODE_TYPE_REPEATER if contact.name in self._MOCK_LOCATIONS else NODE_TYPE_CHAT return Observation( node=contact.key_prefix or contact.public_key[:12], name=contact.name, kind="telemetry" if seq % 4 == 3 else "advert", + node_type=node_type, snr=round(self._rng.gauss(6.0, 3.0), 1), rssi=round(self._rng.gauss(-95.0, 8.0), 1), lat=lat_lon[0] if lat_lon else None, @@ -1428,6 +1441,7 @@ def observation_from_event(event, kind: str) -> Optional[Observation]: # noqa: node=node, name=payload.get("adv_name") or payload.get("name"), kind=kind, + node_type=_as_int(payload.get("adv_type", payload.get("type"))), snr=_as_float(payload.get("snr")), rssi=_as_float(payload.get("rssi")), lat=_as_float(lat) if lat else None, @@ -1487,6 +1501,16 @@ def _as_float(value: object) -> Optional[float]: return None +def _as_int(value: object) -> Optional[int]: + """Best-effort int conversion, returning ``None`` on missing/garbage values.""" + if value is None: + return None + try: + return int(value) # type: ignore[arg-type] + except (TypeError, ValueError): + return None + + def _advert_time(last_advert: object) -> Optional[datetime]: """Convert a contact's ``last_advert`` Unix timestamp to a UTC datetime. diff --git a/meshtools/core/geo.py b/meshtools/core/geo.py new file mode 100644 index 0000000..5fd3e07 --- /dev/null +++ b/meshtools/core/geo.py @@ -0,0 +1,281 @@ +"""Pure geographic helpers for the terminal map: Web Mercator, tiles, and viewports. + +This module is deliberately I/O-free and rendering-free so it can be unit-tested without a +radio, a terminal, or the network. It turns latitude/longitude into the Web Mercator "world +pixel" space that slippy-map vector tiles live in, models the on-screen :class:`Viewport` +(which braille dot maps to which coordinate), and measures great-circle distances. + +The map renders one braille **dot** per Web Mercator pixel at the viewport's zoom, so a +viewport of ``dot_w`` × ``dot_h`` dots shows exactly that many mercator pixels — panning and +zooming are then just moving and scaling this window over the world. Braille sub-cells are +about square in a monospace font (2 dots wide, 4 tall, in a cell roughly twice as tall as +wide), so mercator pixels land on screen without obvious distortion. +""" + +from __future__ import annotations + +import math +from dataclasses import dataclass + +#: Mean radius of the Earth in kilometres, used for haversine distances. +EARTH_RADIUS_KM = 6371.0088 + +#: Web Mercator tile edge in pixels at its own zoom — the slippy-map convention. The world +#: is ``TILE_PX * 2**zoom`` pixels square at a given zoom. +TILE_PX = 256 + + +@dataclass(frozen=True, slots=True) +class BBox: + """An axis-aligned latitude/longitude bounding box (decimal degrees).""" + + min_lat: float + min_lon: float + max_lat: float + max_lon: float + + @classmethod + def around(cls, points: list[tuple[float, float]]) -> "BBox": + """Return the tightest box containing every ``(lat, lon)`` point. + + Args: + points: One or more latitude/longitude pairs (must be non-empty). + + Returns: + The enclosing bounding box. + + Raises: + ValueError: If ``points`` is empty. + """ + if not points: + raise ValueError("cannot build a bounding box from no points") + lats = [lat for lat, _ in points] + lons = [lon for _, lon in points] + return cls(min(lats), min(lons), max(lats), max(lons)) + + @property + def center(self) -> tuple[float, float]: + """The box's centre as a ``(lat, lon)`` pair.""" + return ((self.min_lat + self.max_lat) / 2, (self.min_lon + self.max_lon) / 2) + + +def haversine_km(lat1: float, lon1: float, lat2: float, lon2: float) -> float: + """Return the great-circle distance between two points in kilometres. + + Args: + lat1: First point's latitude (degrees). + lon1: First point's longitude (degrees). + lat2: Second point's latitude (degrees). + lon2: Second point's longitude (degrees). + + Returns: + The distance along the Earth's surface in kilometres. + """ + p1, p2 = math.radians(lat1), math.radians(lat2) + dphi = math.radians(lat2 - lat1) + dlambda = math.radians(lon2 - lon1) + a = math.sin(dphi / 2) ** 2 + math.cos(p1) * math.cos(p2) * math.sin(dlambda / 2) ** 2 + return 2 * EARTH_RADIUS_KM * math.asin(math.sqrt(a)) + + +def clamp_lat(lat: float) -> float: + """Clamp latitude to the Web Mercator limit (~±85.051°) where the projection is finite.""" + return max(-85.05112878, min(85.05112878, lat)) + + +def lonlat_to_world(lat: float, lon: float, zoom: float) -> tuple[float, float]: + """Project ``(lat, lon)`` to Web Mercator world pixels at ``zoom``. + + Args: + lat: Latitude in degrees (clamped to the mercator limit). + lon: Longitude in degrees. + zoom: Zoom level (may be fractional). + + Returns: + ``(x, y)`` in world pixels, where the world spans ``TILE_PX * 2**zoom`` on each axis + and ``y`` grows southward (north is up / smaller ``y``). + """ + scale = TILE_PX * (2.0**zoom) + x = (lon + 180.0) / 360.0 * scale + s = math.sin(math.radians(clamp_lat(lat))) + y = (0.5 - math.log((1 + s) / (1 - s)) / (4 * math.pi)) * scale + return x, y + + +def world_to_lonlat(x: float, y: float, zoom: float) -> tuple[float, float]: + """Invert :func:`lonlat_to_world`: world pixels at ``zoom`` back to ``(lat, lon)``. + + Args: + x: World-pixel x. + y: World-pixel y. + zoom: The zoom the pixels were computed at. + + Returns: + The ``(lat, lon)`` in degrees. + """ + scale = TILE_PX * (2.0**zoom) + lon = x / scale * 360.0 - 180.0 + n = math.pi - 2 * math.pi * y / scale + lat = math.degrees(math.atan(math.sinh(n))) + return lat, lon + + +@dataclass(frozen=True, slots=True) +class Viewport: + """The on-screen window over the world: what each braille dot maps to. + + One dot equals one Web Mercator pixel at :attr:`zoom`, so the visible area is exactly + ``dot_w`` × ``dot_h`` mercator pixels centred on ``(center_lat, center_lon)``. Panning and + zooming return new viewports; nothing here mutates. + + Attributes: + center_lat: Latitude at the centre of the view. + center_lon: Longitude at the centre of the view. + zoom: Display zoom (integer here; may exceed the tile source's max, in which case + lower-zoom tiles are magnified — see :meth:`tiles` / :meth:`feature_to_dot`). + dot_w: Viewport width in braille dots. + dot_h: Viewport height in braille dots. + """ + + center_lat: float + center_lon: float + zoom: int + dot_w: int + dot_h: int + + @property + def origin_world(self) -> tuple[float, float]: + """Top-left corner of the view in world pixels at :attr:`zoom`.""" + cx, cy = lonlat_to_world(self.center_lat, self.center_lon, self.zoom) + return cx - self.dot_w / 2, cy - self.dot_h / 2 + + def lonlat_to_dot(self, lat: float, lon: float) -> tuple[float, float]: + """Project a coordinate to a (possibly off-screen) dot position in the view.""" + ox, oy = self.origin_world + wx, wy = lonlat_to_world(lat, lon, self.zoom) + return wx - ox, wy - oy + + def tile_zoom(self, max_tile_zoom: int) -> int: + """The tile zoom to fetch: the display zoom, capped at the source's max.""" + return max(0, min(self.zoom, max_tile_zoom)) + + def tiles(self, max_tile_zoom: int) -> list[tuple[int, int, int]]: + """Return the ``(z, x, y)`` tiles covering the view at the fetchable tile zoom. + + When the display zoom exceeds ``max_tile_zoom`` the lower-zoom tiles that cover the + same ground are returned (the renderer magnifies them), so zooming in past the + source's limit still works. + + Args: + max_tile_zoom: The highest zoom the tile source actually serves. + + Returns: + Tile coordinates, clamped to the valid range, de-duplicated in row-major order. + """ + tz = self.tile_zoom(max_tile_zoom) + scale = 2.0 ** (self.zoom - tz) # display px per tile-zoom px + ox, oy = self.origin_world + n = 2**tz + # Visible rect in tile-zoom world pixels, then in tile indices. + tx0 = int((ox / scale) // TILE_PX) + tx1 = int(((ox + self.dot_w) / scale) // TILE_PX) + ty0 = int((oy / scale) // TILE_PX) + ty1 = int(((oy + self.dot_h) / scale) // TILE_PX) + out: list[tuple[int, int, int]] = [] + for ty in range(ty0, ty1 + 1): + if not 0 <= ty < n: + continue + for tx in range(tx0, tx1 + 1): + out.append((tz, tx % n, ty)) # wrap x around the antimeridian + return out + + def feature_to_dot( + self, tile_x: int, tile_y: int, tile_zoom: int, extent: int, lx: float, ly: float + ) -> tuple[float, float]: + """Project a tile-local point to a dot position in this viewport. + + Args: + tile_x: The tile's x index at ``tile_zoom``. + tile_y: The tile's y index at ``tile_zoom``. + tile_zoom: The zoom the tile was fetched at. + extent: The tile's internal coordinate extent (e.g. 4096). + lx: Local x within the tile, ``0..extent``. + ly: Local y within the tile, ``0..extent``. + + Returns: + The ``(x, y)`` dot position (may be outside the canvas; the caller clips). + """ + scale = 2.0 ** (self.zoom - tile_zoom) + wx = (tile_x + lx / extent) * TILE_PX * scale + wy = (tile_y + ly / extent) * TILE_PX * scale + ox, oy = self.origin_world + return wx - ox, wy - oy + + def panned(self, frac_x: float, frac_y: float) -> "Viewport": + """Return a viewport shifted by a fraction of its own width/height. + + Args: + frac_x: Eastward shift as a fraction of the view width (negative = west). + frac_y: Southward shift as a fraction of the view height (negative = north). + + Returns: + A new :class:`Viewport` at the shifted centre, same zoom and size. + """ + cx, cy = lonlat_to_world(self.center_lat, self.center_lon, self.zoom) + cx += frac_x * self.dot_w + cy += frac_y * self.dot_h + lat, lon = world_to_lonlat(cx, cy, self.zoom) + return Viewport(clamp_lat(lat), lon, self.zoom, self.dot_w, self.dot_h) + + def zoomed(self, delta: int, *, min_zoom: int = 2, max_zoom: int = 19) -> "Viewport": + """Return a viewport zoomed by ``delta`` levels about the same centre (clamped).""" + z = max(min_zoom, min(max_zoom, self.zoom + delta)) + return Viewport(self.center_lat, self.center_lon, z, self.dot_w, self.dot_h) + + def resized(self, dot_w: int, dot_h: int) -> "Viewport": + """Return the same view centred as before but at a new canvas size.""" + return Viewport(self.center_lat, self.center_lon, self.zoom, dot_w, dot_h) + + @classmethod + def fit( + cls, + points: list[tuple[float, float]], + dot_w: int, + dot_h: int, + *, + pad: float = 0.18, + min_zoom: int = 2, + max_zoom: int = 16, + default_zoom: int = 14, + ) -> "Viewport": + """Build a viewport framing ``points`` — centred on them at the tightest fitting zoom. + + Args: + points: Latitude/longitude pairs to frame (may be empty). + dot_w: Canvas width in dots. + dot_h: Canvas height in dots. + pad: Fraction of the canvas kept as margin around the points. + min_zoom: Lowest zoom to consider. + max_zoom: Highest zoom to consider. + default_zoom: Zoom used when the points don't constrain it (0 or 1 point). + + Returns: + A :class:`Viewport` centred on the points at a zoom where they fit with margin. + Empty input centres on the world at ``min_zoom``. + """ + if not points: + return cls(0.0, 0.0, min_zoom, dot_w, dot_h) + box = BBox.around(points) + center_lat, center_lon = box.center + if len(points) == 1 or (box.min_lat == box.max_lat and box.min_lon == box.max_lon): + return cls(center_lat, center_lon, default_zoom, dot_w, dot_h) + avail_w = dot_w * (1 - pad) + avail_h = dot_h * (1 - pad) + chosen = min_zoom + for z in range(max_zoom, min_zoom - 1, -1): + x0, y0 = lonlat_to_world(box.max_lat, box.min_lon, z) # NW corner + x1, y1 = lonlat_to_world(box.min_lat, box.max_lon, z) # SE corner + if abs(x1 - x0) <= avail_w and abs(y1 - y0) <= avail_h: + chosen = z + break + return cls(center_lat, center_lon, chosen, dot_w, dot_h) diff --git a/meshtools/core/models.py b/meshtools/core/models.py index d4bac1d..b4a5919 100644 --- a/meshtools/core/models.py +++ b/meshtools/core/models.py @@ -15,6 +15,22 @@ from typing import Optional #: Label used for our own (local) device when framing a trace path's endpoints. LOCAL_DEVICE_LABEL = "us" +# MeshCore advert types — the low nibble of an advert's flag byte — classify the kind of +# node an advert announces. Repeaters are fixed infrastructure and carry the mesh, so +# location-aware features (e.g. the map) prioritise them over ordinary leaf nodes. +NODE_TYPE_CHAT = 1 +NODE_TYPE_REPEATER = 2 +NODE_TYPE_ROOM = 3 +NODE_TYPE_SENSOR = 4 + +#: Human-readable label for each advert type, for legends and summaries. +NODE_TYPE_LABELS = { + NODE_TYPE_CHAT: "node", + NODE_TYPE_REPEATER: "repeater", + NODE_TYPE_ROOM: "room", + NODE_TYPE_SENSOR: "sensor", +} + def utcnow() -> datetime: """Return a timezone-aware UTC timestamp. @@ -54,6 +70,8 @@ class Observation: node: Key prefix / hash identifying the transmitting node, if known. name: Friendly name advertised by the node, if carried. kind: Packet class, e.g. ``advert`` or ``telemetry``. + node_type: Advert type of the transmitting node (see the ``NODE_TYPE_*`` constants), + e.g. :data:`NODE_TYPE_REPEATER`; ``None`` when the packet did not carry it. snr: Signal-to-noise ratio (dB) the companion measured, if reported. rssi: Received signal strength (dBm), if reported. lat: Advertised latitude (decimal degrees), when the node shares location. @@ -65,6 +83,7 @@ class Observation: node: Optional[str] name: Optional[str] = None kind: str = "advert" + node_type: Optional[int] = None snr: Optional[float] = None rssi: Optional[float] = None lat: Optional[float] = None @@ -277,6 +296,8 @@ class HeardNode: last_seen: Timestamp of the most recent observation. lat: Most recent advertised latitude, if the node shared one. lon: Most recent advertised longitude, if the node shared one. + node_type: Most recent advert type seen for the node (see the ``NODE_TYPE_*`` + constants), if any observation carried it. """ node: Optional[str] @@ -288,12 +309,18 @@ class HeardNode: last_seen: datetime lat: Optional[float] = None lon: Optional[float] = None + node_type: Optional[int] = None @property def has_location(self) -> bool: """Whether this node reported a usable latitude/longitude.""" return self.lat is not None and self.lon is not None + @property + def is_repeater(self) -> bool: + """Whether this node advertised itself as a repeater.""" + return self.node_type == NODE_TYPE_REPEATER + @classmethod def from_observations( cls, node: Optional[str], observations: list["Observation"] @@ -315,6 +342,7 @@ class HeardNode: (o for o in reversed(ordered) if o.lat is not None and o.lon is not None), None ) name = next((o.name for o in reversed(ordered) if o.name), None) + node_type = next((o.node_type for o in reversed(ordered) if o.node_type is not None), None) return cls( node=node, name=name, @@ -325,6 +353,7 @@ class HeardNode: last_seen=latest.observed_at, lat=located.lat if located else None, lon=located.lon if located else None, + node_type=node_type, ) diff --git a/meshtools/core/mvt.py b/meshtools/core/mvt.py new file mode 100644 index 0000000..f481f05 --- /dev/null +++ b/meshtools/core/mvt.py @@ -0,0 +1,278 @@ +"""A tiny, dependency-free Mapbox Vector Tile (MVT) decoder. + +Vector tiles are Protocol-Buffer messages (spec: github.com/mapbox/vector-tile-spec). Rather +than pull in a protobuf runtime and a geometry library, this decodes the small subset the map +needs by hand: the protobuf wire format (varints, length-delimited fields) and the MVT +geometry command encoding (MoveTo/LineTo/ClosePath with zig-zag deltas). It is pure and +offline — the network fetch lives in :mod:`meshtools.services.basemap`. + +The result is a list of :class:`Layer`, each with decoded :class:`Feature` geometry in +*tile-local* integer coordinates (``0..extent``) and a resolved ``tags`` dict, ready to be +projected to the screen by :class:`meshtools.core.geo.Viewport`. +""" + +from __future__ import annotations + +import gzip +from dataclasses import dataclass, field +from typing import Any, Optional + +# MVT geometry types (Feature.type). +GEOM_POINT = 1 +GEOM_LINE = 2 +GEOM_POLYGON = 3 + +# Geometry command ids (low 3 bits of a command integer). +_CMD_MOVE_TO = 1 +_CMD_LINE_TO = 2 +_CMD_CLOSE = 7 + + +class _Reader: + """A minimal protobuf wire-format reader over a byte buffer.""" + + __slots__ = ("b", "i") + + def __init__(self, b: bytes) -> None: + self.b = b + self.i = 0 + + def eof(self) -> bool: + return self.i >= len(self.b) + + def varint(self) -> int: + """Read a base-128 varint.""" + result = shift = 0 + while True: + byte = self.b[self.i] + self.i += 1 + result |= (byte & 0x7F) << shift + if not byte & 0x80: + return result + shift += 7 + + def tag(self) -> tuple[int, int]: + """Read a field tag, returning ``(field_number, wire_type)``.""" + key = self.varint() + return key >> 3, key & 0x7 + + def blob(self) -> bytes: + """Read a length-delimited byte string.""" + n = self.varint() + v = self.b[self.i : self.i + n] + self.i += n + return v + + def skip(self, wire_type: int) -> None: + """Skip a field of the given wire type.""" + if wire_type == 0: + self.varint() + elif wire_type == 2: + self.blob() + elif wire_type == 5: + self.i += 4 + elif wire_type == 1: + self.i += 8 + else: # pragma: no cover - groups are obsolete and never appear in MVT + raise ValueError(f"unsupported wire type {wire_type}") + + +def _zigzag(n: int) -> int: + """Decode a protobuf zig-zag encoded signed integer.""" + return (n >> 1) ^ -(n & 1) + + +@dataclass(slots=True) +class Feature: + """One decoded vector-tile feature. + + Attributes: + geom_type: :data:`GEOM_POINT`, :data:`GEOM_LINE`, or :data:`GEOM_POLYGON`. + rings: The geometry as a list of parts, each a list of ``(x, y)`` integer points in + tile-local coordinates (``0..extent``). Points have one part holding every point; + lines/polygons have one part per line-string / ring. + tags: Resolved attribute dict (e.g. ``{"class": "primary", "name": "Rue X"}``). + """ + + geom_type: int + rings: list[list[tuple[int, int]]] + tags: dict[str, Any] + + def get(self, key: str, default: Any = None) -> Any: + """Return a tag value, or ``default`` if absent.""" + return self.tags.get(key, default) + + @property + def name(self) -> Optional[str]: + """The feature's display name, preferring the local ``name`` then latin fallbacks.""" + for key in ("name", "name:latin", "name:en", "name_en", "name_int"): + val = self.tags.get(key) + if val: + return str(val) + return None + + +@dataclass(slots=True) +class Layer: + """A named vector-tile layer and its decoded features. + + Attributes: + name: Layer id (e.g. ``transportation``, ``water``, ``place``). + extent: The tile's internal coordinate extent (typically 4096). + features: The decoded features. + """ + + name: str + extent: int + features: list[Feature] = field(default_factory=list) + + +def _decode_geometry(cmds: list[int]) -> list[list[tuple[int, int]]]: + """Decode an MVT geometry command stream into a list of point rings.""" + rings: list[list[tuple[int, int]]] = [] + current: list[tuple[int, int]] = [] + x = y = 0 + i = 0 + n = len(cmds) + while i < n: + command = cmds[i] + i += 1 + cmd_id = command & 0x7 + count = command >> 3 + if cmd_id == _CMD_MOVE_TO: + for _ in range(count): + x += _zigzag(cmds[i]) + y += _zigzag(cmds[i + 1]) + i += 2 + # Each MoveTo starts a new part (multipoint keeps them in one part below). + if current: + rings.append(current) + current = [(x, y)] + elif cmd_id == _CMD_LINE_TO: + for _ in range(count): + x += _zigzag(cmds[i]) + y += _zigzag(cmds[i + 1]) + i += 2 + current.append((x, y)) + elif cmd_id == _CMD_CLOSE: + if current: + current.append(current[0]) # close the ring back to its start + if current: + rings.append(current) + return rings + + +def _decode_value(buf: bytes) -> Any: + """Decode an MVT attribute Value message into a Python scalar.""" + r = _Reader(buf) + while not r.eof(): + field_no, wire = r.tag() + if field_no == 1 and wire == 2: + return r.blob().decode("utf-8", "ignore") # string_value + if field_no == 2 and wire == 5: # float_value + import struct + + v = struct.unpack(" list[int]: + """Decode a packed repeated uint32 field into a list of ints.""" + r = _Reader(buf) + out: list[int] = [] + while not r.eof(): + out.append(r.varint()) + return out + + +def _decode_feature(buf: bytes, keys: list[str], values: list[Any]) -> Optional[Feature]: + """Decode a single Feature message, resolving its tags against the layer's key/value pools.""" + r = _Reader(buf) + geom_type = 0 + tag_ints: list[int] = [] + geom_ints: list[int] = [] + while not r.eof(): + field_no, wire = r.tag() + if field_no == 2 and wire == 2: + tag_ints = _packed_uints(r.blob()) + elif field_no == 3 and wire == 0: + geom_type = r.varint() + elif field_no == 4 and wire == 2: + geom_ints = _packed_uints(r.blob()) + else: + r.skip(wire) + if not geom_ints: + return None + tags: dict[str, Any] = {} + for k, v in zip(tag_ints[0::2], tag_ints[1::2]): + if 0 <= k < len(keys) and 0 <= v < len(values): + tags[keys[k]] = values[v] + return Feature(geom_type=geom_type, rings=_decode_geometry(geom_ints), tags=tags) + + +def _decode_layer(buf: bytes) -> Layer: + """Decode a single Layer message and all of its features.""" + r = _Reader(buf) + name = "" + extent = 4096 + keys: list[str] = [] + values: list[Any] = [] + feature_blobs: list[bytes] = [] + while not r.eof(): + field_no, wire = r.tag() + if field_no == 1 and wire == 2: + name = r.blob().decode("utf-8", "ignore") + elif field_no == 2 and wire == 2: + feature_blobs.append(r.blob()) + elif field_no == 3 and wire == 2: + keys.append(r.blob().decode("utf-8", "ignore")) + elif field_no == 4 and wire == 2: + values.append(_decode_value(r.blob())) + elif field_no == 5 and wire == 0: + extent = r.varint() + else: + r.skip(wire) + layer = Layer(name=name, extent=extent) + for blob in feature_blobs: + feat = _decode_feature(blob, keys, values) + if feat is not None: + layer.features.append(feat) + return layer + + +def decode_tile(data: bytes) -> list[Layer]: + """Decode a vector tile (optionally gzip-compressed) into its layers. + + Args: + data: Raw ``.pbf`` bytes, gzip-compressed or not. + + Returns: + The decoded layers, in the order they appear in the tile. An empty or unparseable + tile yields an empty list rather than raising. + """ + if data[:2] == b"\x1f\x8b": + data = gzip.decompress(data) + r = _Reader(data) + layers: list[Layer] = [] + while not r.eof(): + field_no, wire = r.tag() + if field_no == 3 and wire == 2: # Tile.layers + layers.append(_decode_layer(r.blob())) + else: + r.skip(wire) + return layers diff --git a/meshtools/persistence/db.py b/meshtools/persistence/db.py index d8dba3d..b095731 100644 --- a/meshtools/persistence/db.py +++ b/meshtools/persistence/db.py @@ -10,7 +10,7 @@ from __future__ import annotations import sqlite3 from pathlib import Path -SCHEMA_VERSION = 4 +SCHEMA_VERSION = 5 _SCHEMA = """ CREATE TABLE IF NOT EXISTS schema_meta ( @@ -83,6 +83,7 @@ CREATE TABLE IF NOT EXISTS observations ( node TEXT, name TEXT, kind TEXT NOT NULL DEFAULT 'advert', + node_type INTEGER, -- advert type (repeater/chat/room/...), when carried snr REAL, rssi REAL, lat REAL, @@ -149,8 +150,8 @@ def _migrate(conn: sqlite3.Connection) -> None: added columns are created here too (not in ``_SCHEMA``), so ``executescript`` never references a column an older database hasn't grown yet. """ - columns = {row["name"] for row in conn.execute("PRAGMA table_info(messages)")} - if "channel_id" not in columns: + message_cols = {row["name"] for row in conn.execute("PRAGMA table_info(messages)")} + if "channel_id" not in message_cols: # v3 -> v4: channel history moved from being keyed by slot index to a # slot-independent channel identity. Existing rows are backfilled lazily at runtime # (see Repository.backfill_channel_ids) once the device's channels can be read. @@ -158,3 +159,9 @@ def _migrate(conn: sqlite3.Connection) -> None: conn.execute( "CREATE INDEX IF NOT EXISTS idx_messages_channel_id ON messages(channel_id)" ) + + observation_cols = {row["name"] for row in conn.execute("PRAGMA table_info(observations)")} + if "node_type" not in observation_cols: + # v4 -> v5: observations gained the transmitting node's advert type, so the map can + # tell repeaters from leaf nodes. Older rows simply carry NULL (type unknown). + conn.execute("ALTER TABLE observations ADD COLUMN node_type INTEGER") diff --git a/meshtools/persistence/repository.py b/meshtools/persistence/repository.py index 13665ae..b31bab9 100644 --- a/meshtools/persistence/repository.py +++ b/meshtools/persistence/repository.py @@ -320,13 +320,14 @@ class Repository: """ self._conn.execute( "INSERT INTO observations " - "(run_id, node, name, kind, snr, rssi, lat, lon, observed_at) " - "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", + "(run_id, node, name, kind, node_type, snr, rssi, lat, lon, observed_at) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", ( run_id, obs.node, obs.name, obs.kind, + obs.node_type, obs.snr, obs.rssi, obs.lat, @@ -361,7 +362,7 @@ class Repository: Returns: One :class:`HeardNode` per distinct node, ordered by most-recently heard. """ - sql = "SELECT node, name, snr, rssi, lat, lon, observed_at FROM observations" + sql = "SELECT node, name, node_type, snr, rssi, lat, lon, observed_at FROM observations" params: list[Any] = [] if since is not None: sql += " WHERE observed_at >= ?" @@ -373,6 +374,7 @@ class Repository: obs = Observation( node=row["node"], name=row["name"], + node_type=row["node_type"], snr=row["snr"], rssi=row["rssi"], lat=row["lat"], diff --git a/meshtools/services/basemap.py b/meshtools/services/basemap.py new file mode 100644 index 0000000..e70e297 --- /dev/null +++ b/meshtools/services/basemap.py @@ -0,0 +1,182 @@ +"""Fetch and cache OpenStreetMap vector tiles for the terminal map. + +This is the only networked part of the map. It resolves a tile source's (versioned) tile-URL +template from its TileJSON, fetches ``.pbf`` vector tiles over HTTPS, and caches them on disk +so panning back over ground you've seen is instant and later sessions work offline. Decoding +is delegated to the pure :mod:`meshtools.core.mvt`. + +The default source is **OpenFreeMap** (openfreemap.org) — full-planet OpenStreetMap vector +tiles, free and requiring no API key. Everything here is best-effort: with no network and no +cached tiles the loader simply returns ``None`` and the map falls back to plotting nodes on a +blank grid, never raising into the UI. + +Fetches are blocking (stdlib ``urllib``); callers on an event loop should run +:meth:`BasemapSource.load_tile` via ``asyncio.to_thread`` so the UI stays responsive. +""" + +from __future__ import annotations + +import json +import logging +import urllib.request +from pathlib import Path +from typing import Optional + +from ..core.mvt import Layer, decode_tile + +#: OpenFreeMap planet TileJSON — its ``tiles`` array holds the current versioned template. +DEFAULT_TILEJSON_URL = "https://tiles.openfreemap.org/planet" + +#: Sent on every request; identifies the client per common tile-usage etiquette. +_USER_AGENT = "MeshTools/0.1 (+https://github.com/; mesh node map)" + +#: Fallback max tile zoom if the TileJSON doesn't declare one (OpenFreeMap serves 14). +_DEFAULT_MAX_ZOOM = 14 + +_log = logging.getLogger(__name__) + + +class BasemapSource: + """A cached OpenStreetMap vector-tile source. + + Attributes: + cache_dir: Directory under which tiles and the resolved TileJSON are cached. + """ + + def __init__( + self, + cache_dir: Path, + *, + tilejson_url: str = DEFAULT_TILEJSON_URL, + timeout: float = 12.0, + ) -> None: + """Open a tile source backed by an on-disk cache. + + Args: + cache_dir: Where fetched tiles and TileJSON metadata are stored. + tilejson_url: URL of the source's TileJSON document. + timeout: Per-request network timeout in seconds. + """ + self.cache_dir = cache_dir + self._tilejson_url = tilejson_url + self._timeout = timeout + self._template: Optional[str] = None + self._max_zoom: Optional[int] = None + self._resolved = False # whether we've tried (success or offline) this session + + # -- metadata --------------------------------------------------------------- + + def _tilejson_path(self) -> Path: + return self.cache_dir / "tilejson.json" + + def _resolve(self) -> None: + """Resolve and cache the tile-URL template and max zoom (best-effort, once).""" + if self._resolved: + return + self._resolved = True + # Prefer a freshly fetched TileJSON (the template is versioned and rotates), but fall + # back to a previously cached copy so a session started offline can still use disk + # tiles and even re-fetch if the template is still valid. + data = self._http_get(self._tilejson_url) + if data is not None: + try: + self._tilejson_path().parent.mkdir(parents=True, exist_ok=True) + self._tilejson_path().write_bytes(data) + except OSError: # pragma: no cover - cache write failure is non-fatal + pass + if data is None and self._tilejson_path().exists(): + try: + data = self._tilejson_path().read_bytes() + except OSError: # pragma: no cover + data = None + if data is None: + return + try: + doc = json.loads(data) + tiles = doc.get("tiles") or [] + if tiles: + self._template = str(tiles[0]) + self._max_zoom = int(doc.get("maxzoom", _DEFAULT_MAX_ZOOM)) + except (ValueError, TypeError): # pragma: no cover - malformed TileJSON + pass + + @property + def max_zoom(self) -> int: + """The highest zoom the source serves (resolved lazily; sensible default offline).""" + self._resolve() + return self._max_zoom if self._max_zoom is not None else _DEFAULT_MAX_ZOOM + + @property + def available(self) -> bool: + """Whether a tile-URL template is known (network reachable, or one was cached).""" + self._resolve() + return self._template is not None + + # -- tiles ------------------------------------------------------------------ + + def _tile_path(self, z: int, x: int, y: int) -> Path: + return self.cache_dir / "tiles" / str(z) / str(x) / f"{y}.pbf" + + def load_tile(self, z: int, x: int, y: int) -> Optional[list[Layer]]: + """Return the decoded layers for a tile, from cache or the network. + + Args: + z: Tile zoom. + x: Tile x index. + y: Tile y index. + + Returns: + The decoded layers, or ``None`` if the tile is unavailable (offline and + uncached, or a genuinely empty/missing tile). + """ + path = self._tile_path(z, x, y) + raw = self._read_cached(path) + if raw is None: + raw = self._fetch_tile(z, x, y) + if raw is not None: + self._write_cached(path, raw) + if not raw: + return None + try: + return decode_tile(raw) + except Exception as exc: # noqa: BLE001 - a corrupt tile must not crash the map + _log.debug("failed to decode tile %s/%s/%s: %s", z, x, y, exc) + return None + + def _fetch_tile(self, z: int, x: int, y: int) -> Optional[bytes]: + """Fetch a tile's raw bytes from the network, or ``None`` if unavailable.""" + self._resolve() + if self._template is None: + return None + url = ( + self._template.replace("{z}", str(z)).replace("{x}", str(x)).replace("{y}", str(y)) + ) + data = self._http_get(url) + # A 404/empty response is a legitimately empty tile; cache an empty marker so we + # don't re-request it every repaint. + return data if data is not None else b"" + + @staticmethod + def _read_cached(path: Path) -> Optional[bytes]: + try: + return path.read_bytes() if path.exists() else None + except OSError: # pragma: no cover + return None + + @staticmethod + def _write_cached(path: Path, raw: bytes) -> None: + try: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_bytes(raw) + except OSError: # pragma: no cover - cache write failure is non-fatal + pass + + def _http_get(self, url: str) -> Optional[bytes]: + """GET a URL, returning the body, or ``None`` on any network/HTTP failure.""" + req = urllib.request.Request(url, headers={"User-Agent": _USER_AGENT}) + try: + with urllib.request.urlopen(req, timeout=self._timeout) as resp: + return resp.read() + except Exception as exc: # noqa: BLE001 - offline / 404 / timeout are all "no tile" + _log.debug("tile fetch failed for %s: %s", url, exc) + return None diff --git a/meshtools/tools/map.py b/meshtools/tools/map.py new file mode 100644 index 0000000..18ce27b --- /dev/null +++ b/meshtools/tools/map.py @@ -0,0 +1,227 @@ +"""The ``map`` tool: plot the mesh's located nodes on an OpenStreetMap terminal map. + +Nodes that share their location in adverts are collected from the passive-monitor history +(:meth:`~meshtools.persistence.repository.Repository.heard_nodes`), our own node is added when +its position is known, and everything is drawn over a real street basemap rendered as Unicode +braille (streets, rivers, place names — the same terminal-map idea as ``mapscii``). + +In the menu it opens a full-screen, pannable/zoomable map (see +:mod:`meshtools.ui.map_screen`). On the CLI it prints a one-shot render fitted to the nodes. +Repeaters are prioritised over ordinary nodes: a distinct marker, drawn on top, listed first. +The basemap is best-effort — with no network (and no cached tiles) the nodes are plotted on a +blank grid instead, and the tool still works offline. +""" + +from __future__ import annotations + +from typing import TYPE_CHECKING, Any, Optional + +import typer +from rich.console import Group +from rich.table import Table +from rich.text import Text + +from ..context import AppContext +from ..core.models import NODE_TYPE_REPEATER +from .base import Tool, ToolResult, register + +if TYPE_CHECKING: + from ..ui.map_render import MapMarker + + +@register +class MapTool(Tool): + """Show the mesh's location-sharing nodes on a braille OpenStreetMap map.""" + + name = "map" + help = "Show mesh nodes on a street map (pannable; repeaters highlighted)." + category = "Messaging" + order = 30 + + async def run(self, ctx: AppContext, params: dict[str, Any]) -> ToolResult: + """Gather located nodes and open the interactive map, or render a static one. + + Args: + ctx: Shared application context. + params: Optional ``static`` (force one-shot render), ``width``, ``zoom``, + ``basemap`` (set ``False`` to skip fetching tiles). + + Returns: + A :class:`ToolResult` summarizing how many nodes were plotted. + """ + from ..ui.surface import TuiUi + + markers = await self._gather(ctx) + if not markers: + ctx.ui.note( + "[muted]no nodes have shared a location yet — turn on the passive " + "monitor and wait for located adverts[/muted]" + ) + return ToolResult(summary={"located": 0}) + + interactive = isinstance(ctx.ui, TuiUi) and not params.get("static") + if interactive: + from ..ui.map_screen import open_map + + await open_map(ctx, markers) + else: + await self._render_static(ctx, markers, params) + + repeaters = sum(1 for m in markers if m.is_repeater and not m.is_self) + self_located = any(m.is_self for m in markers) + return ToolResult( + summary={ + "located": len(markers), + "repeaters": repeaters, + "nodes": len(markers) - repeaters - (1 if self_located else 0), + "self_located": self_located, + }, + message=None if interactive else ( + f"[ok]✓[/ok] mapped [brand]{len(markers)}[/brand] located nodes " + f"([accent]{repeaters}[/accent] repeaters)" + ), + ) + + # -- marker gathering ------------------------------------------------------- + + async def _gather(self, ctx: AppContext) -> list["MapMarker"]: + """Collect located heard nodes plus our own node (when its position is known).""" + from ..ui.map_render import MapMarker + + markers: list[MapMarker] = [] + for node in ctx.repo.heard_nodes(): + if not node.has_location: + continue + detail = f"{node.count} pkts" + if node.median_snr is not None: + detail += f" · {node.median_snr:+.1f} dB" + markers.append( + MapMarker( + label=node.name or node.node or "?", + lat=float(node.lat), + lon=float(node.lon), + is_repeater=node.is_repeater, + detail=detail, + ) + ) + self_marker = await self._self_marker(ctx) + if self_marker is not None: + markers.append(self_marker) + return markers + + @staticmethod + async def _self_marker(ctx: AppContext) -> Optional["MapMarker"]: + """Build a marker for our own node from the device, if its location is known.""" + from ..ui.map_render import MapMarker + + try: + info = await (await ctx.device()).get_self_info() + except Exception: # noqa: BLE001 - the map is useful without our own position + return None + lat, lon = _as_float(info.get("adv_lat")), _as_float(info.get("adv_lon")) + if lat is None or lon is None or (abs(lat) < 1e-6 and abs(lon) < 1e-6): + return None # a device with no fix reports 0/0 + return MapMarker( + label=str(info.get("name") or "this node"), + lat=lat, + lon=lon, + is_repeater=info.get("adv_type") == NODE_TYPE_REPEATER, + is_self=True, + ) + + # -- static (CLI) render ---------------------------------------------------- + + async def _render_static( + self, ctx: AppContext, markers: list["MapMarker"], params: dict[str, Any] + ) -> None: + """Fetch tiles synchronously and print a one-shot map fitted to the nodes.""" + import asyncio + + from ..core.geo import Viewport + from ..ui.map_render import render_map + from ..ui.map_screen import basemap_source + + cell_w = int(params.get("width") or min(ctx.console.size.width - 2, 160)) + cell_h = max(12, cell_w * 4 // 13) # keep roughly the terminal's aspect + dot_w, dot_h = cell_w * 2, cell_h * 4 + + source = basemap_source(ctx) + max_zoom = await asyncio.to_thread(lambda: source.max_zoom) + coords = [(m.lat, m.lon) for m in markers] + if params.get("zoom") is not None: + from ..core.geo import BBox + + center = BBox.around(coords).center + vp = Viewport(center[0], center[1], int(params["zoom"]), dot_w, dot_h) + else: + vp = Viewport.fit(coords, dot_w, dot_h, max_zoom=max_zoom) + + tiles = {} + if params.get("basemap", True): + for tile in vp.tiles(max_zoom): + tiles[tile] = await asyncio.to_thread(source.load_tile, *tile) + + lines = render_map(vp, tiles, markers) + body = Text.from_ansi("\n".join(lines)) + ctx.ui.show(Group(body, Text(""), _legend(markers))) + + def register_cli(self, app: typer.Typer) -> None: + """Register the ``map`` subcommand. + + Args: + app: The Typer application. + """ + from ..cli import run_tool_command + + @app.command(name=self.name, help=self.help) + def _map( + width: Optional[int] = typer.Option( + None, "--width", "-w", help="Map width in character cells." + ), + zoom: Optional[int] = typer.Option( + None, "--zoom", "-z", help="Fixed zoom level (omit to fit all nodes)." + ), + basemap: bool = typer.Option( + True, "--basemap/--no-basemap", help="Draw the OpenStreetMap street basemap." + ), + ) -> None: + params: dict[str, Any] = {"static": True, "basemap": basemap} + if width is not None: + params["width"] = width + if zoom is not None: + params["zoom"] = zoom + run_tool_command(self, params) + + +def _legend(markers: list["MapMarker"]) -> Table: + """A compact legend: self → repeaters → leaf nodes, with coordinates and detail.""" + from ..ui.map_render import _NODE, _REPEATER, _SELF + + table = Table(box=None, padding=(0, 2, 0, 0), expand=False) + table.add_column("") + table.add_column("node") + table.add_column("type") + table.add_column("coords", justify="right") + table.add_column("seen") + ordered = sorted(markers, key=lambda m: -m._rank()) + for m in ordered: + glyph, color = _SELF if m.is_self else (_REPEATER if m.is_repeater else _NODE) + kind = "you" if m.is_self else ("repeater" if m.is_repeater else "node") + table.add_row( + Text(glyph, style=color), + Text(m.label, style=color if m.is_self else ""), + Text(kind, style="muted"), + Text(f"{m.lat:.4f}, {m.lon:.4f}", style="muted"), + Text(m.detail, style="muted"), + ) + return table + + +def _as_float(value: object) -> Optional[float]: + """Best-effort float conversion, returning ``None`` on missing/garbage values.""" + if value is None: + return None + try: + return float(value) # type: ignore[arg-type] + except (TypeError, ValueError): + return None diff --git a/meshtools/ui/map_render.py b/meshtools/ui/map_render.py new file mode 100644 index 0000000..7fe5a07 --- /dev/null +++ b/meshtools/ui/map_render.py @@ -0,0 +1,313 @@ +"""Compose a rendered map frame: basemap geometry, labels, and mesh nodes. + +Given a :class:`~meshtools.core.geo.Viewport` and the decoded vector tiles covering it, this +projects every street, river, water body and place label onto a :class:`MapCanvas`, then +overlays the mesh nodes with their names on top. It is pure and synchronous — tile *fetching* +happens elsewhere (:mod:`meshtools.services.basemap`) — so both the interactive screen and +the one-shot CLI render call the same code. + +Colours target a dark terminal (the app theme): warm roads, grey minor streets, blue water +and rivers, faint green parks. Because a cell shows one colour, draw priorities keep the +important feature visible where things overlap (rivers over water, major roads over minor). +""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from typing import Optional + +from ..core.geo import Viewport +from ..core.mvt import GEOM_LINE, GEOM_POLYGON, Layer +from .mapcanvas import RGB, MapCanvas, parse_hex + +# -- node markers ------------------------------------------------------------- + + +@dataclass(slots=True) +class MapMarker: + """One mesh node to overlay on the map. + + Attributes: + label: Node name shown beside the marker. + lat: Latitude in decimal degrees. + lon: Longitude in decimal degrees. + is_repeater: Whether the node is a repeater (prioritised marker). + is_self: Whether this is our own node (highlighted). + detail: Extra text for the CLI legend (e.g. ``"18 pkts · +6.0 dB"``). + """ + + label: str + lat: float + lon: float + is_repeater: bool = False + is_self: bool = False + detail: str = "" + + def _rank(self) -> int: + """Draw order: self on top of repeaters on top of leaf nodes.""" + return 2 if self.is_self else (1 if self.is_repeater else 0) + + +_SELF = ("★", "#ffffff") +_REPEATER = ("▲", "#ff5d73") +_NODE = ("●", "#22d3ee") + + +# -- basemap styling ---------------------------------------------------------- + +# Road class -> (colour, priority). Higher priority wins a shared cell. +_ROAD_STYLE: dict[str, tuple[str, int]] = { + "motorway": ("#f2a13d", 27), + "trunk": ("#f2a13d", 26), + "primary": ("#e8b24a", 25), + "secondary": ("#d7c257", 24), + "tertiary": ("#a7adb8", 23), + "minor": ("#828894", 21), + "unclassified": ("#828894", 21), + "residential": ("#828894", 21), + "living_street": ("#767c88", 20), + "service": ("#5f646e", 19), + "pedestrian": ("#5a5f69", 15), + "path": ("#4b5560", 12), + "track": ("#4b5560", 12), + "footway": ("#454e58", 11), + "cycleway": ("#455864", 12), +} +_ROAD_DEFAULT = ("#5f646e", 18) +_RAIL = ("#8a8f98", 22) + +# Waterway class -> (colour, priority). +_WATERWAY_STYLE: dict[str, tuple[str, int]] = { + "river": ("#49b0ec", 30), + "canal": ("#49b0ec", 30), + "stream": ("#3f8fbf", 29), + "ditch": ("#3a7ba6", 28), + "drain": ("#3a7ba6", 28), +} +_WATER_FILL = ("#153b56", 6) +_GREEN_FILL = ("#173a29", 4) +_GREEN_CLASSES = {"wood", "forest", "grass", "park", "meadow", "scrub", "wetland", "cemetery"} + +# Label styling per place class: (colour, bold, rank, min_display_zoom). Lower rank places +# claim screen space first; min zoom hides the fine detail until you zoom in. +_PLACE_STYLE: dict[str, tuple[str, bool, int, int]] = { + "city": ("#f8fafc", True, 0, 0), + "town": ("#e6ebf2", True, 1, 9), + "village": ("#cdd6e2", False, 2, 12), + "suburb": ("#9fb0c4", False, 3, 12), + "quarter": ("#94a5ba", False, 4, 13), + "neighbourhood": ("#8496ab", False, 5, 13), + "hamlet": ("#8496ab", False, 6, 14), +} +_WATER_LABEL = ("#7dd3fc", False, 2) +_STREET_LABEL = ("#9aa0aa", False, 7) + + +@dataclass(slots=True) +class _Label: + """A pending label placement candidate.""" + + rank: int + x: float + y: float + text: str + color: RGB + bold: bool + min_zoom: int = 0 + + +@dataclass(slots=True) +class _Frame: + """Working state while composing one frame.""" + + canvas: MapCanvas + viewport: Viewport + labels: list[_Label] = field(default_factory=list) + + +def render_map( + viewport: Viewport, + tiles: dict[tuple[int, int, int], Optional[list[Layer]]], + markers: list[MapMarker], + *, + max_labels: int = 80, +) -> list[str]: + """Render a full map frame to truecolour ANSI lines. + + Args: + viewport: The view to render (its dot size sets the canvas size). + tiles: Decoded layers keyed by ``(z, x, y)``; ``None`` values are pending/absent. + markers: Mesh nodes to overlay. + max_labels: Cap on basemap labels placed, to keep the map readable. + + Returns: + One ANSI string per row, ready for the TUI frame or the console. + """ + canvas = MapCanvas(viewport.dot_w // 2, viewport.dot_h // 4) + frame = _Frame(canvas=canvas, viewport=viewport) + + for (z, x, y), layers in tiles.items(): + if layers: + _draw_tile(frame, layers, z, x, y) + + # Nodes reserve their cells first so basemap labels route around them. + _draw_nodes(canvas, viewport, markers) + + # Then place basemap labels by importance, honouring the zoom gate and collisions. + placed = 0 + for label in sorted(frame.labels, key=lambda l: l.rank): + if placed >= max_labels: + break + if viewport.zoom < label.min_zoom: + continue + if canvas.place_label(label.x, label.y, label.text, label.color, bold=label.bold): + placed += 1 + + return canvas.to_ansi_lines() + + +def _draw_tile(frame: _Frame, layers: list[Layer], z: int, x: int, y: int) -> None: + """Draw one decoded tile's geometry and collect its label candidates.""" + vp = frame.canvas + by_name = {layer.name: layer for layer in layers} + + def project(ring: list[tuple[int, int]], extent: int) -> list[tuple[float, float]]: + return [ + frame.viewport.feature_to_dot(x, y, z, extent, lx, ly) for lx, ly in ring + ] + + # Fills first (water, green space) so lines and labels sit on top. + for name in ("water", "landcover", "landuse", "park"): + layer = by_name.get(name) + if layer is None: + continue + for feat in layer.features: + if feat.geom_type != GEOM_POLYGON: + continue + if name == "water": + color, prio = _WATER_FILL + elif str(feat.get("class") or feat.get("subclass")) in _GREEN_CLASSES: + color, prio = _GREEN_FILL + else: + continue + vp.fill_polygon( + [project(r, layer.extent) for r in feat.rings], parse_hex(color), prio + ) + + # Waterways (rivers/streams) as lines. + waterway = by_name.get("waterway") + if waterway is not None: + for feat in waterway.features: + style = _WATERWAY_STYLE.get(str(feat.get("class"))) + if style is None or feat.geom_type != GEOM_LINE: + continue + color, prio = style + for ring in feat.rings: + if len(ring) >= 2: + vp.draw_line(project(ring, waterway.extent), parse_hex(color), prio) + if feat.name: + _add_line_label(frame, feat.rings, waterway.extent, z, x, y, feat.name, _WATER_LABEL) + + # Roads / rail. + transportation = by_name.get("transportation") + if transportation is not None: + for feat in transportation.features: + if feat.geom_type != GEOM_LINE: + continue + cls = str(feat.get("class") or "") + if cls in ("rail", "transit"): + color, prio = _RAIL + else: + color, prio = _ROAD_STYLE.get(cls, _ROAD_DEFAULT) + rgb = parse_hex(color) + for ring in feat.rings: + if len(ring) >= 2: + vp.draw_line(project(ring, transportation.extent), rgb, prio) + + # Boundaries (admin) as a faint hint. + boundary = by_name.get("boundary") + if boundary is not None: + for feat in boundary.features: + if feat.geom_type != GEOM_LINE: + continue + try: + if int(feat.get("admin_level", 99)) > 6: + continue + except (TypeError, ValueError): + continue + for ring in feat.rings: + if len(ring) >= 2: + vp.draw_line(project(ring, boundary.extent), parse_hex("#6d5f88"), 14) + + # Street-name labels (only kick in at high zoom via the label's min_zoom gate). + tname = by_name.get("transportation_name") + if tname is not None: + color, bold, rank = _STREET_LABEL + for feat in tname.features: + if feat.name and feat.rings: + _add_line_label( + frame, feat.rings, tname.extent, z, x, y, feat.name, + (color, bold, rank), min_zoom=15, + ) + + # Place labels. + place = by_name.get("place") + if place is not None: + for feat in place.features: + if not feat.name or not feat.rings or not feat.rings[0]: + continue + style = _PLACE_STYLE.get(str(feat.get("class"))) + if style is None: + continue + color, bold, rank, min_zoom = style + lx, ly = feat.rings[0][0] + dx, dy = frame.viewport.feature_to_dot(x, y, z, place.extent, lx, ly) + frame.labels.append( + _Label(rank, dx, dy, feat.name, parse_hex(color), bold, min_zoom) + ) + + # Water-body names. + water_name = by_name.get("water_name") + if water_name is not None: + color, bold, rank = _WATER_LABEL + for feat in water_name.features: + if feat.name and feat.rings and feat.rings[0]: + lx, ly = feat.rings[0][0] + dx, dy = frame.viewport.feature_to_dot(x, y, z, water_name.extent, lx, ly) + frame.labels.append(_Label(rank, dx, dy, feat.name, parse_hex(color), bold, 8)) + + +def _add_line_label( + frame: _Frame, + rings: list[list[tuple[int, int]]], + extent: int, + z: int, + x: int, + y: int, + text: str, + style: tuple[str, bool, int], + *, + min_zoom: int = 0, +) -> None: + """Queue a label at the midpoint of a line feature's longest part.""" + longest = max(rings, key=len) + lx, ly = longest[len(longest) // 2] + dx, dy = frame.viewport.feature_to_dot(x, y, z, extent, lx, ly) + color, bold, rank = style + frame.labels.append(_Label(rank, dx, dy, text, parse_hex(color), bold, min_zoom)) + + +def _draw_nodes(canvas: MapCanvas, viewport: Viewport, markers: list[MapMarker]) -> None: + """Overlay mesh nodes (lowest priority first, so self/repeaters land on top).""" + for marker in sorted(markers, key=lambda m: m._rank()): + x, y = viewport.lonlat_to_dot(marker.lat, marker.lon) + ix, iy = int(round(x)), int(round(y)) + if not (0 <= ix < viewport.dot_w and 0 <= iy < viewport.dot_h): + continue + if marker.is_self: + glyph, color = _SELF + elif marker.is_repeater: + glyph, color = _REPEATER + else: + glyph, color = _NODE + canvas.marker(ix, iy, glyph, parse_hex(color), label=marker.label) diff --git a/meshtools/ui/map_screen.py b/meshtools/ui/map_screen.py new file mode 100644 index 0000000..1e8f784 --- /dev/null +++ b/meshtools/ui/map_screen.py @@ -0,0 +1,217 @@ +"""The interactive full-screen map: a pannable, zoomable slippy map in the terminal. + +This drives the braille street map inside the TUI. It owns a :class:`~meshtools.core.geo. +Viewport` over the mesh's nodes, fetches the vector tiles covering it in the background (so +the UI never blocks on the network), and redraws via :func:`~meshtools.ui.map_render. +render_map`. Keys: + +* ``w`` / ``a`` / ``s`` / ``d`` (or the arrow keys) pan north / west / south / east, +* ``=`` / ``+`` zoom in, ``-`` / ``_`` zoom out, +* ``r`` recenters and refits to the nodes, +* ``Esc`` / ``q`` leaves the map. + +With no network (and no cached tiles) the basemap is simply absent and nodes are plotted on a +blank grid — the map still works, it just has no streets. +""" + +from __future__ import annotations + +import asyncio +import math +from typing import TYPE_CHECKING, Optional + +from ..core.geo import EARTH_RADIUS_KM, Viewport +from ..core.mvt import Layer +from ..services.basemap import BasemapSource +from .map_render import MapMarker, render_map +from .tui.screen import Screen + +if TYPE_CHECKING: + from ..context import AppContext + +#: Fraction of the view a single pan keypress moves. +_PAN_STEP = 0.30 + +#: How far past the tile source's max zoom the display may go (lower tiles are magnified). +_OVERZOOM = 2 + + +class MapScreen(Screen): + """A full-screen, keyboard-driven map of the mesh's located nodes over an OSM basemap.""" + + floating = False + + def __init__( + self, + session, # noqa: ANN001 - TuiSession, imported lazily to avoid a cycle + markers: list[MapMarker], + source: BasemapSource, + max_tile_zoom: int, + ) -> None: + """Create the map screen. + + Args: + session: The running TUI session (for size + repaint scheduling). + markers: The located mesh nodes to plot (must be non-empty). + source: The vector-tile source (already resolved/warmed). + max_tile_zoom: The source's max zoom, captured off the event loop at open time. + """ + super().__init__() + self.title = "mesh map" + self._session = session + self._markers = markers + self._source = source + self._max_tile_zoom = max_tile_zoom + self._viewport: Optional[Viewport] = None + self._size: tuple[int, int] = (0, 0) # (dot_w, dot_h) the viewport is built for + # Decoded tiles keyed by (z, x, y); a stored ``None`` means "fetched, empty/absent". + self._tiles: dict[tuple[int, int, int], Optional[list[Layer]]] = {} + self._pending: set[tuple[int, int, int]] = set() + + # --- rendering ----------------------------------------------------------- + + @property + def footer_hint(self) -> str: # type: ignore[override] + """Key hints plus a live tile-loading indicator.""" + base = "wasd/↑↓←→ pan · +/- zoom · r reset · Esc back" + if self._pending: + return f"{base} · [muted]loading {len(self._pending)} tiles…[/muted]" + if not self._source.available: + return f"{base} · [warn]offline — no basemap[/warn]" + return base + + def render_body(self, width: int) -> list[str]: + """Build (or resize) the viewport, ensure its tiles, and render the frame.""" + _, cell_h = self._session.base_body_size() + cell_w = width + dot_w, dot_h = cell_w * 2, cell_h * 4 + + if self._viewport is None: + self._viewport = Viewport.fit( + [(m.lat, m.lon) for m in self._markers], + dot_w, + dot_h, + max_zoom=self._max_tile_zoom, + ) + self._size = (dot_w, dot_h) + elif self._size != (dot_w, dot_h): + self._viewport = self._viewport.resized(dot_w, dot_h) + self._size = (dot_w, dot_h) + + self._ensure_tiles(self._viewport) + self.title = self._title(self._viewport) + tiles = {t: self._tiles.get(t) for t in self._viewport.tiles(self._max_tile_zoom)} + return render_map(self._viewport, tiles, self._markers) + + def _title(self, vp: Viewport) -> str: + """A compact status title: zoom, node count, and scale (metres per dot).""" + # Ground metres per braille dot at the view centre, for a rough sense of scale. + m_per_dot = ( + 2 * math.pi * EARTH_RADIUS_KM * 1000 + * math.cos(math.radians(vp.center_lat)) + / (256 * (2**vp.zoom)) + ) + scale = f"{m_per_dot * vp.dot_w:.0f} m across" if m_per_dot * vp.dot_w < 1000 else \ + f"{m_per_dot * vp.dot_w / 1000:.1f} km across" + return f"mesh map · z{vp.zoom} · {len(self._markers)} nodes · {scale}" + + # --- tiles --------------------------------------------------------------- + + def _ensure_tiles(self, vp: Viewport) -> None: + """Schedule background fetches for any visible tiles not yet loaded or pending.""" + if not self._source.available: # offline (resolved at open time) — nodes only + return + for t in vp.tiles(self._max_tile_zoom): + if t in self._tiles or t in self._pending: + continue + self._pending.add(t) + try: + asyncio.ensure_future(self._load(t)) + except RuntimeError: # pragma: no cover - no running loop (non-interactive) + self._pending.discard(t) + + async def _load(self, t: tuple[int, int, int]) -> None: + """Fetch+decode one tile off the event loop, then repaint.""" + try: + layers = await asyncio.to_thread(self._source.load_tile, *t) + except Exception: # noqa: BLE001 - a failed tile is just an absent one + layers = None + self._tiles[t] = layers + self._pending.discard(t) + self._session.invalidate() + + # --- input --------------------------------------------------------------- + + def handle(self, action: str, data: str = "") -> None: + """Pan, zoom, reset, or exit in response to a normalized key action.""" + vp = self._viewport + if action == "escape": + self.resolve(None) + return + if vp is None: + return + if action == "up": + self._viewport = vp.panned(0, -_PAN_STEP) + elif action == "down": + self._viewport = vp.panned(0, _PAN_STEP) + elif action == "left": + self._viewport = vp.panned(-_PAN_STEP, 0) + elif action == "right": + self._viewport = vp.panned(_PAN_STEP, 0) + elif action == "text": + self._handle_key(data, vp) + + def _handle_key(self, key: str, vp: Viewport) -> None: + """Handle a printable-key action (pan/zoom/reset/quit).""" + key = key.lower() + if key == "w": + self._viewport = vp.panned(0, -_PAN_STEP) + elif key == "s": + self._viewport = vp.panned(0, _PAN_STEP) + elif key == "a": + self._viewport = vp.panned(-_PAN_STEP, 0) + elif key == "d": + self._viewport = vp.panned(_PAN_STEP, 0) + elif key in ("=", "+"): + self._viewport = vp.zoomed(1, max_zoom=self._max_tile_zoom + _OVERZOOM) + elif key in ("-", "_"): + self._viewport = vp.zoomed(-1) + elif key == "r": + self._viewport = Viewport.fit( + [(m.lat, m.lon) for m in self._markers], + vp.dot_w, + vp.dot_h, + max_zoom=self._max_tile_zoom, + ) + elif key == "q": + self.resolve(None) + + +def basemap_source(ctx: "AppContext") -> BasemapSource: + """Build the vector-tile source backed by the app's on-disk tile cache.""" + return BasemapSource(ctx.settings.config_dir / "tilecache") + + +async def open_map(ctx: "AppContext", markers: list[MapMarker]) -> None: + """Open the interactive full-screen map over ``markers`` and run until dismissed. + + Warms the tile source off the event loop (so the first paint doesn't block on the + network), then pushes the :class:`MapScreen` and awaits its dismissal. + + Args: + ctx: Shared application context (must be in the interactive menu). + markers: The located mesh nodes to plot (non-empty). + + Raises: + RuntimeError: If called outside the interactive menu (no full-screen session). + """ + from .surface import TuiUi + + if not isinstance(ctx.ui, TuiUi): # pragma: no cover - guarded by the menu-only caller + raise RuntimeError("the interactive map is only available in the menu") + session = ctx.ui.session + source = basemap_source(ctx) + # Resolve the tile template/zoom in a worker thread so the UI thread never blocks. + max_zoom = await asyncio.to_thread(lambda: source.max_zoom) + screen = MapScreen(session, markers, source, max_zoom) + await session.run_screen(screen) diff --git a/meshtools/ui/mapcanvas.py b/meshtools/ui/mapcanvas.py new file mode 100644 index 0000000..6bcbf32 --- /dev/null +++ b/meshtools/ui/mapcanvas.py @@ -0,0 +1,252 @@ +"""A colored Unicode-braille canvas for the terminal map. + +Each character cell holds a 2×4 grid of braille dots, so the drawable resolution is twice +the columns by four times the rows. Streets, rivers and water are rasterized as braille +*dots*; place names, street names and node labels are written as *text* over whole cells; +node markers are single glyphs on top. + +A terminal cell can only show one colour, so each cell keeps the colour of the +highest-**priority** feature whose dots fall in it (a river drawn over water keeps the river's +blue). Text and markers form a separate overlay that always wins the cell, with greedy +collision avoidance so labels never overprint each other. The canvas renders straight to +truecolour ANSI lines, which is exactly what the TUI frame consumes. +""" + +from __future__ import annotations + +from typing import Optional + +#: Unicode braille pattern base; add a dot bitmask to get the glyph. +_BRAILLE_BASE = 0x2800 + +#: Dot bit for each (col, row) within a cell — the Unicode braille standard layout. +_DOT_BITS = ( + (0x01, 0x02, 0x04, 0x40), # left column, rows 0..3 + (0x08, 0x10, 0x20, 0x80), # right column, rows 0..3 +) + +RGB = tuple[int, int, int] + + +def parse_hex(color: str) -> RGB: + """Convert ``"#rrggbb"`` (or ``"rrggbb"``) to an ``(r, g, b)`` tuple.""" + c = color.lstrip("#") + return (int(c[0:2], 16), int(c[2:4], 16), int(c[4:6], 16)) + + +class MapCanvas: + """A colored braille raster with a text/marker overlay and label collision tracking.""" + + def __init__(self, cell_w: int, cell_h: int) -> None: + """Create a blank canvas. + + Args: + cell_w: Width in character cells. + cell_h: Height in character cells. + """ + self.cell_w = max(1, cell_w) + self.cell_h = max(1, cell_h) + self.dot_w = self.cell_w * 2 + self.dot_h = self.cell_h * 4 + self._bits = [[0] * self.cell_w for _ in range(self.cell_h)] + self._color: list[list[Optional[RGB]]] = [ + [None] * self.cell_w for _ in range(self.cell_h) + ] + self._prio = [[-1] * self.cell_w for _ in range(self.cell_h)] + # Overlay: (cx, cy) -> (char, rgb, bold). Occupied tracks cells claimed by labels / + # markers so later labels can avoid them. + self._overlay: dict[tuple[int, int], tuple[str, RGB, bool]] = {} + self._occupied: set[tuple[int, int]] = set() + + # -- primitives ------------------------------------------------------------- + + def plot(self, x: int, y: int, color: RGB, priority: int) -> None: + """Light the braille dot at dot ``(x, y)`` and colour its cell by ``priority``.""" + if not (0 <= x < self.dot_w and 0 <= y < self.dot_h): + return + cx, cy = x >> 1, y >> 2 + self._bits[cy][cx] |= _DOT_BITS[x & 1][y & 3] + if priority >= self._prio[cy][cx]: + self._prio[cy][cx] = priority + self._color[cy][cx] = color + + def draw_line( + self, points: list[tuple[float, float]], color: RGB, priority: int + ) -> None: + """Rasterize a polyline through ``points`` (dot coordinates) as braille dots.""" + for (x0, y0), (x1, y1) in zip(points, points[1:]): + self._segment(x0, y0, x1, y1, color, priority) + + def _segment( + self, x0: float, y0: float, x1: float, y1: float, color: RGB, priority: int + ) -> None: + """Bresenham a single segment, skipping ones wholly off the canvas.""" + # Quick reject: both endpoints beyond the same edge → nothing visible. + if (x0 < 0 and x1 < 0) or (x0 >= self.dot_w and x1 >= self.dot_w): + return + if (y0 < 0 and y1 < 0) or (y0 >= self.dot_h and y1 >= self.dot_h): + return + xa, ya, xb, yb = int(round(x0)), int(round(y0)), int(round(x1)), int(round(y1)) + dx, dy = abs(xb - xa), -abs(yb - ya) + sx = 1 if xa < xb else -1 + sy = 1 if ya < yb else -1 + err = dx + dy + while True: + self.plot(xa, ya, color, priority) + if xa == xb and ya == yb: + break + e2 = 2 * err + if e2 >= dy: + err += dy + xa += sx + if e2 <= dx: + err += dx + ya += sy + + def fill_polygon( + self, rings: list[list[tuple[float, float]]], color: RGB, priority: int + ) -> None: + """Even-odd scanline fill of a polygon (with holes) in dot space.""" + edges: list[tuple[float, float, float, float]] = [] + ys: list[float] = [] + for ring in rings: + for (x0, y0), (x1, y1) in zip(ring, ring[1:]): + if y0 != y1: + edges.append((x0, y0, x1, y1)) + ys.extend((y0, y1)) + if not edges: + return + y_start = max(0, int(min(ys))) + y_end = min(self.dot_h - 1, int(max(ys))) + for y in range(y_start, y_end + 1): + yc = y + 0.5 + xs: list[float] = [] + for x0, y0, x1, y1 in edges: + if (y0 <= yc < y1) or (y1 <= yc < y0): + xs.append(x0 + (yc - y0) * (x1 - x0) / (y1 - y0)) + xs.sort() + for i in range(0, len(xs) - 1, 2): + x_from = max(0, int(round(xs[i]))) + x_to = min(self.dot_w - 1, int(round(xs[i + 1]))) + for x in range(x_from, x_to + 1): + self.plot(x, y, color, priority) + + # -- overlay (markers + labels) -------------------------------------------- + + def marker( + self, + x: int, + y: int, + glyph: str, + color: RGB, + *, + label: str = "", + label_color: Optional[RGB] = None, + ) -> None: + """Place a marker glyph at dot ``(x, y)`` with an optional label beside it. + + Markers always draw (they are the point of the map). The label is placed to the + right when there's room, otherwise to the left, and its cells are reserved so + basemap labels avoid them. + """ + cx, cy = x >> 1, y >> 2 + if not (0 <= cx < self.cell_w and 0 <= cy < self.cell_h): + return + self._overlay[(cx, cy)] = (glyph, color, True) + self._occupied.add((cx, cy)) + if label: + lc = label_color or color + # Prefer the label to the right of the marker (one blank cell gap); fall back to + # the left when it would overflow — never overwriting the marker glyph itself. + if cx + 2 + len(label) <= self.cell_w: + self._place_run(cx + 2, cy, label, lc, bold=True) + else: + self._place_run(max(0, cx - 1 - len(label)), cy, label, lc, bold=True) + + def place_label( + self, x: float, y: float, text: str, color: RGB, *, bold: bool = False + ) -> bool: + """Write a centered basemap label at dot ``(x, y)`` if it fits without collision. + + Args: + x: Anchor dot x. + y: Anchor dot y. + text: Label text. + color: Text colour. + bold: Whether to embolden (used for the most important places). + + Returns: + ``True`` if placed, ``False`` if it fell off-canvas or overlapped existing text. + """ + cx = int(x) >> 1 + cy = int(y) >> 2 + start = cx - len(text) // 2 + return self._place_run(start, cy, text, color, bold=bold, checked=True) + + def _place_run( + self, + start_cx: int, + cy: int, + text: str, + color: RGB, + *, + bold: bool, + checked: bool = False, + ) -> bool: + """Write ``text`` starting at cell ``(start_cx, cy)``. + + With ``checked`` the run is skipped entirely if any target cell (or a one-cell + horizontal margin) is already claimed or off-canvas; otherwise it is forced and + simply clipped to the canvas. Returns whether anything was placed. + """ + if not (0 <= cy < self.cell_h): + return False + cells = range(start_cx, start_cx + len(text)) + if checked: + if start_cx < 0 or start_cx + len(text) > self.cell_w: + return False + margin = range(start_cx - 1, start_cx + len(text) + 1) + if any((mx, cy) in self._occupied for mx in margin): + return False + placed = False + for offset, ch in enumerate(text): + mx = start_cx + offset + if 0 <= mx < self.cell_w: + self._overlay[(mx, cy)] = (ch, color, bold) + self._occupied.add((mx, cy)) + placed = True + return placed + + # -- output ----------------------------------------------------------------- + + def to_ansi_lines(self) -> list[str]: + """Render the canvas to one truecolour ANSI string per row.""" + reset = "\x1b[0m" + lines: list[str] = [] + for cy in range(self.cell_h): + parts: list[str] = [] + cur: Optional[tuple[RGB, bool]] = None + for cx in range(self.cell_w): + overlay = self._overlay.get((cx, cy)) + if overlay is not None: + ch, color, bold = overlay + elif self._bits[cy][cx]: + ch = chr(_BRAILLE_BASE + self._bits[cy][cx]) + color = self._color[cy][cx] or (128, 128, 128) + bold = False + else: + if cur is not None: + parts.append(reset) + cur = None + parts.append(" ") + continue + style = (color, bold) + if style != cur: + r, g, b = color + parts.append(f"\x1b[0m\x1b[38;2;{r};{g};{b}m" + ("\x1b[1m" if bold else "")) + cur = style + parts.append(ch) + if cur is not None: + parts.append(reset) + lines.append("".join(parts)) + return lines diff --git a/meshtools/ui/tui/session.py b/meshtools/ui/tui/session.py index 9d21a34..cd3777a 100644 --- a/meshtools/ui/tui/session.py +++ b/meshtools/ui/tui/session.py @@ -251,6 +251,23 @@ class TuiSession: size = self._app.output.get_size() # type: ignore[union-attr] return max(20, size.columns), max(6, size.rows) + def base_body_size(self) -> tuple[int, int]: + """Return the ``(width, height)`` in cells available to the base screen's body. + + Mirrors the layout math in :func:`~meshtools.ui.tui.frame.compose_base` so a + full-screen screen (e.g. the map) can size its own content to fill the frame exactly, + without waiting a repaint to learn its height. + + Returns: + The inner content width and the body viewport height, both in character cells. + """ + from .render import render_lines + + cols, rows = self._size() + header_h = len(render_lines(self._header(), cols, no_wrap=True)) + viewport = max(1, rows - header_h - 1 - 2) # minus footer(1) and panel border(2) + return cols - 4, viewport + def _base_screen(self) -> Optional[Screen]: """The screen drawn as the background (parent of a floating dialog, else the top).""" if not self._stack: diff --git a/tests/fixtures/tile_14_4843_5861.mvt b/tests/fixtures/tile_14_4843_5861.mvt new file mode 100644 index 0000000000000000000000000000000000000000..0d1add6d9da585fd8b0a780cb41476d303f530f5 GIT binary patch literal 475450 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
N)0>@jzU`N0^ElN)uv5-%tuoLbEF`7rfk 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Ϋ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 str: + """Strip ANSI colour from rendered lines for content assertions.""" + return "\n".join(_ANSI.sub("", line) for line in lines) + + +# -- MVT decoding ------------------------------------------------------------- + + +def test_decode_tile_reads_expected_layers() -> None: + """The real fixture decodes into the OpenMapTiles layers the map relies on.""" + layers = {layer.name: layer for layer in decode_tile(_FIXTURE.read_bytes())} + for expected in ("transportation", "transportation_name", "water", "waterway", "place"): + assert expected in layers, expected + assert layers["transportation"].extent == 4096 + assert layers["transportation"].features # roads were decoded + + +def test_decode_tile_resolves_names_and_geometry() -> None: + """Street and place features carry resolved names and non-trivial geometry.""" + layers = {layer.name: layer for layer in decode_tile(_FIXTURE.read_bytes())} + streets = [f.name for f in layers["transportation_name"].features if f.name] + assert any("Rue" in s or "Avenue" in s or "Av." in s for s in streets) + + places = {f.name: f.get("class") for f in layers["place"].features if f.name} + assert "Montréal" in places and places["Montréal"] == "city" + + # A road is a line with at least two points; water is a polygon. + assert any( + f.geom_type == GEOM_LINE and len(f.rings[0]) >= 2 + for f in layers["transportation"].features + ) + assert any(f.geom_type == GEOM_POLYGON for f in layers["water"].features) + + +def test_decode_tile_handles_empty_input() -> None: + """An empty byte string decodes to no layers rather than raising.""" + assert decode_tile(b"") == [] + + +# -- projection / viewport ---------------------------------------------------- + + +def test_world_projection_round_trips() -> None: + """lon/lat -> world pixels -> lon/lat recovers the original coordinate.""" + for lat, lon, z in [(45.5, -73.6, 14), (0.0, 0.0, 3), (-33.9, 151.2, 12)]: + wx, wy = lonlat_to_world(lat, lon, z) + rlat, rlon = world_to_lonlat(wx, wy, z) + assert rlat == pytest.approx(lat, abs=1e-6) + assert rlon == pytest.approx(lon, abs=1e-6) + + +def test_haversine_known_distance() -> None: + """One degree of longitude at the equator is ~111 km; identical points are 0.""" + assert haversine_km(0.0, 0.0, 0.0, 1.0) == pytest.approx(111.19, abs=0.5) + assert haversine_km(45.0, -73.0, 45.0, -73.0) == 0.0 + + +def test_viewport_center_projects_to_the_middle() -> None: + """The viewport's centre lands at the middle dot; north is up.""" + vp = Viewport(45.5, -73.6, 13, 200, 120) + cx, cy = vp.lonlat_to_dot(45.5, -73.6) + assert cx == pytest.approx(100, abs=0.5) and cy == pytest.approx(60, abs=0.5) + # A point due north projects above the centre (smaller y). + _, ny = vp.lonlat_to_dot(45.6, -73.6) + assert ny < cy + + +def test_viewport_fit_frames_all_points() -> None: + """A fitted viewport is centred on the points and zoomed so they share a tile scale.""" + pts = [(45.5019, -73.5674), (45.4768, -73.5990)] + vp = Viewport.fit(pts, 200, 120, max_zoom=14) + assert 8 <= vp.zoom <= 14 + for lat, lon in pts: + x, y = vp.lonlat_to_dot(lat, lon) + assert 0 <= x < vp.dot_w and 0 <= y < vp.dot_h # every point is on-canvas + + +def test_viewport_zoom_and_pan() -> None: + """Zooming and panning return new viewports; zoom clamps to its bounds.""" + vp = Viewport(45.5, -73.6, 10, 200, 120) + assert vp.zoomed(2).zoom == 12 + assert vp.zoomed(50, max_zoom=16).zoom == 16 # clamped + assert vp.zoomed(-50, min_zoom=3).zoom == 3 + east = vp.panned(0.5, 0) + assert east.center_lon > vp.center_lon # panning east increases longitude + north = vp.panned(0, -0.5) + assert north.center_lat > vp.center_lat # panning north increases latitude + + +def test_viewport_tiles_cover_the_view() -> None: + """The viewport reports the handful of tiles overlapping it at the tile zoom.""" + vp = Viewport(45.5019, -73.5674, 14, 200, 120) + tiles = vp.tiles(14) + assert tiles and all(z == 14 for z, _, _ in tiles) + # The fixture tile for this centre must be among them. + assert (14, 4843, 5861) in tiles + + +# -- braille canvas ----------------------------------------------------------- + + +def test_canvas_plots_dots_as_braille() -> None: + """A single plotted dot renders as a braille glyph in the top-left cell.""" + canvas = MapCanvas(4, 2) + canvas.plot(0, 0, (255, 0, 0), 1) + out = _plain(canvas.to_ansi_lines()) + assert out.splitlines()[0][0] == "⠁" # braille dot-1 + + +def test_canvas_priority_decides_cell_colour() -> None: + """When dots from two features share a cell, the higher priority sets its colour.""" + canvas = MapCanvas(1, 1) + canvas.plot(0, 0, (10, 20, 30), 1) # low priority + canvas.plot(1, 0, (200, 100, 50), 9) # high priority, same cell + ansi = "".join(canvas.to_ansi_lines()) + assert "38;2;200;100;50" in ansi # the high-priority colour won + assert "38;2;10;20;30" not in ansi + + +def test_canvas_marker_and_label_do_not_overprint() -> None: + """A marker keeps its glyph and places its label in a neighbouring cell.""" + canvas = MapCanvas(20, 3) + canvas.marker(4, 4, "★", (255, 255, 255), label="me") + out = _plain(canvas.to_ansi_lines()) + assert "★" in out and "me" in out + row = out.splitlines()[1] + assert "★me" not in row # a gap sits between the marker and its label + + +def test_canvas_label_collision_is_avoided() -> None: + """A checked label is skipped when it would overlap an already-placed one.""" + canvas = MapCanvas(20, 1) + assert canvas.place_label(10, 0, "First", (200, 200, 200)) + assert not canvas.place_label(10, 0, "Second", (200, 200, 200)) # overlaps → skipped + + +def test_parse_hex() -> None: + """Hex colours parse to RGB triples, with or without the leading hash.""" + assert parse_hex("#38bdf8") == (0x38, 0xBD, 0xF8) + assert parse_hex("ffffff") == (255, 255, 255) + + +# -- compositor over a real tile ---------------------------------------------- + + +def test_render_map_draws_basemap_streets_and_labels() -> None: + """Rendering the real fixture yields braille geometry and a place label.""" + from meshtools.ui.map_render import MapMarker, render_map + + vp = Viewport(45.5019, -73.5674, 14, 180, 120) + layers = decode_tile(_FIXTURE.read_bytes()) + tiles = {(14, 4843, 5861): layers} + markers = [MapMarker("Yagi", 45.5019, -73.5674, is_repeater=True)] + out = _plain(render_map(vp, tiles, markers)) + assert any(0x2800 <= ord(ch) <= 0x28FF for ch in out) # braille was drawn + assert "▲" in out and "Yagi" in out # the repeater marker + label + assert "Montréal" in out # a place label from the tile + + +def test_render_map_prioritises_repeater_glyph() -> None: + """A repeater and a node at the same spot resolve to the repeater's marker on top.""" + from meshtools.ui.map_render import MapMarker, render_map + + vp = Viewport(45.50, -73.57, 14, 60, 40) + markers = [ + MapMarker("node", 45.50, -73.57), + MapMarker("rptr", 45.50, -73.57, is_repeater=True), + ] + out = _plain(render_map(vp, {}, markers)) + assert "▲" in out and "●" not in out + + +def test_render_map_works_without_basemap() -> None: + """With no tiles the nodes still render on a blank grid (the offline fallback).""" + from meshtools.ui.map_render import MapMarker, render_map + + vp = Viewport.fit([(45.5, -73.6), (45.4, -73.5)], 120, 80, max_zoom=14) + markers = [ + MapMarker("A", 45.5, -73.6, is_self=True), + MapMarker("B", 45.4, -73.5, is_repeater=True), + ] + out = _plain(render_map(vp, {}, markers)) + assert "★" in out and "▲" in out + + +# -- basemap source (offline behaviour) --------------------------------------- + + +def test_basemap_source_offline_is_graceful(tmp_path: Path) -> None: + """An unreachable source reports unavailable and returns no tiles, never raising.""" + from meshtools.services.basemap import BasemapSource + + src = BasemapSource(tmp_path / "cache", tilejson_url="http://127.0.0.1:1/none", timeout=0.2) + assert src.available is False + assert src.max_zoom == 14 # sensible default when the TileJSON can't be fetched + assert src.load_tile(14, 4843, 5861) is None + + +def test_basemap_source_reads_cached_tile(tmp_path: Path) -> None: + """A tile already on disk is decoded without any network access.""" + from meshtools.services.basemap import BasemapSource + + cache = tmp_path / "cache" + dest = cache / "tiles" / "14" / "4843" + dest.mkdir(parents=True) + (dest / "5861.pbf").write_bytes(_FIXTURE.read_bytes()) + src = BasemapSource(cache, tilejson_url="http://127.0.0.1:1/none", timeout=0.2) + layers = src.load_tile(14, 4843, 5861) + assert layers is not None + assert any(layer.name == "transportation" for layer in layers) + + +# -- the tool ----------------------------------------------------------------- + + +@pytest.fixture() +def ctx(tmp_path: Path): + """A mock-backed application context with the plain (console) UI surface.""" + from meshtools.context import AppContext + from meshtools.core.admin_store import AdminStore + from meshtools.core.config import Settings + from meshtools.core.device_store import DeviceStore + from meshtools.persistence.repository import Repository + from meshtools.ui.theme import MESH_THEME + + settings = Settings(config_dir=tmp_path, db_path=tmp_path / "map.db") + context = AppContext( + console=Console(file=io.StringIO(), theme=MESH_THEME), + settings=settings, + repo=Repository(settings.db_path), + device_store=DeviceStore(tmp_path / "devices.json"), + admin_store=AdminStore(tmp_path / "admin.json"), + mock=True, + ) + yield context + context.repo.close() + + +def _seed_located_nodes(repo) -> None: + """Record a repeater and a leaf node (each located) plus one node with no fix.""" + run_id = repo.start_run("monitor", {}) + now = utcnow() + repo.record_observation( + run_id, + Observation(node="a1", name="Yagi", node_type=NODE_TYPE_REPEATER, snr=6.0, + lat=45.55, lon=-73.55, observed_at=now), + ) + repo.record_observation( + run_id, + Observation(node="d4", name="Alice", node_type=NODE_TYPE_CHAT, snr=3.0, + lat=45.40, lon=-73.60, observed_at=now + timedelta(seconds=1)), + ) + repo.record_observation( + run_id, Observation(node="c3", name="Bot", node_type=NODE_TYPE_CHAT, snr=1.0) + ) + + +async def test_map_tool_static_render_counts_repeaters(ctx) -> None: + """The CLI path renders located nodes (basemap off) and reports the breakdown.""" + _seed_located_nodes(ctx.repo) + result = await MapTool().run(ctx, {"static": True, "basemap": False}) + assert result.summary["located"] == 2 # the mock companion has no fix (0/0) + assert result.summary["repeaters"] == 1 + assert result.summary["nodes"] == 1 + assert result.summary["self_located"] is False + # Something was rendered into the plain UI surface. + assert ctx.console.file.getvalue() != "" + + +async def test_map_tool_reports_nothing_to_plot(ctx) -> None: + """With no located history the tool returns cleanly instead of rendering.""" + result = await MapTool().run(ctx, {"static": True, "basemap": False}) + assert result.summary == {"located": 0} + + +class _StubSession: + """Minimal stand-in for :class:`TuiSession` for driving :class:`MapScreen`.""" + + def __init__(self, cols: int, rows: int) -> None: + self._cols, self._rows = cols, rows + self.invalidated = 0 + + def base_body_size(self) -> tuple[int, int]: + return self._cols, self._rows + + def invalidate(self) -> None: + self.invalidated += 1 + + +class _StubSource: + """An always-offline tile source, so the screen renders nodes only (no network).""" + + available = False + max_zoom = 14 + + def load_tile(self, z: int, x: int, y: int): + return None + + +def test_map_screen_renders_pans_zooms_and_resets() -> None: + """The interactive screen fills its body, and wasd/zoom/reset move the viewport.""" + from meshtools.core.geo import Viewport + from meshtools.ui.map_render import MapMarker + from meshtools.ui.map_screen import MapScreen + + session = _StubSession(80, 24) + markers = [ + MapMarker("A", 45.50, -73.60, is_repeater=True), + MapMarker("B", 45.40, -73.50), + ] + screen = MapScreen(session, markers, _StubSource(), 14) + + lines = screen.render_body(80) + assert len(lines) == 24 # fills the body height reported by the session + start = screen._viewport + + screen.handle("text", "d") # pan east → longitude increases + assert screen._viewport.center_lon > start.center_lon + screen.handle("text", "w") # pan north → latitude increases + assert screen._viewport.center_lat > start.center_lat + + z = screen._viewport.zoom + screen.handle("text", "=") + assert screen._viewport.zoom == z + 1 + screen.handle("text", "-") + assert screen._viewport.zoom == z + + screen.handle("text", "r") # reset refits to the nodes + refit = Viewport.fit([(m.lat, m.lon) for m in markers], start.dot_w, start.dot_h, max_zoom=14) + assert screen._viewport.zoom == refit.zoom + assert screen._viewport.center_lat == pytest.approx(refit.center_lat) + + # Offline source: nodes still render and both markers are present. + assert "▲" in _plain(screen.render_body(80)) and "●" in _plain(screen.render_body(80)) + assert "offline" in screen.footer_hint + + +def test_map_screen_escape_dismisses() -> None: + """Esc resolves the screen's future with None (backs out to the menu).""" + import asyncio + + from meshtools.ui.map_render import MapMarker + from meshtools.ui.map_screen import MapScreen + + screen = MapScreen(_StubSession(80, 24), [MapMarker("A", 45.5, -73.6)], _StubSource(), 14) + + async def drive() -> object: + screen.future = asyncio.get_running_loop().create_future() + screen.handle("escape") + return await screen.future + + assert asyncio.run(drive()) is None + + +def test_map_observation_round_trips_node_type(ctx) -> None: + """A stored observation's advert type survives persistence and aggregation.""" + run_id = ctx.repo.start_run("monitor", {}) + ctx.repo.record_observation( + run_id, + Observation(node="a1", name="Yagi", node_type=NODE_TYPE_REPEATER, snr=6.0, + lat=45.5, lon=-73.5), + ) + node = next(n for n in ctx.repo.heard_nodes() if n.node == "a1") + assert node.is_repeater and node.node_type == NODE_TYPE_REPEATER