通过GPS位置获取位置

时间:2013-11-14 10:51:09

标签: sqlite distance latitude-longitude basic4android

我有一个名为“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):

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

在数据库语句中进行计算并不神奇 - 计算机仍然需要检查每一行。 (有一个数据库软件,它旨在支持有效的空间查询,但SQLite不是一个。)您也可以只选择所有行,并在VB中进行距离计算。