2016-10-22 59 views
0

我有兩個點A和B以及它們各自的經度和緯度。我也有一段時間需要從A點到B點。假設它需要1小時,並且從A假定駕駛員直奔B點並在旅行期間保持相同的速度。 0.6小時後,我想知道駕駛員的當前位置(按經度和緯度)。包geosphere或任何其他允許我這樣做的軟件包中是否有任何功能?謝謝R - 計算一段時間後的地理位置

+0

TDo:請參閱我在答案中使用的解釋,它讓您重新回到編程問題的領域。但我同意這個問題被擱置,因爲你沒有提供任何證據表明自己已經嘗試過。 –

回答

2

我認爲你的問題更好,更簡潔地表述爲「我如何找到兩個位置之間的大圓路徑(定義爲緯度/經度座標),然後找到點的座標爲任意百分比那條路上的路呢?「。

首先讓我們做一個任意一對的位置,稱爲A和B:

df <- data.frame(locations = c("a","b"), 
       lon =runif(2,min = -180, max = 180), 
       lat = runif(2,min = -90, max = 90)) 

現在,我們來看看他們之間的大圓航線。我們不需要路線本身,只需要整個路線的距離和初始方向。

require(geosphere) 

# get the distance of a great circle route between these points 
track.dist = distHaversine(p1 = df[1,c("lon","lat")], 
            p2 = df[2,c("lon","lat")]) 

然後獲得初始軸承,我們將在一個位使用:

track.init.bearing = bearing(p1 = df[1,c("lon","lat")], 
         p2 = df[2,c("lon","lat")]) 

下一步是要弄清楚我們在哪裏,在逝去路線的任意部分:

# figure out where we are at an arbitrary time 
current.location.fraction = runif(1,min = 0, max = 1) 
# get the distance 
current.location.dist = current.location.fraction * track.dist 

current.location = as.data.frame(destPoint(p = df[1,c("lon","lat")], 
              b = track.init.bearing, 
              d = current.location.dist)) 

而最後一步就是檢查我們是沿着路線的距離右側部分:

check.dist = distHaversine(p1 = df[1,c("lon","lat")], 
          p2 = c(current.location$lon, 
            current.location$lat)) 

print(current.location.fraction) 
print(check.dist/track.dist) 

在我的測試中,最後兩個數字通常在1%以內,表明這並不算太壞。

因此,您可以從current.location數據框中提取結果。