PeakNav
| PeakNav | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Author: | Francesco Bonazzi | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| License: | GNU GPL (free of charge) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Platforms: | Android, iOS, Windows, macOS, and Linux | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Status: | Active | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Version: | 1.3.2 (2026-09-21) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Languages: | English, German, Italian, French, Spanish, Portuguese, and Norwegian
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Website: | https://peaknav.com | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Install: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Source code: | Upabjojr/PeakNavApp GitHub | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Programming language: | Java | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
3D mountain viewer for offline usage. Keywords: 3D, hiking, skiing, outdoor, map viewer, OSM viewer, OpenStreetMap. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||


PeakNav is an open source app, currently supporting Android, iOS and desktop computers running Windows, macOS or Linux, to view the world's mountains in 3D and display OpenStreetMap data on top of the 3D view, as well as satellite imagery.
The focus of PeakNav is to allow users to download all local data on their devices, so that the app can be used while hiking or skiing even without internet connection.
PeakNav allows peak identification and drapes roads, tracks, paths and ski pistes over the mountains, easing the exploration of routes with a full 3D view of the surrounding area.
Features
Terrain and labels
- Peak identification — named summits from natural=peak are labelled in the 3D view with their elevation, in metres or feet, including over a photograph taken with the device camera.
- Place, hut and area labels — places, alpine huts, lakes and named areas such as islands, cities, regions and mountain ranges are labelled, appearing at a distance proportional to their size and relevance. A single switch hides or shows every label at once.
- Offline by design — map and elevation data are downloaded per region and stored on the device; no connection is needed once an area has been fetched. When the view reaches an area with nothing downloaded, the app offers to download it.
- Satellite imagery — OpenStreetMap data can be overlaid on several satellite and aerial imagery sources instead of the plain shaded relief.
- Sky — day and night sky rendering with named stars, constellations, the sun and the moon (including eclipses), a celestial grid and the ecliptic, for the time you choose.
Roads, trails and pistes
- Roads, tracks and trails drawn on the GPU — highways, tracks and paths are drawn by the terrain shader from a distance field, so they stay sharp however close the camera comes and can be restyled without redrawing any tile. Trails are coloured by their SAC scale the way a paper hiking map grades them: yellow for hiking, red for mountain hiking, blue for alpine routes.
- Names along the way — street names, path names and waymarked route numbers (ref) are written along their own way and de-cluttered so they never overlap; route numbers sit on a plate in the trail's colour, like a waymark.
- Ski pistes — downhill runs (piste:type=downhill) are painted blue, red or black by piste:difficulty, with a band flowing down the slope and their names along them. The data comes from the OpenSnowMap extract.
- Ski lifts — aerialways are drawn with their carriers moving uphill, each kind its own way: cable cars, gondolas, chairlifts, drag lifts and magic carpets, labelled with their names.
- PeakNav's own map engine — the tile grid, coordinates and map-data types are written for the app; it no longer depends on Mapsforge. Because the new engine runs on every platform, iOS shows roads and paths too.
Routes and tracks
- Route to here — tap a point on the terrain and PeakNav finds a walking route to it from where you stand, along the roads, tracks and paths of the downloaded data, entirely offline. Motorways, ways under construction and ways closed to the public (access) are avoided unless foot access is granted. Walking time follows the slope ([{{FULLURL:w:Tobler's hiking function:{{{2}}}}} {{{2}}}] on Wikipedia), so the route prefers the quicker way round a hill over the shorter one across it. The result opens as a GPX track.
- GPX tracks and tours — recorded tracks can be loaded from a file or a URL and drawn over the terrain, and the camera can fly along a track as a cinematic tour, with a marker showing where along the track it is and a scrub bar to move through it.
- Track statistics — distance, walking time, ascent and descent, highest and lowest point, a height profile and, for recorded tracks, a speed graph.
- Save or share a track — a route made in the app, or a track opened from the web, can be saved as a .gpx file or sent through the system share sheet.
- Orbiting — the camera can orbit around any tapped point, circling a summit or a valley to view it from all sides.
Search
- Offline place search over GeoNames place names, with no query leaving the device; a half-typed name is enough ("Matterh" finds the Matterhorn).
- World's well-known mountains — about 7,000 peaks, volcanoes and ranges from Wikidata, with their country, so Everest, Kilimanjaro or Denali can be found by name.
- Online search through Nominatim, with results in the app's language (see Multilingual names) rather than only in the local script.
- Coordinates in almost any form — decimal degrees, degrees-minutes-seconds, hemisphere letters, geo: URIs, OpenStreetMap and Google Maps links, WKT and more.
Photos and sensors
- Photo positioning — coordinates are read from a JPEG's Exif data, so an existing photo can set the viewpoint.
- Automatic photo positioning — an algorithm will attempt to recognize the skyline ridge in the pictures and match it with the simulated data ridge.
- Sensors — compass and gyroscope orient the view to match where the device is pointing; devices without a compass use the gyroscope alone.
Interface
- Available in English, German, Italian, French, Spanish, Portuguese and Norwegian, following the device's language.
- A slideshow of what the app does on the welcome screen and while the first map data downloads, and an in-app tutorial.
- Phone-sized buttons and text on tablets; on iOS and Android the frame rate drops while nothing on the map moves, to save battery.
Installation
- Android — Google Play, or the .apk on Wikipedia attached to the GitHub releases for installation without an app store.
- iOS — App Store, for iPhone and iPad.
- Windows, macOS and Linux — GitHub releases. Each download is self-contained and bundles its own Java runtime, so no separate JVM installation is required: an installer for Windows, a .dmg on Wikipedia for macOS (Intel and Apple silicon), and a .deb on Wikipedia package plus an AppImage on Wikipedia for Linux. A plain .jar, needing Java 8 or later, covers other systems such as ARM Linux.
- Python —
pip install peaknavfrom PyPI; see below.
Python package
The peaknav Python package exposes PeakNav's data and rendering to scripts and notebooks:
- Elevation queries —
peaknav.terrainreturns the elevation of any coordinate on Earth in pure Python, reading the same compressed elevation dataset the app renders (with summit heights corrected against surveyed values); tiles are downloaded per area and cached locally. - Headless rendering —
peaknav.headlessdrives the real PeakNav renderer off-screen through a REST API: camera control, view options (including road names and satellite imagery) and rendered frames, usable for scripted snapshots, panoramas and videos of the terrain. The renderer never opens a dialog; anything it would have asked is reported instead. - Jupyter widget (experimental) —
peaknav.jupyterprovides an interactive 3D view inside a Jupyter on Wikipedia notebook, with pan/tilt controls, altitude and display toggles, driven entirely over the renderer's REST API (pip install peaknav[jupyter]).
Views


Datasets
PeakNav relies on datasets specifically compressed and optimized for devices with low computational power (such as mobile phones), currently hosted on HuggingFace:
- retiled OpenStreetMap data, extracted from the planet file; it also carries the ski pistes and lifts, from the OpenSnowMap extract
- retiled NASA/ASTER global elevation data
Both are cut into slippy map tiles, so only the tiles covering the area of interest are transferred and stored. The elevation dataset can also be read directly from Python through the peaknav package described above.
See also
- 3D — rendering OpenStreetMap data in three dimensions
- Offline — using OpenStreetMap data without a connection
- Hiking — mapping hiking trails and the tags PeakNav colours them by
- Winter sports and OpenSnowMap — ski pistes and lifts in OpenStreetMap
- Tag:natural=peak — the tag PeakNav labels
- Key:sac_scale — the trail difficulty grades
- Key:piste:difficulty — the piste colours
- Routing — route planning with OpenStreetMap data
- Comparison of Android applications
- Comparison of iOS applications