Skip to content

Releases: thepriben/dataroads-FR84

v0.17.13

Choose a tag to compare

@thepriben thepriben released this 26 Aug 22:14

Two loads of tiles were being fetched where one is read, and the connection to the tile server was opened later than it needed to be.

Changed

  • The map opens at its final framing, and so loads one set of tiles instead of two. It used to open at a zoom written into the source, then reframe itself on the department as soon as the boundary arrived — two views, therefore two levels of tiles, the first of which was fetched entirely and replaced without ever being read. On a 1440-wide window that was 31 tiles where 16 suffice, and on a phone 17 where 6 do. The extent of Vaucluse is known in advance, since it already bounds which tiles may be requested, so the final framing is now worked out before any tile layer exists, when moving the map costs nothing. A second waste sat next to it: the framing was measured by actually running the fit and reading the resulting zoom, which stopped the map at an intermediate scale long enough for the basemap to ask for that scale's tiles. It is now computed rather than tried, by the same arithmetic Leaflet itself uses, so the framing is unchanged to within a pixel.
  • The connection to the Géoplateforme is opened while the page is still parsing. The first tile cannot leave before the scripts have run and the map exists — 1.3 s on the deployed site — and until then the name lookup and the TLS handshake had not been done either.

Notes

  • A lighter basemap was looked for and does not exist on these terms. Measured against IGN Plan at 87 KB and 0.65 s per tile: CARTO Positron is 10 KB and 0.09 s, Esri Light Gray 3.5 KB and 0.09 s. Neither can be used — CARTO stamps "API KEY REQUIRED" across the tiles it serves without one, and Esri has required an account since April 2022 for the legacy endpoints that still answer. Asking the Géoplateforme for JPEG instead of PNG returns HTTP 400: the layer is PNG only. The remaining gains are on our side of the wire, which is where the two changes above are.

See the full CHANGELOG.

v0.17.12

Choose a tag to compare

@thepriben thepriben released this 26 Aug 21:51

A day spent on the ground beneath the map: leaving CARTO, trying vector, and coming back to raster with the department cut out of it.

Changed

  • The basemap left CARTO, which now stamps "API KEY REQUIRED" across its raster tiles. Measured on roughly four out of five tiles, at every zoom from 8 to 20. The free key offered in exchange never arrived.
  • After a detour through OpenFreeMap vector tiles, the ground is raster again, served by the Géoplateforme IGN Plan — keyless, quota-free, and the reference map of the French state, which suits a departmental council. Vector was the wrong trade for a map of one department: its tiles weigh 189 KB apiece at zoom 8 against 59 KB for a raster tile, none shows until MapLibre has redrawn it whole, and MapLibre itself is a megabyte of JavaScript to fetch before the first image appears. Zooming out sat waiting on 2 268 KB where it now takes 175 KB. MapLibre GL and its Leaflet plugin have left the page, WebGL with them.
  • Nothing is drawn outside Vaucluse, and nothing is fetched there either. The tile frame is a rectangle and the department is not, so the boundary is painted once into an offscreen canvas and every tile asks that mask whether it has anything to show: corner tiles are never requested, eleven instead of sixteen at the default view. What still spills past the frontier is covered by a flat sober colour, carried by the map container as well so the edge of the frame never shows. Zooming out below the point where the department fills the view is no longer possible.
  • The IGN Plan is desaturated on the way in. A fine map and a talkative one — green relief, orange motorways, park outlines — none of which belongs behind accident clusters and traffic counts. A CSS filter takes the colour out, which the compositor does for free.

Added

  • A waiting screen holds the map until it is actually there. The Géoplateforme takes around 0.8 s per tile, so the map area used to sit as a bare flat colour, indistinguishable from a page that had given up. A spinner now names what is being waited for, over the map only so the legend and header stay readable, and fades once both the tiles and the boundary are in place.

Fixed

  • Opening a signpost no longer wipes the layer off the map. Clicking a directional signpost, then moving the map, left it bare at any zoom: the layer recognised its open popup through map._popup, which Leaflet leaves pointing at the last popup long after it is closed, so the layer was frozen from the very first click. The same fault silenced the stop signs, the agglomeration signs and the webcams.

See the full CHANGELOG.

v0.10.0

Choose a tag to compare

@thepriben thepriben released this 22 Jul 23:45

