Graphhopper - как установить профиль маршрутизации 'foot' - PullRequest
0 голосов
/ 15 апреля 2020

Как мне установить профиль маршрута 'foot'? Используя профиль по умолчанию 'автомобиль', я не могу рассчитать расстояние между любым местом (в лесу) и близлежащей тропинкой.

Я получаю сообщение об ошибке:

> 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/

Мой код:

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());

Используются ли данные маршрутизации? Сначала я получил необработанный файл OSM через http://download.geofabrik.de/europe/netherlands/gelderland.html. После этого я подготовил данные маршрутизации Graphhopper с помощью команды:

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

ОБНОВЛЕНИЕ: этого достаточно? Я пытаюсь:

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

1 Ответ

1 голос
/ 15 апреля 2020

Проблема заключалась в том, что Graph (т.е. файлы маршрутизации, сгенерированные graphhopper) не были выровнены с настройками конфигурации в приложении.

В ответе ниже я хотел иметь средство маршрутизации для ног, велосипедов и автомобилей. Конечно, можно получить только маршрут только для одного типа «транспортного средства». Я проверил это также для профиля маршрутизации "ноги".

Чтобы получить это выравнивание, я сначала отредактировал файл config.yml в клоне проекта graphhopper . В файле конфигурации я изменил:

graph.flag_encoders: foot,bike,car

и:

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

и

profiles_ch:
  - profile: foot

Я сгенерировал данные графика с помощью этой команды:

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

Тогда важно настроить приложение с тем же профилем. Таким образом, даже работа только с профилем «foot» в вашем приложении приведет к несоответствию - именно так, как следует из сообщения об ошибке.

Приложение содержит этот код для измерения расстояния любой точки до пути:

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);
...