2014-05-15 28 views
2

我正要實施交通模擬。對於道路模型,我使用來自OpenStreetMap的數據。這意味着一條路由幾個部分組成,它們串聯在一起。這些部分的起點和終點是已知的。車輛在從起點指向終點的矢量上移動。曲線由串聯在一起的多個向量建模。爲了使仿真儘可能逼真,我需要一個檢測曲線的概念,以便車輛可以對此進行響應(加速/減速)。還應該確定曲線在哪一點開始,屬於彎曲的哪些切割/點以及它的結束點。如何在交通模擬中獲得曲線半徑?

如何識別曲線,即使它們包含任意數量的小型單件?

感謝您的每一個提示!

+1

您可能還想看看[eWorld](http://eworld.sf.net)模擬器以及他們如何實現此任務。 – MaM

回答

0

首先確保您瞭解OSM的基本elements。有節點,方式關係。您可以跳過關係,因爲它們不包含幾何信息(multipolygons不用於定義道路)。

Ways由兩個或多個nodes定義。每種方式都有一個對它所屬的所有節點的引用。每個節點都有座標和對其所有方式的引用。這意味着節點也可以屬於多種方式。例如,如果它處於一種方式的末尾,那麼它將屬於以前的所有方式以及所有下一種方式。或者它處於某種方式的中間,因爲方式不一定要在交叉點結束。

因此曲線可以由一種或多種方式組成。所以爲了檢測曲線,你必須同時查看連續的節點和連續的方式。您必須計算每兩個連續節點之間的路段。連續節點之間的距離和連續路段之間的角度是確定這是曲線還是直線的基礎。

2

OSM的道路是由段而不是曲線組成的,你不能得到曲線半徑

當然,您可以根據一組路段「猜測」曲線,但是您會發現沒有通用的方法來執行此操作,即在猜測列表中總是會有多條曲線,而且它們都不會真正被證明存在。

因爲我懷疑這包含在OSM的數據中,您甚至不能指望道路的厚度來描述車輛將要移動的表面。 (更新:請參閱下面的用戶scai的評論)。

+0

..當然,OSM從*模擬*真實世界中獲取數據:除非您爲紐約市建模,否則街道可能既不是「直線」也不是「(經常)彎曲」。 – usr2564301

+1

其實OSM *具有* [width](https://wiki.openstreetmap.org/wiki/Key:width)信息,但只有[sparsely](https://taginfo.openstreetmap.org/keys/?key=width )映射。 – scai

+1

我認爲這是計算街道寬度的一種好方法,它將車道數乘以街道寬度因子。這並不現實,但對我的模型來說足夠精確。 – Saranto