查找包含MySQL点的区域

时间:2010-06-29 08:59:24

标签: mysql gis spatial

我正在使用MySQL GIS和Spatial Extensions。

我的桌子上有“圆形”区域,由纬度,经度和半径描述。

我需要一个查询来获取其区域包含由纬度和经度定义的给定点的所有行。 “圆形”区域可以相交,因此该点可以落在多个区域中。

1 个答案:

答案 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 //