Permalink
17fc239 Nov 26, 2016
@karussell @devemux86
115 lines (74 sloc) 4.76 KB

Get Demo

Download GraphHopper Demo APK

simple routing

Set-up Development

As starting point you can use the demo project which can be used directly from Android Studio and NetBeans via gradle or maven.

Before the installation fetch the source, the OpenStreetMap data and the dependencies:

$ git clone git://github.com/graphhopper/graphhopper.git graphhopper
$ cd graphhopper
$ ./graphhopper.sh import your-area.pbf

Android Studio

Please read here for a detailed instruction.

None-Android Studio

Download the Android SDK and go to the Android SDK Manager and install the latest SDK.

Maven or NetBeans

  1. Download Maven Android SDK Deployer and execute mvn install -P 5.1 - it uses Android Maven Plugin under the hood where you need to set up ANDROID_HOME
  2. Now do ./graphhopper.sh android

Gradle

$ cd graphhopper/android
$ ./gradlew clean build
# push to device, start manually
$ gradle installDebug

Maps

Now that you have a running Android app you need to copy the routing and maps data to the device.

  1. Download the raw openstreetmap file - you'll need that for the next step to create the routing data
  2. Execute ./graphhopper.sh import <your-osm-file>. This creates the routing data
  3. Download a map e.g. berlin.map
  4. Copy berlin.map into the created berlin-gh folder
  5. Optional Compression Step: Bundle a graphhopper zip file via cd berlin-gh; zip -r berlin.ghz *
  6. Now copy the berlin-gh folder from step 4 (or the .ghz file from step 5) to your Android device. /[download-folder]/graphhopper/maps, where the download-folder can e.g. be /mnt/sdcard/download or /storage/sdcard/Download/ - e.g. use SSHDroid: scp -P 2222 berlin.ghz root@$URL:/mnt/sdcard/download/graphhopper/maps/

Apps

Pocket Maps

The open source Android App Pocket Maps using GraphHopper and Mapsforge. It stands under MIT

Locus Add-On

The developer of Locus has create a routing plugin for locus the source code for the add-on is available here and could be useful for other Map-apps too. The discussion is here.

Cruiser App

The free offline map app Cruiser is using GraphHopper routing and allows also other things.

Frameworks

OSMBonusPack

The OSMBonusPack supports the GraphHopper Routing API via a GraphHopperRoadManager and also provides map tile integration for various providers.

GraphHopper Directions API

The GraphHopper Directions API Java client supports fetching the route and instructions from official and custom servers.

Limitations

  • You have to create the graphhopper folder on your desktop and copy it to the Android storage.

  • A memory bound a* algoritm is not yet implemented so you can use disableShortcuts only for small routes.

Problems

If you encounter problems like 'trouble writing output: Too many methods: 72332; max is 65536.' or you want to reduce the size of the jar/apk size you can try to apply autojar on hppc:

java -jar autojar-2.1/autojar.jar -o trove4j-stripped.jar -c $TROVE_SRC/target/classes @class.list

where class.list is a file with the required classes for GraphHopper as content:

com.carrotsearch.hppc.IntArrayList
com.carrotsearch.hppc.IntObjectHashMap.class
com.carrotsearch.hppc.IntHashSet
com.carrotsearch.hppc.IntLongHashMap
com.carrotsearch.hppc.IntContainer
com.carrotsearch.hppc.LongHashSet
com.carrotsearch.hppc.LongObjectHashMap
com.carrotsearch.hppc.ObjectIntAssociativeContainer
com.carrotsearch.hppc.ObjectIntHashMap
com.carrotsearch.hppc.HashOrderMixing
com.carrotsearch.hppc.HashOrderMixingStrategy
com.carrotsearch.hppc.cursors.IntCursor
...

Example

Routes for areas of up to 500km^2 are calculated in under 5s with the help of Contraction Hierarchies

simple routing