我有SQLite
表包含1.5M行,该表包含<lat,lng, info>
,我想要做的是,每次我从{{1}接收数据“lat,lng
”我应该访问该表并显示相应的信息。
我的问题是,这项操作是否详尽且耗时?如果是,每次收到GPS数据时,如何从表中获得更好的数据检索?
答案 0 :(得分:2)
您应该使用Spatialite,它是一个与地理数据一起使用的Sqlite扩展,它允许您创建空间索引,然后查询包含在矩形中的数据,例如距离您的GPS坐标大约x米。
答案 1 :(得分:1)
您不想搜索确切的位置(GPS不够准确),但附近的条目。
使用&#39; normal&#39;时,二维间隔搜索效率不高。索引。 您需要使用R-tree index之类的内容,默认情况下在Android上不可用。
如果您的桌子永远不会改变,您可以在另一台机器上和应用程序中search for entries manually准备R树。
答案 2 :(得分:0)
我不确切知道你的数据是什么样的,但我要做的第一件事(假设GPS位置可能不会发展太多)是首先创建一个坐标范围较小的临时表,这样你就可以减少1.5M记录只有几千个。那么一切都应该更快。
我不知道R-Tree @CL谈到了,但如果只有你能设法在android下使用它们,它们看起来确实很有希望。
答案 3 :(得分:0)
如果您的用例不像其他建议那样 - 意味着您正在寻找一个确切的位置而不是一个区域,那么您所能做的就是确保在(lat,lng)上添加索引并为此做好准备最好...
CREATE INDEX index_lat_lng ON MyTable(lat,lng);
答案 4 :(得分:0)
你的问题远非如此
what i want to do is, for every time I receive data "lat,lng" from the GPS, I should access the table and display the corresponding info.
您需要定义receive
数据的频率
它会是详尽而耗时的吗?也许,也许不是,不知道你多久收到一次数据
鉴于上述情况,您是否考虑过并假设GPS坐标并非来自整个商店,而是创建in memory
数据库快照,显示当前纬度和经度所在区域及周边区域的快照。使用它直到他们偏离当前快照区域。此时,您需要写出现有数据,为新坐标创建新快照。快照区域可以按度数,分钟或秒来定义,具体取决于我认为您跟踪的事物的移动速度有多快。
答案 5 :(得分:-2)
你可以尝试使用如下命令:
SELECT info FROM Table WHERE lat = 'lat' AND lng = 'long';
这不适合你的目的吗?