网格就像在数据库中查询数据一样

时间:2015-04-03 01:59:59

标签: database grid

我的数据库中有一组网格,每个网格由四个点组成,每个点的坐标为(x,y),而每个网格可以通过其行和列来定位。

为了避免数据库中点的冗余,我只保存底部左侧点的坐标,如下所示:

enter image description here

现在对于具有坐标(x1,y1)的给定点,我必须找到该点所在的网格,也就是说找到一个网格说它是g

g.left <= x1 <= g.right && g.bottom <=y1 <= g.top

由于网格是连续的(不包​​括边缘处的网格),因此问题变为:

g.left <= x1 <= top_right_grid.left && g.bottom <= y1 <= top_right_grid.bottom

top_right_grid必须满足此要求:

top_right_grid.col - g.col = 1, and top_right_grid.row - g.row = 1

所以我用它来查找结果:

SELECT g.*, top_right_grid.left,top_right_grid.bottom
FROM gis_grid g,gis_grid gd1
WHERE   top_right_grid.row - g.row =1 AND 
        top_right_grid.col - g.col =1 AND 
        g.left <=x1 AND 
        top_right_grid.left >= x1 AND 
        g.bottom/1e8 <= y1 AND 
        top_right_grid.bottom/1e8 >= y1;

但是我现在遇到问题,对于p1点,我会得到一个正确的网格,但对于点p3,应该有两个网格符合要求,但我只得到了一。对于点p2,我无法得到结果,因为数据库中不存在top_right_grid

所以我想知道是否有更好的想法来建模这类数据,或者尽可能快地进行查询?

0 个答案:

没有答案