我现在有一张表,里面有两个字段,分别是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或算法)

解决方案 »

  1.   

    区域里点的个数: (Xmax - Xmin+1)*(Ymax  - Ymin+1)应该不是楼主要的,不理解楼主要求
      

  2.   

    我得到的是一个坐标范围,把这个范围分成若干块,那么每块都会有自己的坐标
    而我的表里每条记录都是一个点的x y坐标,如果只有一块范围的话
    sql:
        select count(*) from table where x>Xmin and x<Xmax and y>Ymin and y<Ymax因为我得到的范围坐标和分成的块数是不确定的,不知这样的SQL好不好写,或是有别的办法
      

  3.   

    你用sql 的方法当然可以其实也可以逐个匹配,计数,无非也是O(n)的复杂度
    设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,对负数情况应该也可以做一下处理即可
           
      

  4.   

    上面是count[xBelong][yBelong] ++;
    写漏啦
      

  5.   

    谢谢楼上
    你的道理我明白,我现在就是如果表的数据量很大,像这样把数据全取出再逐条比较效率是一个问题
    这样的SQL应该怎么写呢
      

  6.   

    如果用sql的话,我估计得用个循环,循环次数就是块数,每次更改一下Xmin等不就行了,就用这个
    select count(*) from table where x>Xmin and x <Xmax and y>Ymin and y <Ymax