我正在使用Graphhopper作为我的 Android 项目的路由服务,我想知道如何从 *.osm.pbf 格式中提取街道数据(作为多边形)?
稍后我想使用该数据,以便我可以检测用户是否在该街道的边界内。
编辑:
我已经使用了 Osmosis,因为它在这个答案中被引用(选择高速公路)但是当我尝试在提取后调查 xml 时,我仍然不明白我怎样才能得到一条特定的街道,因为还有一些其他的物体(比如房子,巴士站)。
我正在使用Graphhopper作为我的 Android 项目的路由服务,我想知道如何从 *.osm.pbf 格式中提取街道数据(作为多边形)?
稍后我想使用该数据,以便我可以检测用户是否在该街道的边界内。
编辑:
我已经使用了 Osmosis,因为它在这个答案中被引用(选择高速公路)但是当我尝试在提取后调查 xml 时,我仍然不明白我怎样才能得到一条特定的街道,因为还有一些其他的物体(比如房子,巴士站)。
好吧,我想这里有一些误解,所以我一步一步地满足你的愿望:
OSM 街道数据蚱蜢使用的不是街道多边形(闭合形状),也不是简单的街道线形。它处理纯 OSM 数据并创建所谓的路由图表示。以下是有关导入过程本身的一些信息:https ://github.com/graphhopper/graphhopper/wiki/World-Wide-Road-Network
道路上的用户位置
这称为反向地理编码,对索引结构和模型有不同的要求。OSM 提供Nominatim作为查询 (lat, lon) -> OSM 对象的解决方案。您使用空间缓冲区的想法甚至是可能的,但会产生大量开销(此处为内存)来预处理您的道路网络或根据特定区域的需求进行处理。
街道数据存储在 GraphHopper 中。您可以遍历整个图,例如通过扩展 XFirstSearch,然后在 checkAdjacent 上执行:
boolean checkAdjacent( EdgeIterator iter ) {
PointList pl = iter.fetchGeometry(3);
String name = iter.getName();
}
如果您想从“围栏用例”的位置获得优势,您可以查看 LocationIndexTree。
一些澄清:
路由图通常不包含空间信息
路由图本身不需要这些数据,但我们仍然需要这些数据来显示路线等。
有没有办法在计算过程中为节点添加权重
正如邮件列表中所解释的那样。