2

三角関数をサポートしていない SQLite データベースがあります。テーブル内の一連の緯度、経度のペアを、2 番目の緯度、経度のペアと比較して距離で並べ替えたいと思います。私は、緯度、経度のペアを距離でソートするための標準のハバーサイン距離式に精通しています。

この場合、特に精度は気にしません。ポイントは大きな距離で区切られているため、曲線を直線として処理して距離を丸めることは気にしません。

私の質問ですが、この種のクエリに対して一般的に受け入れられている式はありますか? 三角関数がないことを忘れないでください!

4

4 に答える 4

8

ポイントが互いに妥当な距離内にある場合 (つまり、世界の半分を横切ったり、日付変更線を横切ったりしない場合)、緯度と経度の差を補正できます (赤道を除いて経度の方が短いため)。 )、地球が平らであるかのように距離を計算します。

値を並べ替えたいだけなので、平方根を使用する必要さえありません。差の二乗を追加するだけです。

例、@lat@lngは現在の位置、2は差の修正です:

select *
from Points
order by (lat - @lat) * (lat - @lat) + ((lng - @lng) * 2) * ((lng - @lng) * 2)

特定の緯度の差分補正を として計算できます1 / cos(lat)


Cees Timmerman は、日付変更線でも機能する次の式を思い付きました。

pow(lat-lat2, 2) + pow(2 * min(abs(lon-lon2), 360 - abs(lon-lon2)), 2)
于 2011-07-01T14:11:54.823 に答える
7

モデルに適切な空間データが必要な場合は、SQLite の空間対応バージョンである SpatiaLite を使用します。

http://www.gaia-gis.it/spatialite/

PostGIS は PostgreSQL 用です。すべての SQLite 機能は完全に変更されずに機能し、空間関数も取得できます。

于 2011-07-01T15:05:06.730 に答える
1

正弦のテイラー級数展開をいつでも切り捨てて、sin ^ 2(x)+ cos ^ 2(x)=1という事実を使用して正弦の近似値を取得できます。唯一注意が必要なのは、テイラーの定理を使用して、特定の精度に必要な項の数を推定することです

于 2011-07-01T14:24:33.463 に答える