我正在尝试创建一个将Osmdroid与Graphhoper相结合的应用程序,以实现城市区域的离线路由。我从Open Street Maps导出osm文件并将该文件转换为pbf。问题是应用程序无法加载pbf文件,因为Graphhoper尝试使用Android设备上没有的java.xml.stream来解析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操作系统上。
我没有使用Maven来包含Graphhopper。我将jar插入libs文件夹。
如何将osm文件导入我的项目以实现离线路由?
我终于设法解决了这个问题。
我就这样做了:
$ cd c
$ cd git
$ cd graphhoper
请参阅linux navigation tips了解如何导航 10.将filename.osm文件复制到Graphhoper git root 11. $ ./graphhopper.sh import filename.osm 12.您可以在Graphopper git根文件夹中找到文件夹filename-gh,它们可以满足您的所有需求。 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());
到init graphopper
另外两个提示。如果您没有Graphopper jar(graphhopper-0.3-SNAPSHOT.jar),您可以创建一个:
$ ./graphhopper.sh build filename.osm
新jar位于core / target /文件夹
您需要trove-3.0.3.jar,您可以下载here。只需将zip中的trove-3.0.3.jar添加到项目的libs文件夹中
即可我希望我没有忘记任何事情:)