首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用sql查找圆圈中的点

用sql查找圆圈中的点
EN

Stack Overflow用户
提问于 2014-01-14 16:34:36
回答 3查看 1.3K关注 0票数 1

我在做一个和poi有关的项目。我在SQL数据库中存储了一些poi,但是在存储poi之前,我想检查在数据库中给出的坐标没有poi,并且在我将要添加的poi的1km区域附近也没有相同名称和相同类型的poi。我已经在网上搜索过了,但是我还没有想出一些有用的东西!这里是我的方法的一部分,它试图检查半径1公里内是否有另一个poi!

PS : GPS是表的名称。

代码语言:javascript
运行
复制
        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();
        }
        }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-14 17:01:37

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

代码语言:javascript
运行
复制
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,这些pois不可能与一些数学放在一起。

票数 0
EN

Stack Overflow用户

发布于 2014-01-14 18:12:00

忽略曲率,距离公式可以用来寻找两点(x1,y1)和(x2,y2)之间的距离。

因此,如果从一个点(A,B)开始,而您的表中有X和Y的列,则如下所示:

代码语言:javascript
运行
复制
SELECT *
FROM TABLE
WHERE   root( sqr(X - A) + sqr(Y - B) ) <= 1

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

警告:理论上,这会在国际日期线附近分解(因为经度179接近-179),但在一个典型的应用程序中,这不应该是一个问题。

票数 1
EN

Stack Overflow用户

发布于 2014-01-14 16:39:39

我想像GIS这样的PostGIS可以给你提供现成的功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21118771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档