MySQL GIS と Spatial Extensions を使用しています。
緯度、経度、半径で記述された「円形」の領域を持つテーブルがあります。
緯度と経度で定義された特定のポイントを含む地域のすべての行を取得するクエリが必要です。「円形」の領域は交差する可能性があるため、ポイントは複数の領域に存在する可能性があります。
私は解決策を思いついたので、それについて意見を述べるためにここに投稿したいと思います。上記のテーブル構造は、挿入ごとに緯度と経度を使用して作成された新しい列 "location POINT" を追加することで、わずかに変更されていることに注意してください。
CREATE PROCEDURE GetRequestsAroundLocation( IN lat DOUBLE,
IN lon DOUBLE )
BEGIN
SET @answerLocation = GeomFromText( CONCAT( 'POINT( ', lat, ' ', lon, ' )' ) );
SELECT id, token, latitude, longitude FROM Request
WHERE answerId = -1 AND
Intersects( @answerLocation,
GeomFromText( CONCAT( 'POLYGON((', latitude - radius, ' ', longitude - radius, ',',
latitude + radius, ' ', longitude - radius, ',',
latitude + radius, ' ', longitude + radius, ',',
latitude - radius, ' ', longitude + radius, ',',
latitude - radius, ' ', longitude - radius, '))' ) ) ) AND
SQRT( POW( ABS( lat - latitude ), 2 ) + POW( ABS( lon - longitude ), 2 ) ) < radius;
END //