4

我正在尝试创建一个将 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文件导入到我的项目中实现离线路由?

我终于设法解决了这个问题。

我就是这样做的

  1. 下载Apache Maven
  2. 向下滚动到安装说明 - Windows 部分并按照 Maven 安装步骤操作
  3. 设置环境用户变量 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 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 文件夹中

我希望我没有忘记任何事情:)

4

1 回答 1

3

您无法在 Android 上导入 xml/pbf(还)。当您在 Windows 上时,请查看文档如何通过 cygwin 执行导入。

于 2014-05-26T23:43:20.077 回答