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 в мой проект для достижения автономной маршрутизации?
Мне наконец удалось решить это.
Вот как я это сделал:
- Скачать Apache Maven
- Прокрутите вниз, чтобы установить инструкцию - раздел Windows, и следуйте инструкциям по установке maven.
- Задайте пользовательскую переменную Enviroment MAVEN_HOME, например: C:\Program Files\Apache Software Foundation\apache-maven-3.2.1. (важно использовать то же значение, что и для M2_HOME)
- Клонируйте Graphopper git на локальный компьютер git или загрузите репозиторий в виде zip и распакуйте его где-нибудь на локальный диск
- Загрузите и установите Cygwin
- Запустить Cygwin
- $ cd / cygdrive /
- Теперь вы находитесь в корневом режиме "ls", чтобы увидеть все диски на компьютере.
- Поместите себя в корень 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.