Skip to main content

Achievement geographic data and artwork

This guide covers Dawarich 1.20.0.

Pinned pilot: germany-pilot-20261028-v1, public OpenStreetMap data fetched on 2026-10-28. Attribution: © OpenStreetMap contributors, ODbL 1.0. The bundled GeoJSON is a derived database distributed under ODbL 1.0. Preserve this notice, source identities and attribution when redistributing it.

Stable OSM relationKindBoundary
62422cityBerlin, administrative level 4 (city state)
62782cityHamburg, administrative level 4 (city state)
191645cityDresden, administrative level 6
90584parkHarz National Park
1595534parkSaxon Switzerland National Park
2345991parkEifel National Park

source.overpass selects these exact identities. The original retrieval used name queries, followed by a corrected Dresden level-6 query; unrelated level-8 Dresden matches were discarded. Each feature retains its OSM version and edit timestamp, and the bundle retains the Overpass database timestamp. No user location or history was sent to a geodata service. Runtime uses only local files. This is a curated regional pilot, not a worldwide or complete German catalog.

The external maintenance toolkit’s build_achievement_catalog.rb assembles outer/inner relation ways with PostGIS ST_BuildArea, preserves holes, validates geometry and positive area, serializes seven decimal places and writes deterministic gzip (mtime=0) and a SHA-256 manifest. Run it with saved public Overpass JSON inputs on an isolated local PostGIS database, through TOOLING/run-tool --app-root /path/to/dawarich build_achievement_catalog.rb <saved-inputs>. It performs no network requests. A relation with missing member geometry must be corrected before use.

To add or update boundaries: review official administrative/protection status, keep one canonical relation per place (never duplicate nested boundaries), update manifest.json and the source query, rebuild the bundle and checksum, and bump both Exploration::Catalog::VERSION and Exploration::Geography::VERSION. Update UI catalog descriptions and regional coverage. Never change geometry under an existing version. Subject code is an explicit internal identity: retain it even if OSM replaces a relation, and update only its source osm_id. Renaming a source must not mint another card. Check holes, coastal water, administrative forests/outskirts, valid IANA timezones, actual point membership and overlapping parks before release.

At installation, Exploration::Catalog verifies checksums/version and clips city land to the same Natural Earth 5.1.2 land/water mask used by exploration. Small water bodies absent at 1:10m remain a known approximation. Park time uses actual points within the OSM boundary, never cell intersection. Historical snapshots keep their dataset until a complete replacement is published.

Geographic milestone globe artwork​

globes.json contains display-only SVG paths for an equatorial view and two views tilted 55° toward the north/south pole. Continents use the existing local Natural Earth 5.1.2 land geometry, simplified by 0.18° and omitting islands below 500 km² for legibility. It is an illustration, never an eligibility or area input. The asset records its export SHA-256, source/version and generator version.

The maintenance toolkit is provided separately from the application repository. Set TOOLING to its extracted directory and select the application’s pinned Ruby, Rails environment and isolated PostGIS database with installed geography. run-tool resolves file arguments from the caller’s working directory and targets only the application given by --app-root:

"$TOOLING/run-tool" --app-root /path/to/dawarich export_achievement_globe_land.rb tmp/achievement-globe-land.geojson
npm install --prefix "$TOOLING" --no-save --ignore-scripts --no-audit --no-fund [email protected]
"$TOOLING/run-tool" --app-root /path/to/dawarich build_achievement_globes.mjs tmp/achievement-globe-land.geojson

Instead of installing D3 again, DAWARICH_TOOLING_D3_ROOT can point to an existing external d3-geo directory.

The build uses D3's orthographic projection and spherical clipping, graticules and region polygons. D3 is only a pinned build tool installed in the external toolkit; no runtime/npm dependency or network call is added to the app. RFC7946 polygon winding is adapted to D3's spherical convention. Natural Earth source data remains public domain. The polar highlight uses the fixed 66.56° game latitude; GlobeArtwork checks that the bundled value matches the rule.

The same global continent outlines, grid and explicit region separators appear in fallback SVG, the Spectral material and social PNGs. Completed hemispheres keep contrasting tints; quarters keep four tints. Unsupported regions stay dark. Polar cards retain the whole globe and highlight just the cap. Colors and separators are illustrative; credit remains based solely on recorded evidence.

The shared silhouette contract adds optional details layers: path, fill, stroke, stroke_width in viewBox units, and opacity. They render above the unvisited mask so the global frame remains readable. Fallback SVG stores these as data-detail attributes; hydration normalizes coordinates and stroke width with the same transform as the main geometry. The client accepts M/L/Z paths, none or six-digit hex paints, finite widths from 0 to 2, and opacity from 0 to 1; raw markup, external paint servers and invalid attributes are rejected.