我正要实施交通模拟。对于道路模型,我使用来自 OpenStreetMap 的数据。这意味着一条道路由几个部分组成,这些部分串在一起。这些部分的起点和终点是已知的。车辆在从起点到终点的向量上移动。曲线由串在一起的多个向量建模。
为了使模拟尽可能逼真,我需要一个检测曲线的概念,以便车辆能够对此做出响应(加速/减速)。还应确定曲线从哪个点开始,哪些切割/属于弯曲的点以及它的结束点。
我如何识别曲线,即使它们包含任意数量的小块?
感谢您的每一个提示!
我正要实施交通模拟。对于道路模型,我使用来自 OpenStreetMap 的数据。这意味着一条道路由几个部分组成,这些部分串在一起。这些部分的起点和终点是已知的。车辆在从起点到终点的向量上移动。曲线由串在一起的多个向量建模。
为了使模拟尽可能逼真,我需要一个检测曲线的概念,以便车辆能够对此做出响应(加速/减速)。还应确定曲线从哪个点开始,哪些切割/属于弯曲的点以及它的结束点。
我如何识别曲线,即使它们包含任意数量的小块?
感谢您的每一个提示!
OSM 的道路由段而不是曲线组成,您无法获得曲线半径。
当然,您可以根据一组路段“猜测”曲线,但您会发现没有通用的方法可以做到这一点,即您的猜测列表中总会有多条曲线,而且它们都不会被真正证明存在。
你甚至不能指望道路的厚度来描述车辆将在其中移动的表面,因为我怀疑这包含在 OSM 的数据中。(更新:请参阅下面用户 scai 的评论)。
首先确保您了解 OSM 的基本要素。有节点、方式和关系。您可以跳过关系,因为它们不包含几何信息(不用于定义道路的多面体除外)。
方式由两个或多个节点定义。每种方式都引用了它所属的所有节点。每个节点都有坐标和对其所属所有方式的引用。这意味着一个节点也可以属于多个方式。例如,如果它位于一条路的尽头,那么它将属于所有先前的路以及所有接下来的路。或者它位于一条路中间的某个地方,它引用了所有交叉路,因为一条路不一定要在一个路口结束。
因此,一条曲线可以由一种或多种方式组成。因此,为了检测曲线,您必须同时查看连续节点和连续路径。您必须计算每两个连续节点之间的路段。连续节点之间的距离和连续路段之间的角度是确定这是曲线还是直线的基础。