我正在使用Graphhopper作为我的Android项目的路由服务,我想知道如何从*.osm.pbf格式中提取街道数据(作为多边形)?
稍后我想使用该数据,以便我可以检测用户是否在该街道的边界内。
编辑:
我使用了渗透,因为它在这个答案中被引用(选择高速公路),但是当我在提取后尝试调查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。
一些澄清:
路由路由图通常不包含空间信息
图本身不需要这些数据,但我们仍然需要这些数据来显示路由等。
有没有办法在计算过程中向节点添加权重
如邮件列表中所述。