在Openstreetmap中将街道提取为多边形

时间:2013-12-19 11:55:37

标签: android routing openstreetmap graphhopper

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

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

修改

我已经使用了Osmosis,因为它在this回答(选择高速公路)中被引用但是当我尝试在提取后调查xml时我还是不明白我怎么能得到一条特定的街道,因为还有一些剩下的其他物品(如房屋,公共汽车站)。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

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

如果您希望从“fence-use-case”的位置获得边缘,您可以查看LocationIndexTree。

一些澄清:

  

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

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

  

有没有办法在计算期间为节点添加权重

正如mailing list所述。