0

イタリア(> 100000)にたくさんのレストランのデータベースを作成する必要があり、「近く」の関数を作成したいと思います。すべてのレストランの緯度と経度を含むテーブルを作成するのが好きで、mysqlspatialを使用することを考えました。

半径10kmにある、私の周りのすべてのレストラン(私の座標はGPSで取得されます)を見つけるためのクエリを作成する方法を知っていますか?

距離を把握しようとしていますが、グーグルで回っても面白いものは見つかりませんでした。

mysqlspatialを使用するのは良い考えだと思いますか?代わりにfloatを使用できますか?この場合、半径10 kmにある私の周りのすべてのレストランを検索するクエリを作成するにはどうすればよいですか?

どうもありがとう

4

2 に答える 2

1

MySQL空間のMBRIntersectsまたはMBRContains関数は、あなたが精通する必要があるもののようです。

最初に、この質問の受け入れられた回答を参照してください。

特にgis.stackexchange.comで質問すると、MySQLの空間に関するより良い答えが得られる可能性があります。

于 2012-05-04T10:58:49.563 に答える
-2

はい、地理空間機能を使用できますが、かなり複雑です。緯度と経度(および経度と緯度も!)に基づいてエントリにインデックスを付ける方がはるかに簡単です。データのクエリについては、実際に10 km以内にあるレコードをクエリするのではなく、現在の場所(インデックスを使用できる)を中心とする20kmX20kmの境界ボックスに一致する行を検索するクエリを実行することをお勧めします。クエリの半径eksewhereの外側にあるものを破棄します。例:

SELECT * FROM (
  SELECT p.id, p.description,
  SQRT((x.current_latitiude-p.latitude)*(x.current_latitiude-p.latitude)
      + (x.current_longitude-p.longitude)*(x.current_longitude-p.longitude)) 
      AS distance
  FROM places p
  WHERE p.latitude BETWEEN (x.current_latitiude - x.max_range) 
     AND (x.current_latitiude + x.max_range) 
  AND p.longitude BETWEEN (x.current_longitiude - x.max_range) 
     AND (x.current_longitiude - x.max_range)
) ilv
WHERE ilv.distance<x.max_range

(10kmを経度/緯度に使用している単位に変換し、x.max_rangeの値に置き換える必要があります)。

于 2012-05-03T15:48:50.480 に答える