回答:
彼らは言及答えの後におそらくある空間索引を選択することで、最も可能性の高い、箱から出して、空間インデックスを提供するデータベースを、しかし実装することにより、例えば、必要であれば、あなたもそれを言及することにより、いくつかのポイントは、アプリケーション自体に実装することができてしまうかもしれませんRを-Tree(DBの選択が他の理由で修正されている場合に便利かもしれませんが、空間データベースがどのように機能するかを知っていることも示します)。空間インデックスにより、検索ボックス内に収まる場所のサブセットをすばやく取得できます。実際の検索を行うには、実際の距離を計算することでさらに絞り込むことができます(必要に応じて、四角形だけで十分です)。円/楕円
距離がおそらく20M以下であることを考えると、20Mの終わりに向かって顕著なエラーが発生し始めますが、平坦な地球を距離の計算に使用すると想定できます。はるかに大きな範囲が正確に必要な場合は、より良い距離モデルの調査も開始する必要があります。地球のために、例えばハバシン距離
もちろん、UI設計、DBスキーマなど、議論できる他の無数の詳細もあります。これらは、それ自体が完全なトピックになる可能性があります。
このような質問に直面し、問題領域の専門知識がない場合は、いくつかのことを行うのが良いでしょう。
最初に、この問題領域に関する特定の専門知識がないことを認めてください。
次に、問題の解決方法を説明します。
私は地理的検索を扱う際に特定の経験はありませんが、問題を解決するための十分に文書化されたアルゴリズムと既存の技術があると確信しています。私はこれらを調査して、私が利用できる一般的なソリューションの知識を得て、プロジェクトの要件に基づいて実装について選択します。
3番目に、常にこのような問題を基本的なコンポーネントにまで減らします。マップ上の場所は2次元的に分散していることがわかります。任意のx、y座標が与えられた場合、別の座標からの各座標までの距離は、三角形を形成し、未知の長さを解くことによって計算されます。また、境界ボックス内のすべての座標を検索するように求められた場合は、検索するボックスの範囲を計算し、両方の軸に沿って単純な大なり小なりロジックを使用するだけでこれを実行できることもわかっています。
最後に、質問をあきらめそうな開発者を雇ったことがありません。私が質問をして、その人が「わからない」と言って、それを口頭で考えようとさえしなかった場合、彼らはブレインストーミングセッションに貢献しないという印象を与えます。これは、ソフトウェアを作成している組織では重要です。
これはおそらく明白ですが、多くのアプリケーションでは、貧しい人の遅い解決策が適切な場合があります。
緯度と経度を格納するリレーショナルデータベースにテーブルがある。緯度が20マイル以内、経度が20マイル以内のすべての場所をクエリします。これにより、実際に検索する半径を含む最小の境界長方形のサイズの境界長方形が得られます(地球の曲率も無視されます)。
次に、返されたセットを(インデックスを使用したクエリによって)取得し、距離の正確な計算を使用してフィルターで絞り込みます。
ですから、効率的なパフォーマンスではありませんが、開発の時間は非常に効率的です。多くのアプリケーションにとって、より良い選択かもしれません。