おそらく、geometry
のPOINTデータのxアイテムとyアイテムです。 列は緯度と経度の度数です。
MySQLでこのルックアップを効率的に行うには、いくつかのことが必要になります。
- MyISAMテーブル(またはMySQLバージョン5.7以降およびInnoDBまたはMyISAMのいずれか)
- ジオメトリ列のNOTNULL資格
- 空間インデックス
ALTER TABLE flags ADD SPATIAL INDEX (coordinates)
- 検索する長方形のテキスト表現を作成するためのコード
- SELECTステートメントでのGeomFromTextおよびMBRContains/MBRWithin関数の使用。
緯度/経度のボックスが、ウィンチェスター大聖堂(51.0606、-1.3131) 。そのポイントの周りにバウンディングボックスが必要です。このMySQLクエリは、その境界ボックスを斜めに横切る線のLINESTRING(テキスト)を生成します。
SELECT
CONCAT('LINESTRING(',
latitude-0.5,' ',longitude-0.5,
',',
latitude+0.5 ,' ',longitude +0.5,
')') AS box
FROM (
SELECT 51.0606 AS latitude, -1.3131 AS longitude
) AS coord
クエリはこれを取得します:
LINESTRING(50.5606 -1.8131,51.5606 -0.8131)
また、ホスト言語で文字列処理を使用して、同様の種類のテキスト文字列を作成することもできます。必要なフォーマットはこれです。
LINESTRING(lat1 long1, lat2 long2)
次に、これを使用して、次のように空間テーブルを検索できます。
SELECT whatever, whatever
FROM flags
WHERE MBRContains(
GeomFromText( 'LINESTRING(50.5606 -1.8131,51.5606 -0.8131)' ),
flags.coordinates)
これにより、空間インデックスが活用され、flags
のすべての行が検索されます。 その座標は、その対角線の境界ボックス内にあります。
ここにいくつかの
flags
の場合 テーブルに含まれる行が数十万行未満の場合、緯度と経度の列(FLOATデータ型、インデックス付き)を備えた通常のテーブル(空間テーブルではない)も同様に機能し、開発とデバッグが容易であることがわかります。
私はそのテクニックに関するチュートリアルを書きました。 http://www.plumislandmedia.net/mysql/haversine-mysql-最寄-loc/