4

データベース内の都市の数が限られている Web サイトがあり、現在の場所に最も近い都市をユーザーに表示する必要があります。

MaxMind API で場所を取得できますが、データベースでユーザーの都市に最も近い都市を取得したいと考えています。

たとえば、データベースに 、 、 の都市がLos AngelesありSan FranciscoNew York Cityなどの他の都市からアクセスしているMiami場合、地理的に最も近い NYC が選択されているはずです。

これを迅速かつパフォーマンスを意識して行うための最良の方法は何ですか?

4

2 に答える 2

7

各都市のおおよその緯度と経度を保存し、ユーザーのために緯度と経度を度単位で計算してから、Haversine 式を使用して距離を見つける必要があります。Javascript here で実装されています。MaxMind API は、緯度と経度を提供する必要があります。

于 2010-12-22T18:29:22.590 に答える
0

データベースに都市を追加するたびに、所有しているすべての都市に最も近い都市を計算するコードが (オフラインで) 実行されるようにします。外部キーを使用して、各都市が最も近い都市として別の都市を指すようにすることができます。

これですべてが事前に計算されたので、都市の名前を含むライブ リクエストがあるときはいつでも、都市名でデータベースをヒットするだけで、指定した外部キ​​ーによって最も近い都市に到達できます。(都市 ---外部キー--->都市)

最寄りの都市をオフラインで事前に計算し、ライブ リクエストごとにすぐに結果を返すことができるため、これは非常に高速になります。

しかし、どのくらいの頻度で都市を追加する予定ですか? おそらくそれほど頻繁ではありません。そのため、オフラインでの事前計算は、多少時間がかかってもほとんどありません。しかし、ライブ リクエストには非常に迅速に対応します。(他の人が距離を計算するために使用する式を既に推奨しているので、その部分は飛ばします!)

于 2012-02-08T19:56:40.150 に答える