graphhopper

Graphhopper - how to set the routing profile 'foot'


How can I set the route profile 'foot'? Using the default profile 'car' I can't calculate the distance between any location (in the woods) and a nearby footpath.

The error message I get is:

> Encoding does not match: Graphhopper config:
> foot|speed_factor=1.0|speed_bits=4|turn_costs=false|version=5 Graph:
> car|speed_factor=5.0|speed_bits=5|turn_costs=false|version=2 Change
> configuration to match the graph or delete ...
> gelederland-latest.osm-gh/

My code is:

graphHopper = new GraphHopper().forMobile();
EncodingManager encodingManager = EncodingManager.create( FlagEncoderFactory.FOOT);
graphHopper.setEncodingManager(encodingManager);
graphHopper.setProfiles(Arrays.asList( new ProfileConfig("my_foot").setVehicle("foot").setWeighting("fastest")));
graphHopper.load(getRoutingDataFolder());

The routing data I use? First I retrieved the raw OSM file via http://download.geofabrik.de/europe/netherlands/gelderland.html. Afterwards I prepared the Graphhopper routing data via the command:

./graphhopper.sh -a import -i gelderland-latest.osm.pbf

UPDATE: does this suffice? I am trying:

./graphhopper.sh -a import -p foot,bike,car -i netherlands-latest.osm.pbf  

Solution

  • The issue was that the Graph (i.e. the graphhopper generated routing files) were not aligned with the config settings in the app.

    In the answer below I wanted to have a routing facility for both foot, bike and car. It is of course possible to get only routing for only 1 type of 'vehicle'. I tested this also for the routing profile 'foot'.

    To get this alignment, I first edited the config.yml file in a clone of the graphhopper project. In the config file I changed:

    graph.flag_encoders: foot,bike,car
    

    and:

    profiles:
      - name: foot
        vehicle: foot
        weighting: fastest
    

    and

    profiles_ch:
      - profile: foot
    

    I generated the Graph data with this command:

    ./graphhopper.sh -a import -p foot,bike,car -i netherlands-latest.osm.pbf  
    

    Then it is important to config your app with the same profile. So even working with only the 'foot' profile in your app will give a mismatch -- exactly as the error message suggests.

    The app contains this code for measuring the distance of any point to a path:

    graphHopper = new GraphHopper().forMobile();
    EncodingManager encodingManager = EncodingManager.create( FlagEncoderFactory.FOOT + "," + FlagEncoderFactory.BIKE + "," + FlagEncoderFactory.CAR);
    graphHopper.setEncodingManager(encodingManager);
    graphHopper.setProfiles(Arrays.asList(
            new ProfileConfig("my_foot").setVehicle("foot").setWeighting("fastest"),
            new ProfileConfig("my_bike").setVehicle("bike").setWeighting("fastest"),
            new ProfileConfig("my_car").setVehicle("car").setWeighting("fastest")));
    graphHopper.load(routingDataFolder);