Added

  • Native Waze traffic layer (issue #10). The "W" button can now render community Waze traffic as a real Leaflet layer instead of only the iframe: jam lines coloured by severity (level/speed) and incident markers (💥 accident, ⚠️ hazard, 🚧 roadworks, ⛔ road closed, 👮 police), with click-through popups (road, speed, delay, freshness). It activates automatically when a Waze for Cities partner feed is configured.
  • WAZE_FEED_URL secret + data/external/waze.geojson pipeline. scripts/update_external_data.py now fetches the official partner feed (alerts + jams) and converts it to GeoJSON on the usual 3 h schedule. Without the secret it writes a configured:false placeholder and the front-end keeps the Live Map iframe as a fallback.

Changed

  • The Waze toolbar button dynamically chooses native layer vs. iframe fallback; tooltip updated accordingly.

Notes

  • The unofficial Waze live-map endpoint returns HTTP 403 to datacenter IPs (GitHub Actions included) and cannot be scraped server-side, so the native layer is fed by the legal, server-reachable Waze for Cities feed. See README ("Activer la couche Waze native").

See the full CHANGELOG.

v0.9.0

Choose a tag to compare

@thepriben thepriben released this 22 Jul 23:13

Added

  • Multi-year accidentology cloud (BAAC / ONISR): the road-safety layer now shows 2019→2024 injury crashes geolocated across the Vaucluse (1,923 points) instead of the single 2024 vintage. Inspired by loicbertrand.eu/accidents, it uses a dual visual encoding — colour = recency (recent crashes vivid/saturated orange, older ones dark red) and size = severity (fatal > hospitalised > slight). Points are drawn on a Leaflet canvas renderer for smoothness.
  • Temporal dataviz in the legend: an old→recent colour scale, a per-year histogram of crash counts (colour-coded by recency), and a year-range slider (from / to) that filters the cloud live; per-severity counters update to the selected range.
  • scripts/build_accidents_vaucluse.py: reproducible builder that resolves the BAAC resource URLs via the data.gouv API (handling the inconsistent file names, incl. the carcteristiques typo), downloads Caractéristiques + Usagers per year, filters department 84, joins the worst per-accident severity, resolves commune names via geo.api.gouv.fr, and emits a compact data/static/accidents-vaucluse.geojson.

Notes

  • BAAC geolocation is patchier for older millésimes, so the cloud is denser on recent years — which also reinforces the "evolution over time" reading.

See the full CHANGELOG.

v0.8.1

Choose a tag to compare

@thepriben thepriben released this 21 Jul 23:14

Changed

  • Waze toolbar button is now a compact "W" glyph button (matching the Mapillary "M" and Panoramax "P" buttons), placed to the left of the "M" button; its active state turns cyan while the live-map modal is open.

See the full CHANGELOG.

v0.6.0

Choose a tag to compare

@thepriben thepriben released this 21 Jul 21:43

Added

  • Real-time Waze traffic layer (issue #10): new "Waze" toolbar button opening the official Waze Live Map embed in a modal, showing community-reported jams and incidents in real time. The iframe is lazy-loaded and centred on the current map view when opened, and unloaded on close so it never polls in the background. Waze exposes no open data API for arbitrary areas, so this is the embed-based approach (no credentials); a Waze for Cities (CCP) feed could later add native markers if the department obtains one.

See the full CHANGELOG.

v0.4.0

Choose a tag to compare

@thepriben thepriben released this 22 Jun 01:07

Added

  • New compact Panoramax "P" toolbar button (vector-tile coverage traces), next to the Mapillary "M".
  • New "Panneaux directionnels" layer (OSM information=guidepost, ~2000 nodes in Vaucluse): clustered when zoomed out, real signposts at zoom ≥ 15, destination list in the popup, and a nearby Mapillary photo (green ring) when coverage exists — same behaviour as the stop/give-way layer.
  • update_osm_geojson.py now accepts dataset name arguments to refresh a single cache (e.g. python scripts/update_osm_geojson.py guideposts).

Changed

  • Mapillary toolbar button shrunk to a compact stylised "M" to save toolbar space.
  • Guidepost markers redesigned as real fingerposts (post + pointed direction blades, green dot for nearby Mapillary coverage) so they no longer look like speed/size limitation signs.
  • Limitations: speed pictograms are now clustered when zoomed out (click a cluster to zoom in) and shown individually at zoom ≥ 13, so they are visible from the base zoom without cluttering the map.
  • Limitations: size/weight restriction pictograms (height, width, weight, length) are now included in the same clusters as speed signs, and de-duplicated by type + value + ~1 km (like speed) so a sign carried by several overlapping way-segments no longer escapes the clusters as a stray picto.
  • Limitations: dimension icons made semantically consistent — max width is now a horizontal arrow (↔️), max height a vertical arrow (↕️) and max length a ruler (📏).
  • "Comptages CD84" toolbar button renamed to "Comptages"; "Panneaux directionnels" legend title now stacks "directionnels" as a smaller grey subtitle.
  • Comptages (traffic-count stations) recoloured on a cherry-red (high traffic) → light-pink (low traffic) gradient.
  • Panoramax accent colour switched to violet across the bridge viewer, photo markers and source dots.
  • Left-column legend sections are now clearly delimited cards with a dark contour, so each feature's start/end is obvious at a glance.
  • Removed the bridge hint text entirely ("Activez la couche, puis cliquez un pont." / "Cliquez un pont pour ouvrir la vue 3D.").

Removed

  • "Convois exceptionnels" toolbar button hidden and disconnected (redundant with the road-hierarchy filters, little added value).
  • "Sources photo" section (Panoramax 84 / Mapillary) removed from the left column to reduce clutter.

See the full CHANGELOG.

v0.3.7

Choose a tag to compare

@thepriben thepriben released this 12 Jun 05:01

Fixed

  • iNaturalist clicks still missed intermittently with ENS visible: map snap-to-nearest observation, ENS pointer-events re-applied after pan/zoom, and explicit popup on marker click.

See the full CHANGELOG.

v0.3.5

Choose a tag to compare

@thepriben thepriben released this 12 Jun 05:00

Changed

  • iNaturalist markers use a 40px hit target on the marker pane (above ENS polygons); visual dots are 14–16px.
  • Incubator bridge freshness label aligned with the real bi-weekly OSM GeoJSON workflow (Mon & Thu).
  • User guide and bridge zoom hint updated for current cluster/geometry behaviour.

Fixed

  • iNaturalist observations were hard to click when ENS zones were visible: enlarged targets and correct layer stacking.

See the full CHANGELOG.

v0.3.4

Choose a tag to compare

@thepriben thepriben released this 12 Jun 03:46

Fixed

  • Blank basemap after page refresh with bridges active: stop clearing Carto tiles on every zoom end; recover with a soft layout check instead of redraw().

See the full CHANGELOG.