0
我有兩個點A和B以及它們各自的經度和緯度。我也有一段時間需要從A點到B點。假設它需要1小時,並且從A假定駕駛員直奔B點並在旅行期間保持相同的速度。 0.6小時後,我想知道駕駛員的當前位置(按經度和緯度)。包geosphere
或任何其他允許我這樣做的軟件包中是否有任何功能?謝謝R - 計算一段時間後的地理位置
我有兩個點A和B以及它們各自的經度和緯度。我也有一段時間需要從A點到B點。假設它需要1小時,並且從A假定駕駛員直奔B點並在旅行期間保持相同的速度。 0.6小時後,我想知道駕駛員的當前位置(按經度和緯度)。包geosphere
或任何其他允許我這樣做的軟件包中是否有任何功能?謝謝R - 計算一段時間後的地理位置
我認爲你的問題更好,更簡潔地表述爲「我如何找到兩個位置之間的大圓路徑(定義爲緯度/經度座標),然後找到點的座標爲任意百分比那條路上的路呢?「。
首先讓我們做一個任意一對的位置,稱爲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
數據框中提取結果。
TDo:請參閱我在答案中使用的解釋,它讓您重新回到編程問題的領域。但我同意這個問題被擱置,因爲你沒有提供任何證據表明自己已經嘗試過。 –