我在做一个和poi有关的项目。我在SQL数据库中存储了一些poi,但是在存储poi之前,我想检查在数据库中给出的坐标没有poi,并且在我将要添加的poi的1km区域附近也没有相同名称和相同类型的poi。我已经在网上搜索过了,但是我还没有想出一些有用的东西!这里是我的方法的一部分,它试图检查半径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();
}
}
发布于 2014-01-14 17:01:37
如果忽略曲率(并使用正方形框),则可以在单个查询中更有效地执行此操作,如下所示:
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不可能与一些数学放在一起。
发布于 2014-01-14 18:12:00
忽略曲率,距离公式可以用来寻找两点(x1,y1)和(x2,y2)之间的距离。
因此,如果从一个点(A,B)开始,而您的表中有X和Y的列,则如下所示:
SELECT *
FROM TABLE
WHERE root( sqr(X - A) + sqr(Y - B) ) <= 1
将"root“和"sqr”替换为特定于DB的函数。
警告:理论上,这会在国际日期线附近分解(因为经度179接近-179),但在一个典型的应用程序中,这不应该是一个问题。
发布于 2014-01-14 16:39:39
我想像GIS这样的PostGIS可以给你提供现成的功能。
https://stackoverflow.com/questions/21118771
复制相似问题