0

我有一个名为“pois”的表,我想运行 SQL 查询,它将显示 500 m 内距离手机 GPS 位置最近的所有位置,我将 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):

4

2 回答 2

1

SQLite 不提供您正在使用的数学函数,而且,IFAIK,您无法在 Android 中添加用户定义的函数。

我将计算一个边界矩形,以限制数据库行,并在数据库中查询该矩形内的条目。然后,对于每一行,计算精确距离以过滤掉过远的条目。这样我也可以节省大量的计算时间。

于 2013-11-14T11:04:33.583 回答
0

在数据库语句中进行计算并没有什么神奇之处——计算机仍然需要检查每一行。(有数据库软件是为了支持高效的空间查询而设计的,但SQLite不是。)你也可以只选择所有的行,然后在VB中进行距离计算。

于 2013-11-14T10:53:31.020 回答