0

現在、場所からオブジェクトを検索できるサイトがあります。私たちの国の検索ボックスと州のドロップダウンがあります。各オブジェクトには、1 つの状態との関係があります。

このウェブサイトを他の国にも拡大したいと考えています。私たちの選択は次のようです。

1/ 行きたい国ごとに、州のリストと、場合によっては郵便番号が必要です。オブジェクトは州と郵便番号に関連付けられており、検索ボックスの横にドロップダウンが表示されます。

2/ 経度と緯度を各オブジェクトに関連付け、ユーザーが検索したときに入力した住所の経度と緯度を Google API が返すようにします。次に、検索された住所の経度/緯度の特定の半径内にあるオブジェクトを見つけます。

オプション 1 はうまく機能しますが、各国に入る前に多くの作業を行う必要があるため (州/郵便番号のリストを取得する)、制限があります。

オプション 2 は最も弾力性があり、新しい国への入国に制限はありません。ただし、うまくやらないと、パフォーマンスが低下する可能性があります。テーブル内のすべてのオブジェクトを検索して、検索された住所の経度/緯度の半径内に経度/緯度が収まらないようにするにはどうすればよいでしょうか?

www.skillpages.com の仕組みが気に入っています。非常に迅速かつ正確な検索であり、これはオプション 2 を選択した場合に複製したいものです。

正確で柔軟なロケーションベースの検索アルゴリズムを作成するための最善の方法についてのアドバイスをいただければ幸いです。

4

2 に答える 2

0

国を地域、サブ地域、都市、地方に分割することを検討してください。最適な数のレベル。API リクエストをリアルタイムで実行する代わりに、都市内の地域間の距離を保存します (都市に 100 の地域があるとします。これにより、1 つの都市に対して 100 X100 の地域マトリックス/テーブルが生成されます)。

ユーザーが地域表示結果として入力した内容に応じて、ユーザーの地域と他のすべての地域との間のおそらく ORDERED BY 距離の都市が表示されます。市の中心部をユーザーの場所に変更するようなものです。

ただし、これにより、都市の個々の「ロケーション テーブル」が作成されます。いくつかの都市を超えると、忍び寄る問題を推測することしかできません。

私は自分のウェブサイトでも同じことをしようとしています。

距離データを XML またはビットマップ (ソーシャル ネットワーキング Web サイトでソーシャル グラフを作成するためによく使用されます) で保存するとパフォーマンスが向上するかどうかを検討してください。

ユーザー数によっては、API のリアルタイム呼び出し + 距離の計算に多くの時間がかかるはずです。とにかく、Google API の呼び出しも制限されています。

于 2012-08-03T17:43:46.783 に答える
0

ユーザーが半径 x マイル以内のアイテムを検索できるようにする場合は、オプション 2 が最適なオプションのように思えます。各項目の緯度/経度を格納するインデックス付きの列をセットアップすれば、データベースのオーバーヘッドはそれほど大きくないはずです

次のような PHP/MySQL ベースのものを想定します。

$radius = 0.15; // Would be calculated based on radius of the search
$user_lat = -0.134239; // Latitude of User Searching
$user_lon = 51.510238; // Longitude of User Searching

$query = mysql_query("SELECT * FROM `items` WHERE `lng`<'". ($user_lon + $radius) ."' AND `lng`>'". ($user_lon - $radius) ."' AND `lat`>'". ($user_lat - $radius) ."' AND `lat`<'". ($user_lat + $radius) ."'");
于 2012-07-25T23:04:55.557 に答える