0

我的应用程序使用 openstreetmap 文件在地图上显示航点(或坐标)。

基于 Openstreet 地图文件:如何确定从 GPS 坐标到(步行)路径的最短距离。

我可以读取 OSM(地图)或 .osm 文件...以访问路径吗?

4

2 回答 2

1

有一些误解。首先,OSM 文件不是映射文件。OSM 文件可用于创建一种格式以加快地图渲染速度,例如 mapsforge 格式。

使用例如 GraphHopper,您可以导入 OSM 文件,如 .pbf 或 .osm,然后创建一个可用于您描述的问题的图形。不完全确定你有什么问题;)

于 2014-11-01T22:08:33.030 回答
0

以下解决方案有效:

  • 在您的 IDE 中获取graphhopper 项目。
  • 通过这个非常好的提供者获取原始 Openstreetmap 数据 (.pbf) 。
  • 在你的 (git) bash shell 中运行这个命令: ./graphhopper.sh -a import -i gelderland-latest.osm.pbf
  • 使用这个 pom.xml 文件创建一个新的(maven)项目:

    nl.xyz graphhopper 1.0 系统 ${project.basedir}/libs/graphhopper-web-1.0-SNAPSHOT.jar

  • 将生成的 graphhopper-web-1.0-SNAPSHOT.jar 从 graphhopper 项目复制到新项目的 libs 文件夹中,以便将其包含在您的路径中。

  • 将生成的 graphhopper 数据复制到您的小项目中的文件夹中。

  • 创建这个简单的演示:

    public static void main(String[] args) {
        private static String mapsFolder = "graphhopper-data/yourlocation-latest.osm-gh";
        GraphHopper graphHopper = new GraphHopper().forMobile();
        graphHopper.load(mapsFolder);
        System.out.println("Found graph " + graphHopper.getGraphHopperStorage().toString() + ", nodes:" + graphHopper.getGraphHopperStorage().getNodes());
        QueryResult queryResult = graphHopper.getLocationIndex().findClosest( 52.11111, 6.111111, EdgeFilter.ALL_EDGES);
        double distance = queryResult.getQueryDistance();
        System.out.println( "Shortest distance is: " + distance);
    }
    

更新:由于库版本不匹配,在 Android 上使用 JAR 可能会产生很多编译器错误。让这个例子在 Android 上运行的更好的解决方案是在你的 build.gradle 中使用这个依赖:

implementation 'com.graphhopper:graphhopper-core:1.0-pre33'

结果是您必须设置默认路由配置文件。您可以通过此更改实现:

graphHopper = new GraphHopper().forMobile();
// Next line: 
graphHopper.setProfiles( Collections.singletonList(new ProfileConfig("my_car").setVehicle("car").setWeighting("fastest")));
graphHopper.load(routingDataFolder);

我希望你喜欢这个美妙的“graphhopper”软件!

于 2020-04-14T16:11:25.733 回答