我的应用程序使用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"软件!