我现在有一张表,里面有两个字段,分别是x,y坐标
我现在得到的参数比如是(0,0),(900,900),30,30四个参数
就是把这个坐标范围(0,0),(900,900)分成横30块,纵30块,
即 Xmin,Xmax Ymin,Ymax
0,0 30,30
30,0 60,30
60,0 90,30
......
870,870 900,900
共900块
有什么高效的方法可以求出每块区域里点的个数,即表x,y的坐标落在这个区域里(sql或算法)
我现在得到的参数比如是(0,0),(900,900),30,30四个参数
就是把这个坐标范围(0,0),(900,900)分成横30块,纵30块,
即 Xmin,Xmax Ymin,Ymax
0,0 30,30
30,0 60,30
60,0 90,30
......
870,870 900,900
共900块
有什么高效的方法可以求出每块区域里点的个数,即表x,y的坐标落在这个区域里(sql或算法)
而我的表里每条记录都是一个点的x y坐标,如果只有一块范围的话
sql:
select count(*) from table where x>Xmin and x<Xmax and y>Ymin and y<Ymax因为我得到的范围坐标和分成的块数是不确定的,不知这样的SQL好不好写,或是有别的办法
设count[30][30],x轴范围的最左边界xL,最有边界xR,y轴类似,yU,yD
每个小范围宽度XWidth = (xR-xL)/30,同理得YWidth
对每个(x,y)
if(x<xL || x>xR || y>yU||y<yD)
return;
xBelong = (x-xL)/XWidth;--取整
yBelong = ( y-yD)/YWidth
count[xBelong][yBelong]
上述是假设,x,y>0,对负数情况应该也可以做一下处理即可
写漏啦
你的道理我明白,我现在就是如果表的数据量很大,像这样把数据全取出再逐条比较效率是一个问题
这样的SQL应该怎么写呢
select count(*) from table where x>Xmin and x <Xmax and y>Ymin and y <Ymax