0

それぞれの緯度と経度を持つ 2 つのポイント A と B があります。また、ポイント A からポイント B に到達するのにかかる時間もあります。1 時間かかり、A からドライバーがポイント B に直進し、移動中に同じ速度を維持すると仮定します。0.6時間後、ドライバーの現在地(緯度と経度)を知りたいです。パッケージまたはそれを可能にする他のパッケージに機能はありますgeosphereか? ありがとう

4

1 に答える 1

2

あなたの質問は、「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)

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

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

于 2016-10-22T21:59:39.730 に答える