ポイントは、データ型Point
の単一の列に格納する必要があります SPATIAL
でインデックスを作成できます インデックス(テーブルタイプがMyISAM
の場合 ):
CREATE SPATIAL INDEX sx_place_location ON place (location)
SELECT *
FROM mytable
WHERE MBRContains
(
LineString
(
Point($x - $radius, $y - $radius),
Point($x + $radius, $y + $radius)
)
location
)
AND Distance(Point($x, $y), location) <= $radius
これにより、「特定の半径内ですべてを検索する」などのクエリの速度が大幅に向上します。
プレーンなTM
を使用する方がよいことに注意してください 極座標(緯度と経度)ではなく、メトリック座標(東と北)。小さな半径の場合、それらは十分に正確であり、計算は大幅に簡略化されます。すべてのポイントが1つのヘミシュペールにあり、極から離れている場合は、単一の中央子午線を使用できます。
もちろん極座標を使用することもできますが、MBR
の計算式は 距離はより複雑になります。