-
Point
を使用してポイントを作成しますGeometry
の値MyISAM
のデータ型 テーブル。 Mysql 5.7.5以降、InnoDB
テーブルはSPATIAL
もサポートするようになりました インデックス。 -
SPATIAL
を作成します これらのポイントのインデックス -
MBRContains()
を使用する 値を見つけるには:SELECT * FROM table WHERE MBRContains(LineFromText(CONCAT( '(' , @lon + 10 / ( 111.1 / cos(RADIANS(@lat))) , ' ' , @lat + 10 / 111.1 , ',' , @lon - 10 / ( 111.1 / cos(RADIANS(@lat))) , ' ' , @lat - 10 / 111.1 , ')' ) ,mypoint)
、または、MySQL 5.1
以上:
SELECT *
FROM table
WHERE MBRContains
(
LineString
(
Point (
@lon + 10 / ( 111.1 / COS(RADIANS(@lat))),
@lat + 10 / 111.1
),
Point (
@lon - 10 / ( 111.1 / COS(RADIANS(@lat))),
@lat - 10 / 111.1
)
),
mypoint
)
これにより、ボックス内のほぼすべてのポイントが選択されます(@lat +/- 10 km, @lon +/- 10km)
。
これは実際にはボックスではなく、球形の長方形です。球の緯度と経度にバインドされたセグメントです。これは、フランツジョセフランドの単純な長方形とは異なる場合があります 、しかしほとんどの人が住んでいる場所ではそれにかなり近いです。
-
追加のフィルタリングを適用して、(正方形ではなく)円の内側のすべてを選択します
-
おそらく、大きな円の距離(長距離の場合)を考慮して、追加の細かいフィルタリングを適用します