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.
Getting the data
Everything is served over plain HTTPS from https://data.getdescry.com, with no authentication:
-
v4/index.jsonlists every published region:regionId, name, bounding box, totalbytesandtileCount, andmanifestSha256. -
v4/regions/<regionId>/<manifestSha256>.jsonis 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
featurewith grid index(tileX, tileY)is served attiles/features/<tileX>_<tileY>/<sha256>.tfea. Terrain tiles are attiles/dem/<tileX>_<tileY>/<sha256>.tdemandtiles/lod/<tileX>_<tileY>/<sha256>.tdel. -
v4/ATTRIBUTION.txtcarries 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.jsonlists every published region (regionId, name, bounding box). -
regions/<regionId>/manifest.jsonlists every tile in that region, with its kind, grid index, size, and SHA-256. -
Each manifest entry of kind
featurewith grid index(tileX, tileY)is served attiles/features/<tileX>_<tileY>.tfea. Terrain tiles are attiles/dem/<tileX>_<tileY>.tdemandtiles/lod/<tileX>_<tileY>.tdel. -
ATTRIBUTION.txtcarries 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.
| Offset | Type | Field |
|---|---|---|
| 0 | 4 bytes | magic, ASCII TFEA |
| 4 | u16 | format version (4) |
| 6 | u16 | reserved (0) |
| 8 | i32 | tileX |
| 12 | i32 | tileY |
| 16 | u32 | count, 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:
| Offset | Type | Field |
|---|---|---|
| 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.
| Offset | Type | Field |
|---|---|---|
| 0 | 4 bytes | magic, ASCII TFEA |
| 4 | u16 | format version (3) |
| 6 | u16 | reserved (0) |
| 8 | i32 | tileX |
| 12 | i32 | tileY |
| 16 | u32 | count, number of records |
Each record is 30 bytes plus the lengths of its two names:
| Offset | Type | Field |
|---|---|---|
| 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.