2013-01-24 143 views
1

我想从数据库中获得距离给定点2公里内某些指定距离的点。为了这个,我使用sqllite下面的查询,找到多个点之间的距离

public Cursor GetLoc(int lat, int longi, int dist) 
    { 
     Cursor c = db.rawQuery("SELECT *, ((Math.acos(Math.sin("+ lat +"* PI()/180) * Math.sin("+ LATITUDE +"* PI()/180) + Math.cos("+ lat +"* PI()/180) * Math.cos("+LATITUDE+"* PI()/180) * Math.cos(("+ longi +" - "+LONGITITUDE+") * PI()/180)) * 180/PI()) * 60 * 1.1515 * 1.609344) AS distance FROM " + LOCATION_TABLE +" WHERE distance = " + dist, null); 
     return c; 
    } 

在此查询纬度和LONGITITUDE是LOCATION_TABLE列。

此查询给出正确的结果在MySQL,但在这里它给这个错误

android.database.sqlite.SQLiteException: near "(" 

我没有得到其中的查询问题。 Plz的帮助。

+1

如果您将数据从数据库中提取出来,将其存储在内存中,然后计算计算,您将会有更轻松的时间。我有一种感觉,要求sqllite做计算并不是那么有效。 –

+0

另外,为什么你使用trig函数进行简单的距离计算? [毕达哥拉斯定理](http://en.wikipedia.org/wiki/Pythagorean_theorem)可以帮助你在这里... – Geobits

+0

@ stealth-rabbi,我知道这种方式,但如果1000个位置被保存在数据库中比它会影响程序效率,因为我必须在地点改变时运行此功能。你认为在保存大量位置时进行这种处理是个好主意吗? – user1743317

回答

2

如果您使用的是Android,我建议您使用Location类的distanceTo()方法。我不会要求DB执行此操作

更多信息here