与えられた2つの場所:
L 1 =(緯度1、経度1、タイムスタンプ1)、L 2 =(緯度2、経度2、タイムスタンプ2)、
構成可能であるが一定の移動速度:
v = 1.39メートル/秒(たとえば)。
どのように我々は彼がから移動するユーザの位置を推定するために、これらの2つの場所の間を補間することができますL 1にL 2?
私はこの問題の解決策を探していましたが、これまでのところ、(極から離れた)短い距離では線形補間を使用できることがわかりました。だから、私はウィキペディアで線形補間を調べて、これを見つけました:
// Imprecise method which does not guarantee v = v1 when t = 1,
// due to floating-point arithmetic error.
float lerp(float v0, float v1, float t) {
return v0 + t*(v1-v0);
}
私は間を補間緯度と経度このlerp関数を使用して考えていますので、L 1及びL 2。それは簡単な部分でした。tを計算するにはどうすればよいですか?いくつかの時間デルタを計算する必要があると思いますが、移動速度をどのように考慮しますか?
GPSの位置を収集するためのさまざまな方法をテストしています。この目的のために、私は散歩中のウェイポイントの場所を記録しています。歩行に沿った位置を推定するには、移動速度を使用してこれらのウェイポイント間を補間する必要があります。次に、結果を見積もりと比較して、それらがどれだけうまく機能しているかを確認できます。
例:
いくつかの時間デルタを計算する必要があると思いますが、移動速度をどのように考慮しますか?
線形補間では、ケースムで、開始時刻t1から終了時刻t2まで実行される反復変数tを使用して、事前定義されたステップで2つの時点間を反復します。ステップ= 1秒と仮定します。これは、アプリケーションに非常に役立ちます。
long t1 = location1.getTimeStamp(); // in milliseconds;
long t2 = location2.getTimeStamp();
double deltaLat = location2.latitude - location1.latitude;
doule deltaLon = location2.longitude- location1.longtude;
// remove this line if you don't have measured speed:
double deltaSpeed = location2.speed - location1.speed;
long step = 1 * 1000; // 1 second in millis
for (long t = t1; t1 < t2; t+= step) {
// t0_1 shall run from 0.0 to (nearly) 1.0 in that loop
double t0_1 = (t - t1) / (t2 - t1);
double latInter = lat1 + deltaLat * t0_1;
double lonInter = lon1 + deltaLon * t0_1;
// remove the line below if you dont have speed
double speedInter = speed1 + deltaSpeed * t0_1;
Location interPolLocation = new Location(latInter, lonInter, speedInter);
// add interPolLocation to list or plot.
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加