Osmdroid と Graphhoper を組み合わせて都市部でのオフライン ルーティングを実現するアプリケーションを作成しようとしています。Open Street Maps から osm ファイルをエクスポートし、そのファイルを pbf に変換しました。問題は、Graphhoper が Android デバイスでは使用できない java.xml.stream を使用して pbf ファイルを解析しようとするため、アプリケーションが pbf ファイルのロードに失敗することです。これは、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 OS で。
Graphhopper を含めるために Maven を使用していません。jar を libs フォルダーに挿入しました。
osm ファイルをプロジェクトにインポートして、オフライン ルーティングを実現するにはどうすればよいですか?
私はついにこれを解決することができました。
これが私がやった方法です:
- Apache Maven をダウンロード
- インストール手順 - Windows セクションまで下にスクロールし、maven のインストール手順に従います
- 環境ユーザー変数 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 root に配置します。つまり、c:\git\graphopper の場合:
$ cd c $ cd git $ cd graphhoper
10. filename.osm ファイルをGraphhoper git root にコピーします。 11. $ ./graphhopper.sh import filename.osm 12. Graphopper git root フォルダーに filename-gh というフォルダーがあり、すべてが含まれています。あなたが必要です。13. そのフォルダーをモバイル デバイスにコピーします。 14. 次のようなものを使用できます。File ghDir=new File(dir.getAbsolutePath(),"filename-gh");
hopper = new GraphHopper().forMobile();
hopper.setCHShortcuts("fastest");
hopper.load(ghDir.getAbsolutePath());
グラフホッパーを初期化する
さらに2つのヒント。Graphopper jar (graphhopper-0.3-SNAPSHOT.jar) がない場合は、以下を使用して作成できます。
$ ./graphhopper.sh build filename.osm
新しい jar は core/target/ フォルダーにあります。
ここからダウンロードできる trove-3.0.3.jar が必要です。zip から trove-3.0.3.jar をプロジェクトの libs フォルダーに追加するだけです。
何も忘れていないことを願っています:)