1

私は MySQL の空間拡張についてまったくの初心者なので、このトピックについて無知であることをお許しください。

シナリオ:

1) 緯度と経度でユーザーの位置を収集します。その場所を MySQL テーブルに保存します。

2) 次に、そのユーザーの範囲内にある他のユーザーを表示します。範囲は狭く、1000 フィートとしましょう。

質問: ロケーション ポイントを保存するためのベスト プラクティスは何ですか? そのユーザーに最も近いポイントをクエリして選択するためのベスト プラクティスは何ですか?

4

2 に答える 2

2
  • 座標を格納するには、POINTSpatialデータ型を使用します。

    構造は次のようになります。

     CREATE TABLE gps name varchar(0), `location` point NOT NULL;
    

    列のタイプ'場所'に注意してください。

  • その後、「location」列のSPATIALインデックスを定義する必要があります。

    CREATE SPATIAL INDEX sp_index ON gps(`location`);
    
  • データの挿入(緯度と経度)

    INSERT INTO gps (name, location) VALUES ( 'India' , GeomFromText( ' POINT(31.5 42.2) ' ) ) 
    

    関数GeomFromTextは文字列を受け取り、Geometryオブジェクトを返します。ここで、31.5と42.2はそれぞれ緯度と経度です。それらの間にコンマがないことに注意してください。それらはスペースで区切られます。

  • データの読み取り

    SELECT name, AsText(location) FROM gps;
    

    AsText関数は、ジオメトリの内部表現を文字列形式に変換します。

    注:MySQL5.0以降の空間拡張サポートを使用する必要があります。また、クエリを高速化するには、「MyIsam」データベースエンジンを使用します。

于 2013-02-23T06:38:16.607 に答える
0

残念ながら、MySQL には半径内のポイントを選択するような機能はありません。しかし、次の余弦法則式を簡単に使用できます: d = acos( sin(φ1)*sin(φ2) + cos(φ1)*cos(φ2)*cos(Δλ) )*R 2 点間の距離を取得します。ここで詳細を確認できます: http://www.movable-type.co.uk/scripts/latlong-db.html SQL クエリは次のようになります。

SELECT acos(sin(radians(Y(point1)))*sin(radians(Y(point2))) + cos(radians(Y(point1)))*cos(radians(Y(point2)))*cos(radians(X(point2))-radians(X(point1)))) * 6371 AS `distance`
FROM locations
于 2014-06-06T09:55:52.940 に答える