まず、緯度間の距離を比較します。緯度はそれぞれ約69マイル(111キロメートル)離れています。範囲は、赤道で68.703マイル(110.567 km)から極で69.407(111.699 km)に変化します(地球のわずかに楕円形のため)。 2つの位置間の距離は、それらの緯度間の距離と等しいか、またはそれよりも大きくなります。
これは経度については当てはまりません。各経度の長さは緯度によって異なります。ただし、データがある地域(たとえば単一の国)に限定されている場合は、経度の最小値と最大値の境界も計算できます。
球面地球を想定し、低精度、高速距離計算意志続行:
座標を持つ2つの点間の大圏距離d {LAT1、lon1}及び{LAT2、lon2}は、で与えられます。 :
d = acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))
短い距離のための丸め誤差を受けにくい数学的に等価な式である:
Dはラジアン
distance_km ≈ radius_km * distance_radians ≈ 6371 * d
における距離(6371キロがaverage radius of the earthある)
計算要件がmimimalあり、この方法です。しかし、結果は小距離では非常に正確です。
次に、特定の距離以内にある場合は、より正確な方法を使用してください。
GeographicLibは私が知っている最も正確な実装ですが、Vincenty inverse formulaも使用できます。
あなたがRDBMSを使用している場合は、プライマリキーとセカンダリキーとして経度緯度などを設定しました。上記のように緯度範囲または緯度/経度範囲を照会し、結果セットの正確な距離を計算します。
すべての主要なRDBMSの現代版は、地理的なデータ型とクエリをネイティブにサポートしています。
これはあなたが必要なものかもしれません:http://en.wikipedia.org/wiki/K-d_tree – biziclop
1つのSQLクエリで解決できませんでしたか? SELECT * FROM Places WHERE(Lat - :Lat)^ 2 +(Long - :Long)^ 2 <=:Distance^2(ofc、地球が球形であり、すべてがこれに該当します) – Dialecticus
あなたはまだ@ valeraの答えを見つけましたか? –