トラックの未加工のGPS位置があり、最大速度を取得する必要があります。単純な方法(2点間の速度を計算し、最大を取る)では、GPSが不正確なため、意味のない大きな数値が得られます。これを解決するための優れた既製のアルゴリズムを提案できますか?
トラックの未加工のGPS位置があり、最大速度を取得する必要があります。単純な方法(2点間の速度を計算し、最大を取る)では、GPSが不正確なため、意味のない大きな数値が得られます。これを解決するための優れた既製のアルゴリズムを提案できますか?
回答:
もちろん、スピードを出すには時間が必要です。したがって、時間を増やすことにより、列{Time、X、Y}を使用して、スプレッドシートのような方法で時間順にポイントを並べ替えることができます。
以下は、GPSユニットが反時計回りの回路をほぼ完成した例です。
これらのポイントは、一定の時間間隔で取得されませんでした。 したがって、マップだけから速度を推定することは不可能です。 (ただし、この旅行を視覚化するために、ほぼ等間隔でgps値を収集しました。これにより、旅行が2つの中間点と最後で速く始まり、遅くなったことがわかります。)
速度に関心があるため、連続する行間の距離と時間差を計算します。 距離を時間差で割ると、瞬時の速度推定が得られます。 これですべてです。時間に対するこれらの推定のプロットを見てみましょう。
赤い点は速度をプロットしていますが、灰色の曲線は目を単にガイドするための粗い滑らかなものです。GISでスプレッドシートまたは単純なデータサマリー関数を使用している場合、最大速度の時間と最大速度自体はプロットから明確になり、これまでのデータから簡単に取得できます。ただし、gpsポイントには明らかに測定誤差があるため、これらの速度推定は疑わしいものです。
測定誤差に対処する1つの方法は、複数の期間間の距離を累積し、それらを使用して時間を推定することです。たとえば、以前に計算された{時差、距離}データが
d(Time) Distance
0.90 0.17
0.90 0.53
1.00 0.45
1.10 0.29
0.80 0.11
次に、連続する行の各ペアを追加することにより、2つの期間の経過時間と合計距離が取得されます。
d(Time) Distance
1.80 0.70
1.90 0.98
2.10 0.74
1.90 0.40
累積された時間と距離の速度を再計算します。
この計算はいくつでも実行でき、速度の推定値を長期間にわたって平均化する代わりに、よりスムーズで信頼性の高いプロットを実現できます。以下は、それぞれ3期間と5期間について計算された同じデータのプロットです。
最大速度がスムージングの量に応じて減少することに注意してください。これは常に起こります。 一意の正解はありません。 どの程度滑らかにするかは、測定値のばらつきと、速度を推定する期間に依存します。この例では、最高速度を(連続したGPSポイントに基づいて)2.5まで報告できますが、GPS位置のエラーのため、ある程度の信頼性はありません。5周期スムーズに基づいて、最大速度を2.1と報告できます。
これは簡単な方法ですが、必ずしも最善とは限りません。 GPS位置エラーをパスに沿ったコンポーネントとパスに垂直な別のコンポーネントに分解すると、パスに沿ったコンポーネントが通過した合計距離の推定に影響を与えないことがわかります(パスが十分にサンプリングされている場合): 「コーナーをカット」しないでください)。パスに垂直なコンポーネントが増加します見かけの距離。これにより、推定値が上方にバイアスされる可能性があります。ただし、GPSの読み取り値間の一般的な距離が一般的な距離誤差と比較して大きい場合、バイアスは小さく、おそらくGPSシーケンスによってキャプチャされないパス内の小さな小刻みが補償されます(つまり、いくつかのコーナーカットが常に行われます)。したがって、GPSサンプリング周波数が、パスが「揺らぐ」周波数またはGPS測定誤差が大きい周波数と比較して非常に低い場合を除いて、これらの固有のバイアスに対処するより高度な推定器を開発する価値はおそらくありません。
これらはシミュレートされたデータであるため、レコードについては、真の正しい結果を表示できます。
これを前のプロットと比較すると、この特定のケースでは、生の速度の最大値が真の最大値を過大評価していたのに対し、5周期の速度の最大値が低すぎたことがわかります。
一般に、GPSポイントが高い頻度で収集される場合、最大の未加工速度は高すぎる可能性が高く、真の最大値を過大評価する傾向があります。実際のインスタンスでこれ以上のことを言うには、GPSエラーの性質とサイズ、GPS収集頻度、および基礎となるパスの曲がり具合の完全な統計分析が必要になります。
これは既製のスクリプトやアルゴリズムではありません。下の画像で私がしたことは、平均速度(時速)を示しています。
r.neighbors
指定したラスターウィンドウの平均速度を取得するために実行します。r.neighbors
、平均速度を取得します。
GPSデータは不正確であるため、最大速度を推定することしかできません。
セグメントではなく、ポリライン(平均速度)で速度を計算して計算し、不正確さの影響を最小限に抑えることができます。
最も関連性の高いポイントのみを保持するために、最初にデータ(たとえばDouglas-Peucker)をクリーニングしてみましたか?