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.
Getting the data
Everything is served over plain HTTPS from https://data.getdescry.com/v2, 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 below.
Together, the feature tiles of all regions listed in the index are the entire derivative database. The format specification below documents each record: coordinates, elevation, kind, flags, importance score, and name.
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.
Reading the feature tiles
All integers and floats are little-endian, with no padding. Coordinates are WGS84 decimal degrees; elevations are meters above the EGM2008 geoid.
Tile grid
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 (2) |
| 6 | u16 | reserved (0) |
| 8 | i32 | tileX |
| 12 | i32 | tileY |
| 16 | u32 | count, number of records |
Each record is 26 bytes plus the length of its name:
| 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 | nameLen, 0 if unnamed |
| 26 | nameLen bytes | name, UTF-8 |
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. Records are sorted by descending score.
Manifests
Each entry in a region's manifest.json 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.