用sql找到一个圆圈中的点

时间:2014-01-14 16:34:37

标签: java sql jdbc geometry points

我正在开展一个与poi有关的项目。我将一些pois存储在一个SQL数据库中,但是在我存储一个poi之前,我想检查一下我没有在数据库中给出的坐标poi,并且没有poi具有相同的名称和相同的类型。我将要添加的poi区域为1km。我在网上搜索过,但我还没有想出一些完整的帮助!这是我的方法的一部分,试图检查是否有另一个半径为1公里的poi!

PS:GPS是表格的名称

        for(i=0.0;i<=1.0;i=i+0.0001){
        try{
            query = "SELECT TYPE FROM GPS WHERE NAME='"+name+"' AND TYPE='"+type+"' AND     X='"+(x+i)+"' AND Y='"+(y+i)+"'";
            rs=state.executeQuery(query);
            if(!rs.next()){
                flag=1;
            }
            else{
                flag=0;
                break;
            }

        }catch(SQLException err){
            err.printStackTrace();
        }
        }

3 个答案:

答案 0 :(得分:1)

忽略曲率,a distance formula可用于查找两点(x1,y1)和(x2,y2)之间的距离。

enter image description here

所以,如果你从一个点(A,B)开始,你的表有X和Y的列,那么这就变成了:

SELECT *
FROM TABLE
WHERE   root( sqr(X - A) + sqr(Y - B) ) <= 1

将“root”和“sqr”替换为特定于DB的函数。

警告:理论上,这在国际日期线附近发生故障(因为经度为179接近-179),但这在典型应用中不应成为问题。

答案 1 :(得分:0)

我想像PostGIS这样的GIS可以为您提供开箱即用的功能。

答案 2 :(得分:0)

如果忽略曲率(并使用方框),您可以在单个查询中更有效地执行此操作,例如:

query = "SELECT TYPE FROM GPS 
WHERE NAME='"+name+"' 
AND TYPE='"+type+"' 
AND X < x+1 AND X > x-1
AND Y < y+1 AND Y > y-1;

如果需要,您可以遍历结果集并过滤出不在带有一些数学的圆圈中的pois。