私は100,000座標のデータベースを持っているとしましょう。 特定の座標から1マイル未満離れているものを見つける必要があります。特定の周囲にある座標を見つける最も速い方法は何ですか?
答えて
はまず、我々は2点間の距離を計算するための基本的な機能を記述する必要があります(任意の言語で)これを行うための最も効率的な方法何:この例では
function distance(lat1, lon1, lat2, lon2) {}
を?最初に、デルタ(緯度と緯度の間の距離)と平均緯度(緯度の平均)を計算する必要があります。
var dLat = lat1 - lat2;
var dLon = lon1 - lon2;
var mLat = (lat1 + lat2)/2;
var earthRadius = 3959; //in miles
その後、我々はd=180/PI rad
を使用してラジアンにそれらを変換します。
dLat = dLat * 180/3.1415926535;
dLon = dLon * 180/3.1415926535;
mLat = mLat * 180/3.1415926535;
今、私たちは距離に私たちのデータを変換するための式を使用します。
var distance = earthRadius * (dLat * dLat + Math.pow(Math.cos(mLat) * dLon, 2));
と距離に
return distance;
を返します
今、すべてのポイントとchを繰り返し処理するだけです距離がそれぞれの場合はOKです。ポイントは、このように記述されているとしましょう:
var p = {
lat = ...
lon = ...
}
そしてポイントのリスト(例えば、名前のポイント)と(例えば、名前のREF)基準点があると仮定。
var result = []
points.forEach(function (d) {
if (distance(d.lat, d.lon, ref.lat, ref.lon) <= 1) {
result.push(d);
}
};
また、緯度の境界ボックスを確認することもできます - longtitudeにはもっと複雑な計算が必要で、時間がかかるだけです。あなたは度でのマイルが1/69 deg/mile
(約0.1449度)であると判断できます。だから、この境界ボックスの外側である点をチェックすることができます。
var result = []
var maxLat = ref.lat + 0.1449;
var minLat = ref.lat - 0.1449;
points.forEach(function (d) {
if (d.lat > maxLat || d.lat < minLat) continue;
if (distance(d.lat, d.lon, ref.lat, ref.lon) <= 1) {
result.push(d);
}
};
その後、仕上げは基準点から1マイルよりも近い点の配列を持つ必要があります。
数式に間違いがあるかもしれません(私は、数学者よりもプログラマーに似ています)。だから、Wikipediaの記事にリンクしているかどうかを確認してください。
1マイルの距離を「度の距離」に変換するのではなく、各座標点を変換する方が速いでしょうか? 1マイルが0.001度の距離に相当するとすると、 '(d.lat - ref.lat)** 2 +(d.lon - ref.lon)** 2 <0.001 ** 2 "となり、これはより少ない整数計算を必要とする。私は私の命題で間違っているかもしれない、ただ尋ねる。 – Delgan
速度を上げるために、最小/最大緯度と経度に基づいた単純な「早期アウト」バウンディングボックスチェックを実行して、ほとんどの点を破棄し、それを渡す人にとっては高価な距離計算を行うだけです。 – samgak
@Delganは正確ではありません - 異なる緯度でマイル距離が異なります。たとえば、緯度38N/Sでは、経度は69マイル、緯度は90N/Sです。経度は0マイルに達しています。 –
- 1. Javaの特定の座標でオブジェクトを見つける方法
- 2. プロトタイプJS - 特定の座標に最も近い要素を見つける
- 3. マップインライン(Jupyter)で座標をプロットする最も速い方法は何ですか?
- 4. 指定された座標に最も近い点を見つける方法
- 5. ループで最も近い座標を見つける(Python)
- 6. 範囲内の素数を見つける最も速い方法は何ですか?
- 7. ペアの配列で最も近い数のペアを見つける最も速い方法は何ですか?
- 8. いくつかの座標の中で最も近い座標を見つける
- 9. デバイスを見つける方法座標
- 10. netlogoの特定の座標にあるタートルを見つけるにはどうすればいいですか
- 11. 座標に最も近いショップを見つけよう
- 12. 座標の集合から特定の点に最も近いlat lonを効率的に見つける方法はありますか?
- 13. 最も北の座標を見つける
- 14. モデル空間から、OpenGL ES 2.0の標準座標空間への座標を取る最も速い方法
- 15. 2つのテーブル間で一致しないレコードを見つける最も速い方法は何ですか?
- 16. 座標の不一致。対応する座標を見つける方法はありますか?
- 17. 円周上のピクセル座標を見つけるアルゴリズム
- 18. コントロールコレクション内のテキストマッチングコントロールを見つける最も速い方法
- 19. HTML内の特定の位置を見つける最も良い方法は何ですか
- 20. 配列のポイントから3つの最も近い座標を見つける方法Java
- 21. numpyの配列のリストが等しい場所を見つける最も速い方法は何ですか?
- 22. signal.spectrogram特定のセグメントの最大周波数を見つける
- 23. インデックスの座標を見つける方法は?
- 24. イメージマップ:円、矩形、ポリゴンの座標を見つける方法は?
- 25. Android:デバイスの現在の場所を見つける最も速い方法は何ですか
- 26. 座標がどこにあるかを見つける
- 27. k-meansでクラスタの座標を見つける方法
- 28. ある座標から別の座標にビューをアニメーション化する正しい方法は何ですか?
- 29. 配列内の整数を見つける最も速い方法は何ですか?
- 30. 既存のタイプに最も近いマッチングタイプを見つける最も良い方法は何ですか?
座標は緯度/経度またはx/yマイルですか? –
緯度/経度 – algoriddim