我有一个名为“pois”的表,我想运行SQL查询,它将显示距离手机GPS位置最近的所有位置500米,我在某处复制了MySQL代码并将其用于SQLLite并且它不起作用,也许有人可以帮我翻译查询到SQLLite查询版本?
代码如下:
Sub GPS_LocationChanged (Location1 As Location)
Loc1 = Location1.Latitude
Loc2 = Location1.Longitude
Dim Cursor As Cursor
Qry = "Select place_id,place_name,lat,lon,poi_catid, ( 6371 * acos( cos( radians( " & Loc1 & " ) ) * cos( radians( lat ) ) * cos( radians( lon ) - radians( " & Loc2 & ") ) + sin( radians( " & Loc1 & " ) ) * sin( radians( lat ) ) ) ) as distance FROM pois HAVING distance < 0.5 ORDER BY distance"
Cursor = SQL1.ExecQuery(Qry)
For i = 0 To 15
Cursor.Position = i
ToastMessageShow(Cursor.GetString("place_name"),True)
Next
Cursor.Close
End Sub
错误消息说:
android.database.sqlite.SQLiteException:没有这样的功能:acos(代码 1):
答案 0 :(得分:1)
SQLite不提供您正在使用的数学函数,而且,IFAIK,您无法在Android中添加用户定义的函数。
我会计算一个边界矩形,限制数据库行,并查询数据库中该矩形内的条目。然后,对于每一行,计算精确距离以过滤掉条目太多。这样我也可以节省大量的计算时间。
答案 1 :(得分:0)
在数据库语句中进行计算并不神奇 - 计算机仍然需要检查每一行。 (有一个数据库软件,它旨在支持有效的空间查询,但SQLite不是一个。)您也可以只选择所有行,并在VB中进行距离计算。