4

SQLite データベースで高度と経度/緯度の座標を取得しました。

いくつかのサンプルデータ:

latitude   longitude  altitude
------------------------------
48.003333  11.0       652    
48.036667  11.000833  651
48.280833  11.000833  533

今、私は与えられた緯度/経度座標に最も近い高度を与えるSQLクエリが欲しいので、例えば

与えられた緯度/経度は48.023445/11.000733になるため、最も近いのは緯度/経度 48.036667/11.000833の高度 651です。多くのフォーラムを検索しようとしましたが、何も役に立ちませんでした。いたるところに、1 つの変数または非常に遅いクエリの例があります。このクエリは非常に迅速に必要であり、UNIONS に基づく解決策を見ました。このテーブルに対して約 1,500 万のクエリを作成するため、迅速に行う必要があります。トランザクションとインデックス作成を使用しています。

4

3 に答える 3

4

目的(検索された座標に近いポイント)では、平面上の距離の式を使用して最小化することもできます。

(lat-latitude)*(lat-latitude) + (long-longitude)*(long-longitude)
于 2012-12-31T08:46:30.003 に答える
3

経度と緯度の座標を使用した、球上の2点間の距離の式は単純ではなく、ここで説明します。このページで指定されているように、ポイントが適度に近い場合は、単純な平面三角法で逃げることができ、ポイント間のユークリッド距離を使用するだけです。

于 2012-12-31T08:38:20.823 に答える
1

次のクエリに似たものを使用します。

select * from pos order by ((lat-48.00333)*(lat-48.00333)+(long-11.0)*(long-11.0)+(alt-652)*(alt-652));

SQLite は SQRT をサポートしていませんが、SQRT は単調なので、距離式ではスキップできます。

于 2012-12-31T09:13:30.593 に答える