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

如何在Android中优化空间数据检索,android,sqlite,gps,Android,Sqlite,Gps,我有SQLite表格包含1.5M行,表格包含,我想做的是,每次我从GPS接收数据“lat,lng”,我都应该访问表格并显示相应的信息 我的问题是,这项操作是否详尽且耗时?如果是,如何在每次接收GPS数据时更好地检索表中的数据?您可以使用以下命令进行尝试: SELECT info FROM Table WHERE lat = 'lat' AND lng = 'long'; 这对你的目的来说还不够好吗 您不想搜索准确的位置(GPS不够精确),只想搜索附近的条目 使用“正常”索引时,二维间隔搜索效率

我有
SQLite
表格包含1.5M行,表格包含
,我想做的是,每次我从
GPS
接收数据“
lat,lng
”,我都应该访问表格并显示相应的信息


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

您可以使用以下命令进行尝试:

SELECT info FROM Table WHERE lat = 'lat' AND lng = 'long';

这对你的目的来说还不够好吗

您不想搜索准确的位置(GPS不够精确),只想搜索附近的条目

使用“正常”索引时,二维间隔搜索效率不高。 您需要使用类似于的东西,这在默认情况下在Android上是不可用的


如果您的表格从未更改,您可以在另一台机器上,在应用程序中准备R-tree。

我不知道您的数据到底是什么样子,但我要做的第一件事是(考虑到GPS位置可能不会有太大变化)首先创建一个坐标范围较小的临时表,这样就可以将1.5M的记录减少到几千条。那么一切都应该更快


我不知道@CL提到的R-Tree,但如果你能在android下使用它们,它们看起来确实很有希望。

如果你的用例不是像其他建议的那样-意味着你在寻找一个确切的位置,而不是一个区域,那么你所能做的就是确保在(lat,lng)上添加一个索引祈祷最好的

CREATE INDEX index_lat_lng ON MyTable(lat,lng);

你的问题太模糊了。
我想做的是,每当我从GPS接收到数据“lat,lng”,我都应该访问表格并显示相应的信息。

您需要定义
接收数据的频率。
它会是详尽和耗时的吗?可能会,可能不会,但不知道您接收数据的频率。

鉴于上述情况,您是否考虑并假设GPS坐标并非来自整个车间,在内存中创建当前纬度和经度所在区域及其周围区域的
数据库快照,并使用该快照,直到它们偏离当前快照区域为止。此时,您需要写出现有数据,为新坐标创建新快照。快照区域可以以度、分或秒来定义,这取决于我想您正在跟踪的对象的移动速度。

您应该使用Spatialite,它是一个用于地理数据的Sqlite扩展,它允许您创建空间索引,然后查询包含在矩形中的数据,例如,距离您的gps坐标大约x米。

不应该成为问题,听起来像是一个简单的
,其中lat=x和lng=y
。您可能想考虑性能问题,在查询数据的频率上,您可以编写一个检查,以确保不连续查询相同的值。或者,如果您不希望位置发生太多变化,甚至可以添加缓存(这取决于您的应用程序的功能)。此外,您可能想考虑这样一个大表在移动设备上的存储空间,但再次取决于应用程序,您可能没有任何其他选项,而不是存储所有的数据,只是把它们放在某类集合中,如<代码> ARARYLIST/<代码>或其他什么。尽管我不认为真的有必要这样做,正如已经说过的那样,除非你经常投票,否则不应该有真正的开销。如果你的投票太多,只需检查你最后一次投票点和你当前位置之间的距离是否大于某个增量。我同意,这个问题太广泛了。您没有为上下文提供任何代码,它都围绕着您轮询数据库多少次的问题。如果您认为自己做得太多,很可能是太多了,您需要对其进行限制。@rmaik:在这种情况下,当您将查询结果存储在内存中时,将使用缓存,以便下次调用相同的查询时,您可以从内存中获取结果,而不是从数据库中提取结果。例如,每次查询数据库时,将结果存储在某种类型的列表中,其中键是查询输入(x和y)。然后每次需要查询时,首先检查列表中是否有匹配的x和y,如果找到匹配项,则使用该结果,如果没有匹配项,则查询数据库(并缓存该结果)。@rmaik:从内存中提取将更快,但如果开始进行大量查询,则会增加开销。如果缓存的内存使用量过大,那么缓存本身将开始导致性能问题。选择取决于实际情况。例如,您甚至可以将缓存限制为最后10个唯一查询,这可能是一个很好的选择。所以,如果设备没有移动,您不必一直查询数据库中的相同位置,只需使用内存中的位置即可。事实上,我肯定会考虑这样做的问题是如何优化数据检索,而不是如何进行检索。不知道R*树,看起来很有趣!对于lat,GPS提供的lon几乎从来都不适合精确查找。也许他问了一个不清楚的问题,但你的回答并不能解决他的问题。据我所知,他想寻找一个特定的lat,lng。如果这不是他想要的,那么其他人的答案可能更相关,由他来决定,两个GPS接收器提供相同位置的可能性非常小,尽管站在同一位置,他无法进行精确的横向/纵向搜索,他说他保存GPS位置他从未说过他会获取原始GPS数据并使用它,也许他将gps保存在数据库中,然后将其发送到其他地方,然后想从数据库中检索信息,jizzzYou无法稍后检索,如果你不知道lat,则需要很长时间。你拿到lat了,我