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



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

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

编辑

我使用了渗透,因为它在这个答案中被引用(选择高速公路),但是当我在提取后尝试调查xml时,我仍然不明白如何获得特定的街道,因为还有一些其他物体(如房屋,公共汽车站)。

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

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

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

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

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

如果你想从"围栏用例"的位置获得边缘,你可以看看LocationIndexTree。

一些澄清:

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

路由

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

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

如邮件列表中所述。

相关内容

  • 没有找到相关文章

最新更新