2010-06-29 52 views
0

我正在使用MySQL GIS和Spatial Extensions。查找包含與MySQL的點的區域

我有一張桌子上有經緯度和半徑描述的「圓形」區域。

我需要一個查詢來獲取所有的行,其區域包含由經度和緯度定義的給定點。 「圓形」區域可以相交,因此該點可以落在多個區域中。

+0

有一個類似的問題在這裏:http://stackoverflow.com/questions/1078386/see-if-lat-long-falls-within-a-polygon-using-mysql由保羅·迪克森答案(這基本上,你不能使用MySQL的GIS功能)符合我對這種情況的理解。 – Mike 2010-06-29 09:07:40

回答

0

我想出了一個解決方案,我想在這裏發佈只是爲了對它有意見。請注意,上面的表格結構通過添加一個使用每個插入點的緯度和經度構建的新列「位置點」進行了輕微修改。

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