2011-06-22 6 views
3

私は資産追跡アプリケーションに取り組んでいます。私は5分ごとにGPS位置を更新するデバイスを持っています。ノイズの多いGPSデータを使って位置の変化を効率的に検出する方法はありますか?

資産が移動し始めたとき、停止したときと所要時間などを表示するレポートを作成する必要があります。基本的には、このデータをGROUPする必要があります。

問題GPSデータは正確ではありません。デバイスが同じ場所に置かれている場合、異なる緯度/経度を異なる精度で送信し、ノイズの多いデータを生成します。

このようなデータを分析する最も効率的な方法は何ですか?それとも、それを「クリーン」にする方法がありますか?助言がありますか?

リトルビットオープンエンドの質問が、私はあなたが私を与えることができます任意のアイデアが欲しい:)

enter image description here

答えて

2

すべてのレコードは、アセットが実際にあり得る重心(精度によって定義されたファズのそのサイズの周りに位置し、ファジー空間)を規定します。高度が無視できるのは、それがはるかにあいまいであり、一般的に正確さは水平精度だけです。

最初のポイントを取って、それをクラスター(領域/ボリューム)に割り当てます。 2番目のポイントを取得し、クラスター内にあるかどうかを確認します。もしそうなら、あなたはセントロイド(古い点と新しい点の平均値)を精密化しようとするか、あるいは2点目を破棄することができます。セントロイドを洗練させることは非常に魅力的ですが、資産の動きを遅くすることはできません。あなたの次のポイントがセントロイドの外側に落ちたら、新しいセントロイドを立ち上げてください。

あなたの報告された精度が実際の精度より優れていることがあります。この場合、愚かな乗数または定数を入れて重心を実際よりもぼやけさせることができます。

[編集]

OPはこれをSQLで行う方法を尋ねました。まあ、私はSQLの教祖です。私が抱えている問題は、その場所にあったすべてのマッチではなく、時間的に連続しているマッチを提供するだけで、外部結合を制限できないということです。したがって、私のソリューションでは、たくさんの余分なSQLループを使用することになりました。

$curid = 0; 
while ($hash = `select id,timestamp,position,accuracy from locations 
        where id > $curid 
        order by idlimit 1`) 
{ 
    print "Was at $hash{'position'} at $hash{'timestamp'} "; 

    $curid = $hash{'id'} + 1; 
    $seenone = 0; 
    while ($hash2 = `select id,timestamp from locations where id=$cur_id and 
        distance($hash{'position'},position) < (accuracy+$hash{'accuracy'})`) 
    { 
    $curid = $hash2{'id'}+1; 
    $seenone = 1; 
    } 
    print "until $hash2{'timestamp'}\n" if ($seenone); 
    print "\n" unless ($seenone); 
} 

これはidによってテーブルの場所を通過します。最初のクエリは次の(最初の)位置情報を取得し、2番目のクエリは同じ位置にクラスタ化されたすべてのIDをスキップします。すすぎ、繰り返します。 1つのポリゴンに

+0

私はあなたの言うことを理解しています。私の特定の目的のために、より簡単なアプローチ(精緻化セントオイド)は必要ありません。私のussueは私が使う必要のあるアルゴリズムです。 SQL Serverデータベース内のこのデータ。私はレコードをループしないで使用できるSETベースのアルゴリズムがあるのだろうかと思います。 – katit

+0

@katit:使用できる擬似コードアルゴリズムで答えが更新されました。 –

-1

私はGPSデータを使用して高高度気球を追跡するいくつかの作業を行ってきました。データをある種の数値形式で報告する必要がある場合を除き、Google Maps APIの使用をお勧めします。マップを作成し、GPSデータセット内の各ポイントのマーカーを追加することができます。これは素晴らしいグラフィック表現を提供しますが、小規模のスケールを扱う場合はうまく動作しません。

APIドキュメント:

http://code.google.com/apis/maps/documentation/javascript/reference.html#MarkerOptions

0
(データはどのように「うるさい」のいくつかの経験的な測定に基づいて、スケーリングされた)所定の半径を有する円形エリアを作成

なぜbuffer各点と、その後dissolve緩衝ポリゴンの重心を取りますそれ?

関連する問題