Geocoders¶
Geocoding is the ability to match an input string representing a location - such as an address - to geographical coordinates. Reverse geocoding is logically the opposite, matching geographical coordinates to names of places.
This is needed to set correct address for events, and more easily find events with geographical data, for instance if you want to discover events happening near your current position.
However, providing a geocoding service is quite expensive, especially if you want to cover the whole Earth.
Hardware setup
To give an idea of what hardware is required to self-host a geocoding service, we successfully installed and used Addok, Pelias and Mimirsbrunn on a 8 cores/16GB RAM machine without any issues importing only European addresses and data.
Advised provider
We had best results using the Pelias geocoding provider.
Change geocoder¶
To change geocoder backend, you need to add the following line in your config file:
config :mobilizon, Mobilizon.Service.Geospatial,
service: Mobilizon.Service.Geospatial.Nominatim
Nominatim
to one of the supported geocoders. Depending on the provider, you'll also need to add some special config to specify eventual endpoints or API keys. For instance, when using Mimirsbrunn
, you'll need the following configuration:
config :mobilizon, Mobilizon.Service.Geospatial,
service: Mobilizon.Service.Geospatial.Mimirsbrunn
config :mobilizon, Mobilizon.Service.Geospatial.Mimirsbrunn,
endpoint: "https://my-mimir-instance.tld"
List of supported geocoders¶
This is the list of all geocoders supported by Mobilizon. The current default one is Nominatim and uses the official OpenStreetMap instance.
Nominatim¶
Nominatim is a GPL-2.0 licenced tool to search data by name and address. It's written in C and PHP and uses PostgreSQL. It's the current default search tool on the OpenStreetMap homepage.
Terms
When using the official Nominatim OpenStreetMap instance (default endpoint for this geocoder if not configured otherwise), you need to read and accept the Usage Policy.
Limitations
Autocomplete is not possible using Nominatim, you'll obtain no suggestions while typing.
Several companies provide hosted instances of Nominatim that you can query via an API, for example see MapQuest Open Initiative.
Default configuration
config :mobilizon, Mobilizon.Service.Geospatial.Nominatim,
endpoint: "https://nominatim.openstreetmap.org",
api_key: nil
Addok¶
Addok is a MIT licenced search engine for address (and only address). It's written in Python and uses Redis. It's used by French government for adresse.data.gouv.fr.
Terms
When using France's Addok instance at api-adresse.data.gouv.fr
(default endpoint for this geocoder if not configured otherwise), you need to read and accept the GCU (in French).
Default configuration
config :mobilizon, Mobilizon.Service.Geospatial.Addok,
endpoint: "https://api-adresse.data.gouv.fr"
The default endpoint is limited to France. Geo coding outside of France will return an empty result. Moreover, as France is implicit for this endpoint, country is not part of the result. To conform to Provider
interface, this provider return "France" as the country.
If plugged to another endpoint, in another country, it could be useful to change the default country. This can be done in your config file:
change endpoint default country
config :mobilizon, Mobilizon.Service.Geospatial.Addok,
endpoint: "https://another-endpoint.tld"
default_country: "Country"
Photon¶
Photon is an Apache 2.0 licenced search engine written in Java and powered by ElasticSearch.
Terms
The terms of use for the official instance (default endpoint for this geocoder if not configured otherwise) are simply the following:
You can use the API for your project, but please be fair - extensive usage will be throttled. We do not guarantee for the availability and usage might be subject of change in the future.
Default configuration
config :mobilizon, Mobilizon.Service.Geospatial.Photon,
endpoint: "https://photon.komoot.io"
Pelias¶
Pelias is a MIT licensed geocoder composed of several services written in NodeJS. It's powered by ElasticSearch.
There's Geocode Earth SAAS that provides a Pelias API. They offer discounts for Open-Source projects. See the pricing.
Configuration example
config :mobilizon, Mobilizon.Service.Geospatial.Pelias,
endpoint: nil
Mimirsbrunn¶
Mimirsbrunn is an AGPL-3.0 licensed geocoding written in Rust and powered by ElasticSearch.
Mimirsbrunn is used by Qwant Maps.
Default configuration
config :mobilizon, Mobilizon.Service.Geospatial.Mimirsbrunn,
endpoint: nil
Google Maps¶
Google Maps is a proprietary service that provides APIs for geocoding.
They don't have a free plan, but offer credit when creating a new account. See the pricing.
Default configuration
Note
fetch_place_details
tells Google Maps to also fetch some details on a place when geocoding. It can be more expensive, since you're doing two requests to Google instead of one.
config :mobilizon, Mobilizon.Service.Geospatial.GoogleMaps,
api_key: nil,
fetch_place_details: true
MapQuest¶
MapQuest is a proprietary service that provides APIs for geocoding.
They offer a free plan. See the pricing.
Default configuration
config :mobilizon, Mobilizon.Service.Geospatial.MapQuest,
api_key: nil
Hat (combine Nominatim and Addok)¶
The Hat geocoder combines Nominatim and Addok results.
Nominatim is very efficient for points of interest and Addok is very efficient for postal addresses in France.
Default configuration
There is no configuration for this geocoder. But it relies on the configuration of the two combined geocoders: Nominatim and Addok.
More geocoding services¶
Geocoding implementations are simple modules that need to implement the Mobilizon.Service.Geospatial.Provider
behaviour, so feel free to write your own!