读取OSM地图(或其他格式)文件以确定从坐标到路径的最短距离



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

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

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

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

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

以下解决方案有效:

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

    nl.xyz石墨料斗1系统${project.basedir}/libs/graphopper-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);
    }
    

UPDATE:在Android上使用JAR可能会由于库版本不匹配而导致大量编译器错误。让这个例子在Android上运行的一个更好的解决方案是在你的构建中使用这个依赖项

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"软件!

相关内容

  • 没有找到相关文章

最新更新