【问题标题】:Graphhopper on Android offline routing pbf file errorAndroid离线路由pbf文件错误的Graphhopper
【发布时间】:2014-07-15 12:58:36
【问题描述】:

我正在尝试创建一个将 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 navigation tips 了解如何导航 10. 将你的 filename.osm 文件复制到 Graphhoper git root 11. $ ./graphhopper.sh 导入文件名.osm 12. 你的 Graphopper git 根文件夹中有文件夹 filename-gh,里面有你需要的一切。 13.将该文件夹复制到您的移动设备 14. 你现在可以使用这样的东西: ` 文件 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

还有两个提示。如果您没有 Grahopper jar (graphhopper-0.3-SNAPSHOT.jar),您可以创建一个: $ ./graphhopper.sh build filename.osm 新 jar 位于 core/target/ 文件夹中

您将需要 trove-3.0.3.jar,您可以下载 here。只需将 trove-3.0.3.jar 从 zip 添加到项目的 libs 文件夹中

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

【问题讨论】:

  • +1 感谢我就是这样做的
  • 命令$ ./graphhopper.sh build filename.osm之后创建的路由数据在哪里?
  • 你的 Graphhopper git 根文件夹中应该有文件夹“filename-gh”,里面有你需要的一切。

标签: android openstreetmap osmdroid graphhopper


【解决方案1】:

您无法在 Android 上导入 xml/pbf(目前)。在 Windows 上查看 the docs 如何通过 cygwin 执行导入。

【讨论】:

  • 嗨 Karussell,我会试试的,我希望这就是答案
  • 好的,我执行了./graphhopper.sh x split-map.osm,该进程构建了 4 个新的 jar 文件:graphhopper-0.3-SNAPSHOT-jar-with-dependencies.jar、graphhopper-0.3-SNAPSHOT-android.jar、graphhopper- 0.3-SNAPSHOT-tests.jar 和 graphhopper-0.3-SNAPSHOT.jar。我期待这个过程会输出ghz文件而不是那些jar?我将它们添加到我项目的 libs 文件夹中。如何用它们初始化 Graphhopper?我是否需要加载更多内容(load(someFilePath) 或 importOrLoad())?
  • Ups,我需要使用./graphhopper.sh import split-map.osm命令从osm文件中提取图形数据。我将尝试将所有内容包装在一起,然后我会接受这个答案。 Tnx
  • graphhopper@openstreetmap.org 这是你的邮件列表吗?
  • 任何人来回答这个问题。在使用 Cygwin 之前,请确保您已安装 Maven 并且您已按照此 maven.apache.org/download.cgi 说明将 Maven 设置为环境变量,否则 Cygwin 命令将不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多