2016-10-22 16 views
0

私はそれぞれの緯度と経度で2つの点AとBを持っています。私はまた、A点からB点に向かうのにかかる時間があります.1時間かかるとしたら、A点からB点に直進し、同じ速度で走行しているとします。 0.6時間後、ドライバの現在位置(緯度と経度)を知りたい。パッケージgeosphereまたは私がそうすることができる他のパッケージに機能がありますか?ありがとうR - 期間の後に地理的位置を計算する

+0

TDo:プログラミングの質問の領域に戻ってくる私の答えに使った解釈を見てください。しかし、私はあなたがあなた自身のためにこれを試したという証拠を提供しなかったので、保留にされている質問に同意します。 –

答えて

2

私は、あなたの質問が、「2つの場所(緯度/経度の座標として定義されている)の間の大円のルートを見つける方法を教えてください。その道に沿った道? "

まず者は、場所の任意のペアを作ってみよう、と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) 

私のテストでは、これらの最後の2つの数字は通常、お互いに1%以内であり、これはあまり悪くないことを示唆しています。

したがって、current.locationデータフレームから結果を取得することができます。

関連する問題