GPSポイントのデータベースがあります。トラックはなく、ポイントのみがあります。100メートルごとに値を計算する必要がありますが、GPSが実際のGPSポイントから遠く離れた誤った座標を与えることがあり、小さな正方形の値を計算する代わりに、本当に大きな長方形の領域の値を計算する必要があります。
間違ったGPSポイントをフィルタリングするための最適なアルゴリズムは何ですか?
理解を助けるためにスクリーンショットを作成しました:
GPSポイントのデータベースがあります。トラックはなく、ポイントのみがあります。100メートルごとに値を計算する必要がありますが、GPSが実際のGPSポイントから遠く離れた誤った座標を与えることがあり、小さな正方形の値を計算する代わりに、本当に大きな長方形の領域の値を計算する必要があります。
間違ったGPSポイントをフィルタリングするための最適なアルゴリズムは何ですか?
理解を助けるためにスクリーンショットを作成しました:
回答:
Anselin Local Moran's Iをポイントに対して実行し、-1.96未満のZスコアを持つものをすべて捨てます。これは、空間的な外れ値を見つけるための統計的な方法です。これを行うには、すべてのポイントがその空間位置に関連する値を持つようにする必要があります。
しかし、whuberのコメントの後に10.1のツールをチェックすると、ArcGIS 10.1を使用している場合、グループ化分析ツールが利用可能であることがわかります。
私は、あなたがDelaunay Triangulation空間制約でグループ化分析をしたいと思うだろう。ここで障害となるのは、切断されたグループの数以上のパーティショングループの数が必要なことです(外れ値のいずれかが互いに自然に隣接している場合)。そうしないと、自然な近傍がない外れ値は、グループ化分析からグループを見つけられません。
それに基づいて、Delauneyの三角形分割がフィルターアルゴリズムのソースである可能性があると思いますが、まだわかりません。
別の更新:グループ化分析ツールを実行するスクリプトであるPartition.pyを掘り下げた後、NoNeighbors部分と組み合わせて切断されたグループにアルゴリズムを使用することは可能だと思いますが、脚本。
これは、外れ値のリストを取得するのに役立つ場合があります。
SELECT p1.point_id
FROM p1 AS points, p2 AS points
WHERE p1.point_id <> p2.point_id AND
ST_Distance(p1.geom, p2.geom) > 10000
ここでは、point_idがポイントテーブルの主キーになります。距離関数は、最も近い距離が10000メートルを超えるポイントを検索します。(もちろん、適切な値を入力できます)
上記が機能する場合は、次のようなDELETEステートメントに変更します。
DELETE FROM points WHERE point_id IN (
-- SELECT as above
SELECT ....
);
私はあなたが仕事を成し遂げるのを助けるために、より実用的な答えを提供しようとします。(アルゴリズムに関する議論をお探しの場合は申し訳ありません)
シナリオ1:「GPSポイント」に言及しているので、元のGPSウェイポイントにアクセスできれば、仕事はずっと簡単になります。HDOP / VDOPが高いポイントや、視界にあるサテライトの数が多いポイントを捨てることができます-これは元々エラーの原因でした。gpsbabelのような無料のツールには、このようなフィルターが組み込まれています。http://www.gpsbabel.org/htmldoc-development/Data_Filters.html
シナリオ2:単にポイントのセットがあります。問題は空間的な外れ値の検出になります。この分野では多くの研究があり、このテーマに関する多くの論文がウェブ検索で見られます。データをクリーンアップする場合は、GRASSのv.outlierアルゴリズムを使用できます。これは、共有したスクリーンショットに基づいてケースで機能するはずです。http://grass.osgeo.org/gdp/html_grass63/v.outlier.html