Graphhopper на Android в автономном режиме маршрутизации Pbf файла ошибка

Я пытаюсь создать приложение, которое объединяет Osmdroid с Graphhoper для достижения автономной маршрутизации в городской местности. Я экспортировал файл osm из Open Street Maps и преобразовал этот файл в pbf. Проблема в том, что приложение не может загрузить файл pbf, потому что Graphhoper пытается проанализировать файл pbf, используя java.xml.stream, который недоступен на устройствах Android. Вот функция, которую я использую для загрузки файла pbf.

    public void setRouting(){
    File dir = new File(Environment.getExternalStorageDirectory(),"osmdroid");
    File osmFile=new File(dir,"offline-map.osm.pbf");

    if(!osmFile.exists()){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("File doesn't exist").setTitle("Error");
        AlertDialog dialog = builder.create();
        dialog.show();
        return;
    }


    GraphHopper hopper = new GraphHopper().forMobile();
    hopper.setEncodingManager(encodingManager);
    hopper.setGraphHopperLocation(getApplicationContext().getFilesDir().getPath());
    hopper.setOSMFile(osmFile.getAbsolutePath());
    hopper.setCHShortcuts("fastest");
    hopper.importOrLoad();
}

Я знаю, что можно преобразовать osm в ghz (что работает в моем случае): https://github.com/graphhopper/graphhopper/blob/0.3/docs/android/index.md но я не могу выполнить это:

./graphhopper.sh import <your-osm-file>    

на ОС Windows.

Я не использую Maven для включения Graphhopper. Я вставил банку в папку libs.

Как я могу импортировать файл osm в мой проект для достижения автономной маршрутизации?

Мне наконец удалось решить это.

Вот как я это сделал:

  1. Скачать Apache Maven
  2. Прокрутите вниз, чтобы установить инструкцию - раздел Windows, и следуйте инструкциям по установке maven.
  3. Задайте пользовательскую переменную Enviroment MAVEN_HOME, например: C:\Program Files\Apache Software Foundation\apache-maven-3.2.1. (важно использовать то же значение, что и для M2_HOME)
  4. Клонируйте Graphopper git на локальный компьютер git или загрузите репозиторий в виде zip и распакуйте его где-нибудь на локальный диск
  5. Загрузите и установите Cygwin
  6. Запустить Cygwin
  7. $ cd / cygdrive /
  8. Теперь вы находитесь в корневом режиме "ls", чтобы увидеть все диски на компьютере.
  9. Поместите себя в корень Graphhopper git. то есть для c:\git\graphopper: $ cd c $ cd git $ cd graphhoper

см. советы по навигации в Linux. 10. Скопируйте ваш файл filename.osm в корень git Graphhoper 11. $ ./graphhopper.sh import filename.osm 12. У вас должна быть папка filename-gh в корневой папке git Graphopper, в которой есть все тебе нужно. 13. Скопируйте эту папку на ваше мобильное устройство. 14. Теперь вы можете использовать что-то вроде этого: ` File dir = new File(Environment.getExternalStorageDirectory(),"map-parent-folder-name"); Файл ghDir= новый файл (dir.getAbsolutePath(),"filename-gh");

hopper = new GraphHopper().forMobile();
hopper.setCHShortcuts("fastest");
hopper.load(ghDir.getAbsolutePath());

инициировать графоппер

Еще два совета. Если у вас нет фляги Graphopper (graphhopper-0.3-SNAPSHOT.jar), вы можете создать ее с помощью: $ ./graphhopper.sh build filename.osm новый jar находится в папке core/target/

Вам понадобится trove-3.0.3.jar, который вы можете скачать здесь. Просто добавьте trove-3.0.3.jar из zip в папку libs вашего проекта

Я надеюсь, что я ничего не забыл:)

1 ответ

Решение

Вы не можете импортировать xml/pbf на Android (пока). Когда вы находитесь в Windows, посмотрите документы, как выполнить импорт через Cygwin.

Другие вопросы по тегам