我正在使用MySQL GIS和Spatial Extensions。
我的桌子上有“圆形”区域,由纬度,经度和半径描述。
我需要一个查询来获取其区域包含由纬度和经度定义的给定点的所有行。 “圆形”区域可以相交,因此该点可以落在多个区域中。
答案 0 :(得分:0)
我提出了一个解决方案,我想在此发布,以便对此有所了解。请注意,上面的表结构通过添加新列“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 //