現在、JSON ファイルに保存されているデータセットがあります。これには、約 40,000 の異なる地理位置情報が含まれています。次のようになります。
[
{"title": "Place 1", "loc": {"x": "00.000", "y": "00.00000"}},
{"title": "Place 2", "loc": {"x": "00.000", "y": "00.00000"}},
]
場所loc
は単なる座標です。
このデータに対してクエリを実行できるようにしたいので、特定のユーザー入力に対して、最も近い場所loc
を取得できます。n
または言い換えればf
、これが機能するようにいくつかの関数を書きたいと思います:
def f(loc, n): ...
f({"x": "5", "y": "5"}, 3) #=> [{"title": "Place 1", "distance": 7.073}, {"title": "Place 2": "distance": 7.073}, {"title": "Place 3", "distance": 7.073}]
場所 1、2、3 がすべて にある場合{x: 0, y: 0}
。
このような問題を解決する標準的な方法が何であるかはわかりません。事前計算された距離のインデックスで SQL DB を使用しても機能しませんloc
。データベース全体を調べてすべての距離を計算するのは、非効率的で遅すぎます。(30 ミリ秒未満の応答時間が必要です。)
理にかなっている唯一の解決策は、どういうわけか近い場所の「バケツ」を作成し (相互のいくつかr
の範囲内で)、次にユーザーが指定した場所とバケットの場所の間の距離を計算して、最初にオプションを絞り込むことです。しかし、そのようなソリューションを自分で作成することは、データベースをまったく使用しないことに似ていると思います。より効率的で業界標準のアプローチが必要です。ありますか?