首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OSM -在特定的边界框中查找所有可选路由

OSM -在特定的边界框中查找所有可选路由
EN

Stack Overflow用户
提问于 2018-10-22 11:12:32
回答 1查看 320关注 0票数 0

我的目标是得到在特定地区所有可选路线的清单。我想使用OSM来实现这个数据路由意味着从第一个交叉口到第二个交叉口的一对或交叉口。

在图中的例子中:

可选路线如下:

  • 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

到目前为止,我已经在天桥-turbo站点上尝试了这个代码:

代码语言:javascript
运行
复制
[bbox:{{bbox}}];
way[highway~"^(residential)$"]->.minor;
node(w.minor)(w.minor);
out;

输出是交叉点,但是:

  1. 列表并不包含所有的交叉口
  2. 我需要路线=一对交叉口的连接
EN

回答 1

Stack Overflow用户

发布于 2018-10-25 22:03:35

如果您喜欢使用Java,请考虑查看一下Atlas。Atlas是OSM数据的内存表示形式,它允许您创建表示街道网络的图形。有一个阿特拉斯API层,用于连接、路由和空间搜索。针对您的特定需求--有一个路由的概念--它维护OSM方法和节点,指定两个节点之间的路径或路径。有办法得到最优的路线或获得所有可能的路线。

为了开始,我建议如下:

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

加载OSM文件的示例代码:

代码语言:javascript
运行
复制
public class TestAtlasTestRule extends CoreTestRule 
{
    @TestAtlas(loadFromJosmOsmResource = "yourOsmFile.osm")
    private Atlas yourAtlasFile;

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

获取路线的示例代码:

代码语言:javascript
运行
复制
// 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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52927973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档