0

私は緯度と経度を対応する住所に変換する必要がある GPS 位置情報に取り組んでいます。私は、すべての緯度と経度 (1,50,000 以上のデータ) のデータベースを、実際のランドマーク、つまり 1 つのマスター テーブルの住所と共に持っています。

すべての地理的な場所を移動している多くの車両に GPS デバイスをインストールしています。このデバイスは 2 分ごとに緯度と経度に関する実際の位置を送信します。この緯度と経度を取得してマスター テーブルにマップし、マスター テーブルからどのランドマークの近くにあるかを確認します。この計算を行うために、車両から取得した緯度と経度にデルタ値を追加する数学的操作を行い、マスター テーブルから最も近い検索を見つけます。車両が XYZ の場所から 5 KM であることを示していることがわかったら、XYZ の場所を取得します。最も近い点であるマスターテーブル。

10,000 個の GPS デバイスが車両にインストールされており、すべてのデバイスが 2 分で GPS データを送信するため、このプログラムは基本的に位置を計算するのに多くの時間を要します。

この問題を修正し、非常にスケーラブルで高速にするのを手伝っていただけませんか。

前もって感謝します。

4

1 に答える 1

1

データベースでGISレイヤーを使用するのはどうですか? PostGIS のようなものは、そのような機能を備えた新しいレイヤーを sql に追加します。FAQから:

3.7. 別のオブジェクトの半径内にあるすべてのオブジェクトを見つける最良の方法は何ですか?

データベースを最も効率的に使用するには、半径テストと境界ボックス テストを組み合わせた半径クエリを実行することをお勧めします。境界ボックス テストは空間インデックスを使用し、半径テストが適用されるデータのサブセットへの高速アクセスを提供します。 .

ST_DWithin(geometry, geometry, distance) 関数は、インデックス付き距離検索を実行する便利な方法です。これは、距離半径を囲むのに十分な大きさの検索四角形を作成し、結果のインデックス付きサブセットに対して正確な距離検索を実行することによって機能します。

たとえば、100 メートルの POINT(1000 1000) を持つすべてのオブジェクトを検索するには、次のクエリが適切に機能します。

SELECT * FROM ジオテーブル WHERE ST_DWithin(geocolumn, 'POINT(1000 1000)', 100.0);

于 2012-04-14T23:40:36.173 に答える