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

时间:2014-11-01 09:56:23

标签: openstreetmap android-maps graphhopper

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

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

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

2 个答案:

答案 0 :(得分:1)

有一些误解。首先,OSM文件不是映射文件。 OSM文件可用于创建格式以使地图呈现快速,例如mapsforge格式就是这样做的。

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

答案 1 :(得分:0)

以下解决方案有效:

  • 在您的IDE中获取graphhopper project
  • 通过此very nice provider获取原始的Openstreetmap数据(.pbf)。
  • 在您的(git)bash shell中运行以下命令:./graphhopper.sh -a import -i gelderland-latest.osm.pbf
  • 使用此pom.xml文件创建一个新的(maven)项目:

    nl.xyz 蚱hopper 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'软件!