/photon

an open source geocoder for openstreetmap data

Primary LanguageJava

photon

Photon is an open source geocoder built for OpenStreetMap data. It is based on elasticsearch - an efficient, powerful and highly scalable search platform.

Photon was started by komoot and provides search-as-you-type and multilingual support. It's used in production with thousands of requests per minute at www.komoot.de. Find our public API and demo on photon.komoot.de.

We are a very young project, feel free to test and participate! The previous version based on solr is accessible in the deprecated solr branch.

Features

  • high performance
  • highly scalability
  • search-as-you-type
  • multilingual search
  • location bias
  • typo tolerance
  • OSM data import (built upon Nominatim) inclusive continuous updates

Installation

photon requires java, at least version 6.

get photon

wget http://photon.komoot.de/data/photon-0.1.2.jar

download search index (31 gb compressed, 66 gb uncompressed, worldwide, languages: English, German, French and Italian)

wget http://photon.komoot.de/data/photon_data_140706.tar.bz2
lbzip2 -d photon_data_140706.tar.bz2 
tar xf photon_data_140706.tar

start photon

java -jar photon-0.1.2.jar

Check the URL http://localhost:2322/api?q=berlin to see if photon is running without problems. You may want to use our leaflet plugin to see the results on a map.

discover more of photon's feature with its usage java -jar photon-0.1.2.jar -h.

Customized Search Data

If you need search data in other languages or restricted to a country you will need to create your search data by your own. Once you have your nominatim database ready, you can import the data to photon:

java -jar photon-0.1.2.jar -nominatim-import -host localhost -port 5432 -database nominatim -user nominatim -password ...

The import of worldwide data set will take some hours/days, ssd disk are recommended to accelerate nominatim queries.

A nominatim setup is also a requirement to have continuous updates. To keep in sync with the latest OSM changes run:

export NOMINATIM_DIR=/home/nominatim/...
./continuously_update_from_nominatim.sh

Search API

Start Photon

java -jar photon-0.1.2.jar

Search

http://localhost:2322/api?q=berlin

Search with Location Bias

http://localhost:2322/api?q=berlin&lon=10&lat=52

Adapt Number of Results

http://localhost:2322/api?q=berlin&limit=2

Adjust Language

http://localhost:2322/api?q=berlin&lang=it

Results as GeoJSON

{
  "features": [
    {
      "properties": {
        "name": "Berlin",
        "country": "Germany",
        "osm_key": "place",
        "osm_value": "city",
        "osm_type": "N",
        "osm_id": 240109189
      },
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          13.3888599,
          52.5170365
        ]
      }
    },
    {
      "properties": {
        "name": "Berlin Olympic Stadium",
        "street": "Olympischer Platz",
        "housenumber": "3",
        "postcode": "14053",
        "country": "Germany",
        "osm_key": "leisure",
        "osm_value": "stadium",
        "osm_type": "W",
        "osm_id": 38862723,
        "extent": [
          13.23727,
          52.5157151,
          13.241757,
          52.5135972
        ]
      },
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          13.239514674078611,
          52.51467945
        ]
      }
    }]
  }

Metrics

Photon's search configuration was developed with a specific test framework. It is written in Python and hosted separately.

Contact

Let us know what you think about photon! Create a github ticket or drop us an email in https://lists.openstreetmap.org/listinfo/photon

Licence

Photon software is open source and licensed under Apache License, Version 2.0