我正在开展一个与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();
}
}
答案 0 :(得分:1)
忽略曲率,a distance formula可用于查找两点(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),但这在典型应用中不应成为问题。
答案 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。