OSM-在特定的边界框中找到所有可选路线

时间:2018-10-22 11:12:32

标签: openstreetmap overpass-api

我的目标是获取特定区域中所有可选路线的列表。 我想使用OSM来获取此数据 路线是指可以从第一个路口驶向第二个路口的成对路口。

在图片的情况下: RouteExample: 可选路线为:

  • 1-2,1-4
  • 2-1,2-3,2-5
  • 3-2,3-6
  • 4-1、4-5
  • 5-4,5-2,5-6
  • 6-5、6-3

到目前为止,我已经在overpass-turbo网站中尝试了以下代码:

[bbox:{{bbox}}];
way[highway~"^(residential)$"]->.minor;
node(w.minor)(w.minor);
out;

输出是交叉点,但是:

  1. 列表不包含所有交集
  2. 我需要路线=交叉点对的连接

1 个答案:

答案 0 :(得分:0)

如果您愿意使用Java,请考虑看看Atlas。 Atlas是OSM数据的内存表示形式,它使您可以创建表示街道网络的图形。有一个用于连接,路由和空间搜索的Atlas API层。根据您的特定需求-Route的概念-维护OSM路径和节点,该路径和节点指定了两个节点或路径之间的路径。有一些方法可以获取最佳路线或获取所有可能的路线。

要开始使用,我建议以下内容:

  1. 设置并熟悉Atlas项目
  2. 提取具有感兴趣区域的OSM或PBF文件
  3. 从PBF创建Atlas文件,运行适用的路由算法

加载OSM文件的示例代码:

public class TestAtlasTestRule extends CoreTestRule 
{
    @TestAtlas(loadFromJosmOsmResource = "yourOsmFile.osm")
    private Atlas yourAtlasFile;

    public Atlas getAtlasFile()
    {
        return this.yourAtlasFile;
    }
}

获取路线的示例代码:

// To get the shortest route
final Route shortestRoute = AStarRouter.dijkstra(yourAtlasFile, distanceThreshold).route(startNode, endNode);

// To get all the routes
final Set<Route> allRoutes = AllPathsRouter.allRoutes(startEdge, endEdge, comparatorThatEnforcesRouteOrdering);