Kurshalter
Email us

Chart data

Kurshalter chart data: sources and recipe

Licence of the derived databases

The chart tiles and offline packs contain data derived from OpenStreetMap, available under the Open Database License (ODbL) 1.0.

Our derived databases — the base, seamarks, zones and pois vector tilesets, the per-region pois.sqlite search index and the nav routing grid — are themselves available under the ODbL 1.0. They are publicly conveyed at our tile endpoint (tiles.kurshalter.com), which the app downloads them from; nothing in the app or our terms restricts extracting the OpenStreetMap-derived data from them. The bathymetry tileset is derived from EMODnet Bathymetry (CC BY 4.0) with an OpenStreetMap-derived water mask. The rendered map itself is a Produced Work: © OpenStreetMap contributors.

This page is the "method" offer of ODbL §4.6(b): the recipe below, together with the input versions recorded per build (see Build metadata), describes how each derived database is made.

Inputs

InputWhat we takeVersion / pinning
Protomaps daily basemap buildsworld basemap tiles (Protomaps basemap schema v4), extracted per region — never hotlinkedpinned daily build key (e.g. 20260819, schema 4.15.2); recorded per build
OpenStreetMap via Geofabrik extractsseamark:* objects, regulated water areas, nautical POIs, inland waterwayscountry/state -latest extracts; download URL and date recorded per build
EMODnet Bathymetry DTM 2024mean-depth grid for European seasDOI 10.12770/cf51df64-56f9-4a99-b1aa-36b8d7b743a1, CC BY 4.0
OSM water polygons (osmdata.openstreetmap.de)coastline/water mask for bathymetry and the routing gridwater-polygons-split-4326 snapshot; download date recorded per build
Curated overrides (our own)hand-drawn zone/POI corrections (e.g. legally signposted speed limits)versioned with the pipeline; geometry derived from OSM ways → treated as ODbL

Recipe per derived database

All jobs run in a Docker image around osmium, tippecanoe, GDAL and pmtiles; per-region clipping uses our region polygons (GeoJSON). Output format is PMTiles.

base (vector tiles)

Extract the region (plus, for production, a low-zoom world layer) from the pinned Protomaps daily build with pmtiles extract; merge the disjoint zoom ranges. No schema changes — the tiles keep the Protomaps basemap v4 schema.

seamarks (vector tiles)

Geofabrik PBF(s) → osmium extract to the region polygon → osmium tags-filter for seamark:* objects → osmium export (GeoJSONSeq, all tags) → normalisation into seamark_point / seamark_line / seamark_area layers with a symbol vocabulary → tippecanoe per layer (zoom- and density-dependent) → tile-join.

zones (vector tiles)

Same extract step, then two filters: (a) seamark:type zone areas (restricted areas, separation schemes, military/caution areas, anchorages, dumping grounds, cable/pipeline areas, fairways), (b) waterways/water areas with maxspeed or boating access restrictions. Normalisation derives kind/severity/speed limit, merges curated overrides (override wins), buffers restricted waterway lines into corridors, clips to the region → tippecanoe (polygons, z5–14).

pois (vector tiles + pois.sqlite)

Same extract step → filter nautical POI candidates (harbours, marinas, anchorages, moorings, fuel, locks, bridges, boatyards, slipways, …) plus nearby water features → normalisation (kind/symbol, centroids, dedupe, curated overrides, clip) → tippecanoe (points, z7–14, per-kind minzoom) and an SQLite index (poi + FTS + geo tables) for offline search.

bathy (vector tiles)

EMODnet DTM 2024 → depth raster (depth = -elevation where below sea level) → clip to an OSM-water mask (water polygons + coastal buffer) → cubic interpolation onto a ~25 m metric grid with clamping to source cells, coastal-gap fill and a 0 m shoreline anchor → gdal_contour for depth areas (min/max bands) and depth contours → validation, smoothing and clipping → soundings sampled from the original raster → tippecanoe per layer → tile-join. Interpolated areas are flagged (src=emodnet-interp).

The autorouting grid combines the outputs above: EMODnet depth raster, OSM water polygons and inland waterways, normalised zones, fairway/track seamarks and bridge/lock POIs → rasterised into web-mercator tiles (z6/z9/z12, 256×256 cells, 1 byte per cell: depth class, hard-blocked, soft-restricted, preferred/fairway, constraint flags) plus a constraints JSON (bridge/lock clearances). Unknown depth is treated as shallow; hard-blocked zones are never crossed.

Offline packs

A region pack is the same derived databases packaged per region (the region's PMTiles, pois.sqlite, nav-constraints.json and region polygon) — no additional transformation, so everything above applies to packs unchanged.

Build metadata

Every pipeline run writes a <tileset>.job.json next to its output recording the exact inputs of that build (Protomaps build key, Geofabrik URLs, EMODnet source, osmdata snapshot), tool versions, output checksums and timings. The data manifest the app downloads carries the resulting per-tileset versions and attribution; the About screen in the app shows the loaded data versions. Per-build input versions are therefore reproducible for every published tileset and pack.

Not for navigation

All chart data is open data and not for navigation. It can be incomplete, outdated or wrong — verify with official charts and publications.