我正在尝试创建一个将 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文件导入到我的项目中实现离线路由?
我终于设法解决了这个问题。
我就是这样做的:
- 下载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
有关如何导航,请参阅linux 导航提示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=new File(dir.getAbsolutePath(),"filename-gh");
hopper = new GraphHopper().forMobile();
hopper.setCHShortcuts("fastest");
hopper.load(ghDir.getAbsolutePath());
初始化graphopper
还有两个提示。如果您没有 Graphopper jar (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 文件夹中
我希望我没有忘记任何事情:)