Atlasr is a truly open-source and free map browser. The goal is threefold:
- Learn about all the layers and components that make a map,
- Provide a ready-to-use set of tools to build a 100% open-source, free, and standalone map browser,
- Provide an alternative service to the famous Google Maps or Apple Maps, with no ads, with respect to user privacy, with 100% open-source and free data, and the top 10 features of Google Maps.
A map architecture is composed of the following components:
- Map data, A giant database containing all information about roads, trails, cafés, railway stations, buildings etc. The biggest major project is OpenStreetMap,
- Tile server, A program that, given a specific region, reads
the map database and compiles those information in a certain
format like
.mbtiles
for instance. Each region of a planet is named a tile. A tile is defined by a longitude, a latitude, and a zoom (an altitude scale), - Map renderer, A program that, given a set of tiles,
renders/draws a map, so each roads, buildings etc. finally come
alive at this step. A map renderer requires at least the following
components:
- Tile decoder to decode the tiles received from the tile server,
- Styles to know how to draw the data from the map (e.g. “roads must be blue with a white strike”),
- Fonts to render texts,
- Icons to represent some places with an image (like hospitals, police stations, parcs etc.).
- Geocoding, A program that can find the longitude and the latitude of a labellised element on earth, like a postal address, a building name, or a river name for examples,
- Routing, A program that is able to find a path/route between one or many points (longitude + latitude) given some constraints (like the vehicule type, the road preference etc.). A route preferably comes with descriptions, like “Turn right in 100m”, “Follow A10 for 7km” etc.
Obviously, each component comes with thousands of details and constraints. The previous list is a high overview of how it works.
The open-source map ecosystem is mature. Many projects already exist to address one component of the map architecture. However, a mainstream tool that combined all these projects, based on 100% open-source and free data, is still missing. Atlasr aims to be the response to this problem.
The quality must be comparable with Google Maps or Apple Maps:
- Smooth and fast experience,
- Reliable data,
- Beautiful design for the map and the UI.
The main technologies are the following: Rust for the server, Elm for the client, and PostgreSQL/SQLite for the databases.
The actual roadmap is the following:
- Map data, all data comes from OpenStreetMap,
- Tile server [
source/api/tile/
]:- Vector tiles are pre-computed by OpenMapTiles, which relies on OpenStreetMap.
- Format is
.mbtiles
, - Solid and robust tile server.
- Map renderer [
source/map-style
]:- Use Mapbox GL JS to render the map,
- Elm ports to Mapbox GL (JavaScript) for the Web UI,
- Use OSM Liberty for the style, forked to remove the dependencies to external services, and to use only “local” data,
- Icons/sprites,
- Fonts.
- Geocoding [
source/api/geocode
]: - Routing [
source/api/route/
]:- Delegate all the works to GraphHopper, only use the
open-source API. API to use:
- Routing API,
- Isochrone API.
- Delegate all the works to GraphHopper, only use the
open-source API. API to use:
- HTTP server [
source/server/
]:- Fast and robust HTTP server between the client and all the API.
- Client/Web UI [
source/client
]:- Mobile-first,
- Smooth and fast,
- Search one or many positions (geocoding),
- Search a route (routing),
- Search a route with constraints,
- Enhance data with Wikipedia (photos, descriptions, metadata etc.),
- All links are sharable,
- More features.
Current focus: The current hard work is to provide all map components as local and standalone instances. Everything has been addressed except the fonts in the map renderer (yet).
Next focus: Replace the top 10 features on Google Maps.
-
Map renderer: The tiles, the style, the icons, everything comes from Atlasr. No external service is used.
-
Geocoding and Routing: Atlasr is able to geoencode 2 postal addresses, and find a route between the two:
just
is required to run all the commands. Run just --list
to get an overview of all the commands.
-
Tile server:
$ # Install API tile server. $ just install-api-tile $ # Run the tile server. $ just run-api-tile
-
Geocoding:
$ # Download the data, install the indexer, and install the search engine. $ just install-api-geocode $ # Run the geocoding server. $ just run-api-geocode-searcher
-
Routing:
$ # Install the geocoding server. $ just install-api-route $ # Run the geocoding server. $ just run-api-route
-
Client/Web UI:
$ # Install the HTTP server for the client. $ just install-server $ # Run the HTTP server for the client. $ just run-server $ # Install the Web UI, its dependencies, and prepare the frontend. $ just install-client $ # Open the client. $ just open
Enjoy!
The entire project is under the BSD-3-Clause license. Please read the
LICENSE
file.