如何优化Android中的空间数据检索

时间:2015-08-20 09:14:22

标签: android sqlite gps

我有SQLite表包含1.5M行,该表包含<lat,lng, info>,我想要做的是,每次我从{{1}接收数据“lat,lng”我应该访问该表并显示相应的信息。

我的问题是,这项操作是否详尽且耗时?如果是,每次收到GPS数据时,如何从表中获得更好的数据检索?

6 个答案:

答案 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';

这不适合你的目的吗?