Graphhopper在Android上离线路由pbf文件错误

时间:2014-05-26 17:52:03

标签: android openstreetmap osmdroid graphhopper

我正在尝试创建一个将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
  10. 请参阅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文件夹中

    即可

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

1 个答案:

答案 0 :(得分:2)

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