0

我正在使用Graphhopper作为我的 Android 项目的路由服务,我想知道如何从 *.osm.pbf 格式中提取街道数据(作为多边形)?

稍后我想使用该数据,以便我可以检测用户是否在该街道的边界内。

编辑

我已经使用了 Osmosis,因为它在这个答案中被引用(选择高速公路)但是当我尝试在提取后调查 xml 时,我仍然不明白我怎样才能得到一条特定的街道,因为还有一些其他的物体(比如房子,巴士站)。

4

2 回答 2

2

好吧,我想这里有一些误解,所以我一步一步地满足你的愿望:

  1. OSM 街道数据蚱蜢使用的不是街道多边形(闭合形状),也不是简单的街道线形。它处理纯 OSM 数据并创建所谓的路由图表示。以下是有关导入过程本身的一些信息:https ://github.com/graphhopper/graphhopper/wiki/World-Wide-Road-Network

  2. 道路上的用户位置
    这称为反向地理编码,对索引结构和模型有不同的要求。OSM 提供Nominatim作为查询 (lat, lon) -> OSM 对象的解决方案。您使用空间缓冲区的想法甚至是可能的,但会产生大量开销(此处为内存)来预处理您的道路网络或根据特定区域的需求进行处理。

于 2013-12-20T06:54:09.297 回答
0

街道数据存储在 GraphHopper 中。您可以遍历整个图,例如通过扩展 XFirstSearch,然后在 checkAdjacent 上执行:

boolean checkAdjacent( EdgeIterator iter ) {
   PointList pl = iter.fetchGeometry(3);
   String name = iter.getName();
}

如果您想从“围栏用例”的位置获得优势,您可以查看 LocationIndexTree。

一些澄清:

路由图通常不包含空间信息

路由图本身不需要这些数据,但我们仍然需要这些数据来显示路线等。

有没有办法在计算过程中为节点添加权重

正如邮件列表中所解释的那样。

于 2013-12-22T13:08:57.117 回答