2013-11-14 223 views
0

我有一个名为“pois”的表,我想运行SQL查询,它将在500米内显示与手机GPS位置最近的所有位置,我将MySQL代码复制到某处并将其用于SQLLite和它不起作用,也许任何人都可以帮助我将查询翻译成SQLLite查询版本?通过GPS位置获取位置

的代码如下:

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

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

+0

我有149000条记录,选择所有行,我认为它不是很好,我已经在php/mysql上测试了它,它工作正常...... –

+0

如果您选择所有行或不是,并不重要。数据库不是神奇的,仅仅因为你在SQL语句中写了一些东西并不意味着它变得高效。他们将会运行相同的测试条件。 – Sneftel

1

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

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

+0

如何计算一个边界矩形,我需要代码,谢谢 –

+0

我可以研究它,但你可以。只需使用一个函数来计算纬度上下一段距离和左右一定距离的经度。 –