1

ユーザーが都市と地域(都市内)を選択し、キーワードに言及して検索をクリックできる地域ベースの検索機能を実装する必要があります。たとえば、それぞれに平均 100 の地域がある 10 の都市があるとします。結果は、ユーザーが提供した地域を出発点として、ユーザーの地域から離れた他の結果を並べ替えて表示されます (この方法では、特定のキーワードの都市の結果は一定で、順序が変わるだけです)。 PHPでの最良のアプローチは?

1) さまざまな地域間の距離を計算し、それらを mySqldatabase に事前に保存します。これは、地域の 100X100 マトリックスを意味します (各地域は他の地域から離れています)。また、 db 内の都市と同じ数のテーブル。したがって、そのようなテーブルは 10 個 + さらに追加する可能性があります。こちらはご注文専用となります。

2) すべてのデータを mysql データベースではなく XML に入れます。

3) ビットマップと圧縮画像を使用しますか?

主な基準としてパフォーマンスとスケーラビリティを考慮します。

4

3 に答える 3

0

また、長方形のグリッドを使用し、メルカントール図法とハーベシン式を使用せずに geohash を計算するか、mysql のポイントおよび空間インデックス データ構造を使用することもできます。クエリで距離を計算するよりも少し高速です。

于 2012-08-11T12:46:43.213 に答える
0

最初に都市とタグでデータをフィルタリングし、次に結果を距離で並べ替えますが、距離ではフィルタリングしません。つまり、最も遠いポイントでさえデータベースから取得する必要があります。その場合、リクエストを実行するときに指定された場所からの距離を計算する場合、ペナルティがそれほど大きくないはずです。結局、これは 1 行につき 1 つの数式評価であり、その値で結果を並べ替えます。

データが緯度と経度の座標を使用して与えられている場合、理論的には、これは複雑な式を使用して球面上の測地線の長さを計算することを意味します。しかし、1 つの都市内では、地理的なグリッドは (正方形ではなく) 長方形であると合理的に想定できます。したがって、各都市の緯度 1 度と経度 1 度の比率を保存すると、すべての座標を正方格子に変換し、入力された位置とのx方向とy方向の差を計算して、それらを正方に加算することができます。平方根を取る必要はありません。平方による順序付けも同様に機能します。

これらの行に沿ったもの:

  SELECT location.name, location.lat, location.lon, …
    FROM locations, cities
   WHERE location.city = city.id
     AND city.name = ?
     AND location.tag = ?
ORDER BY POW((location.lat - ?), 2) + POW((location.lon - ?)*city.geoaspect, 2)

ここで、パラメーターは都市名、選択したタグ、および入力した緯度と経度です。

于 2012-08-10T09:27:09.807 に答える