Geography data

Descry's peak, pass, saddle, and ridge feature tiles are a derivative database of OpenStreetMap data, © OpenStreetMap contributors. The complete derivative database is publicly available, in the same form the app downloads, under the Open Database License (ODbL) 1.0.

Licenses

  • Feature tiles (.tfea): derived from OpenStreetMap, © OpenStreetMap contributors, and made available under the ODbL 1.0. If you publicly use or redistribute this database, or a work produced from it, the ODbL's attribution and share-alike terms apply to you.
  • Terrain tiles (.tdem, .tdel): produced using Copernicus WorldDEM-30, © DLR/Airbus DS, provided under Copernicus by the European Union and ESA, and subject to the Copernicus DEM terms. They contain no OpenStreetMap data.

Getting and reading the data

The data is published in more than one tile format while older app versions still read the older ones. Each format below is complete on its own; pick the newest unless your tooling reads an older one.

Tile format

Getting the data

Everything is served over plain HTTPS from https://data.getdescry.com, with no authentication:

  • v4/index.json lists every published region: regionId, name, bounding box, total bytes and tileCount, and manifestSha256.
  • v4/regions/<regionId>/<manifestSha256>.json is that region's manifest, named by its own SHA-256. It lists every tile in the region with its kind, grid index, size, and SHA-256.
  • Every tile is named by its SHA-256 too. A manifest entry of kind feature with grid index (tileX, tileY) is served at tiles/features/<tileX>_<tileY>/<sha256>.tfea. Terrain tiles are at tiles/dem/<tileX>_<tileY>/<sha256>.tdem and tiles/lod/<tileX>_<tileY>/<sha256>.tdel.
  • v4/ATTRIBUTION.txt carries the notices above.

Nothing but index.json ever changes. When a region is rebuilt, its new tiles and manifest are published beside the old ones and its index entry points at the new manifest, so a mirror only ever needs to fetch files it does not have.

Getting the data

Everything is served over plain HTTPS from https://data.getdescry.com/v3, with no authentication:

  • index.json lists every published region (regionId, name, bounding box).
  • regions/<regionId>/manifest.json lists every tile in that region, with its kind, grid index, size, and SHA-256.
  • Each manifest entry of kind feature with grid index (tileX, tileY) is served at tiles/features/<tileX>_<tileY>.tfea. Terrain tiles are at tiles/dem/<tileX>_<tileY>.tdem and tiles/lod/<tileX>_<tileY>.tdel.
  • ATTRIBUTION.txt carries the notices above.

Format 3 is frozen: it receives no new regions, and stays up until no app version reads it.

Together, the feature tiles of all regions listed in an index are the entire derivative database. The rest of this section documents each record: coordinates, elevation, kind, flags, importance score, and names.

Tile grid

All integers and floats are little-endian, with no padding. Coordinates are WGS84 decimal degrees; elevations are meters above the EGM2008 geoid. Each .tfea file covers one 0.25° × 0.25° cell, indexed from the south-west corner of the world: tileX = floor((lon + 180) / 0.25), tileY = floor((lat + 90) / 0.25). Every feature lies inside its own cell, so each feature appears in exactly one tile.

File layout

A 20-byte header, followed by count records packed back to back.

OffsetTypeField
04 bytesmagic, ASCII TFEA
4u16format version (4)
6u16reserved (0)
8i32tileX
12i32tileY
16u32count, number of records

Each record starts with its own length, so fields added later are skipped by readers that do not know them. Offsets are from the start of the record:

OffsetTypeField
0 u16 recordBytes, the bytes that follow in this record. Read the fields below, then skip to 2 + recordBytes for the next record.
2 f64 latitude
10 f64 longitude
18 i16 elevation, meters
20 u8 kind: 0 peak, 1 saddle, 2 pass, 3 ridge point
21 u8 flags, see below
22 f32 importance score, higher is more notable
26 u16 topographic prominence, meters; 0 if unknown (peaks only)
28 u16 nameLen, 0 if unnamed
30 nameLen bytes name, UTF-8: the OpenStreetMap name
30 + nameLen u16 nameEnLen, 0 if absent
32 + nameLen nameEnLen bytes English name, UTF-8: name:en, only when it differs

File layout

A 20-byte header, followed by count records packed back to back.

OffsetTypeField
04 bytesmagic, ASCII TFEA
4u16format version (3)
6u16reserved (0)
8i32tileX
12i32tileY
16u32count, number of records

Each record is 30 bytes plus the lengths of its two names:

OffsetTypeField
0 f64 latitude
8 f64 longitude
16 i16 elevation, meters
18 u8 kind: 0 peak, 1 saddle, 2 pass, 3 ridge point
19 u8 flags, see below
20 f32 importance score, higher is more notable
24 u16 topographic prominence, meters; 0 if unknown (peaks only)
26 u16 nameLen, 0 if unnamed
28 nameLen bytes name, UTF-8: the OpenStreetMap name
28 + nameLen u16 nameEnLen, 0 if absent
30 + nameLen nameEnLen bytes English name, UTF-8: name:en, only when it differs

Flags: bit 0 means the feature has an OpenStreetMap name; bit 1 means OpenStreetMap had no usable elevation, so it was sampled from the terrain model; bit 2 means the OpenStreetMap elevation and the terrain model disagree by more than 30 m; bit 3 means the feature has a Wikidata or Wikipedia tag; bit 4 means the prominence is OpenStreetMap's own prominence tag; bit 5 means a computed prominence is only a lower bound. Ridge points are samples every 250 m along a named ridge or arête, each carrying the ridge's name. Records are sorted by descending score, then ascending latitude and longitude.

Manifests

Each entry in a region's manifest has a kind (feature, dem, or coarse), a tileX and tileY, the file's size in bytes, and a sha256 of the file as served. Neighbouring regions can share tiles.