Android行简化
我正在寻找一些最佳实践建议 我创建了一个应用程序(非常像mytracks),它可以收集GPS测量值并将其显示在地图上。我希望能够以10秒的间隔记录24小时的GPS数据。这是大量数据,所以我没有将其保存在内存中,而是在数据到达时将其存储到SQLiteDB中。在draw()函数中,我选择所有内容并将其绘制为路径对象 我的上述方法非常有效,直到我有超过4小时的数据。然后,draw函数将永远执行,这使得应用程序看起来非常慢 我想我需要做的是在地图上画一条简化的轨迹。我的问题是这样做的最佳方式是什么 i) 处理器密集型:在draw()中,从SQLiteDB中选择所有内容,构建简化的轨迹,并将其绘制在地图上 ii)内存密集:在内存中保持简化的轨迹,在新数据到达时更新,在draw()中只需将其绘制到地图 iii)魔术:使用一些特殊的覆盖,我不知道哪些处理线简化为您 亲切问候,,Android行简化,android,Android,我正在寻找一些最佳实践建议 我创建了一个应用程序(非常像mytracks),它可以收集GPS测量值并将其显示在地图上。我希望能够以10秒的间隔记录24小时的GPS数据。这是大量数据,所以我没有将其保存在内存中,而是在数据到达时将其存储到SQLiteDB中。在draw()函数中,我选择所有内容并将其绘制为路径对象 我的上述方法非常有效,直到我有超过4小时的数据。然后,draw函数将永远执行,这使得应用程序看起来非常慢 我想我需要做的是在地图上画一条简化的轨迹。我的问题是这样做的最佳方式是什么 i)
Cathal我最初的半随机想法:
注意,并不是每帧都做这些工作。用户完成平移或缩放地图后,只需重新计算路径。剩下的时间你只需画出你已经计算过的路径。我最初的半随机想法:
注意,并不是每帧都做这些工作。用户完成平移或缩放地图后,只需重新计算路径。剩下的时间,你只需画出你已经计算过的路径。奇怪的是,我只是在看大约5年前我为做类似事情而编写的代码 以下是我所经历的步骤:
- 将数据集简化为仅可见的细节。我设计了几个可插拔的简化策略,但有一个用于公差和输入/输出点渲染的通用接口。更多关于如何设计它下面
- 缓存简化点列表的紧凑、快速访问版本。对于大数据集,尽可能多地使用基本体(而不是点对象)是有帮助的。使用
位置,每个点需要128字节,10000个点需要1.3MB内存双精度
- 高效渲染,且不会产生垃圾。通过x和y坐标的int/float/double数组进行迭代是最好的,使用一个紧密的渲染循环,在循环之外尽可能多地进行渲染。如果只是“绘制此路径”,您会惊讶于一次可以渲染多少点
- 添加新点时通知简化程序,并在将新点添加到缓存点列表之前运行新点。根据需要进行更新,但尽量只处理最新的
迭代器
,并让简化算法使用它。这样,这些点不必都在内存中,您可以从DB查询中获取数据。例如,迭代器可以包装JDBC结果集。Simplifier还应该有一个“公差”值,以确定在忽略点之前点的接近程度
如何简化点集/多边形线:
有很多算法
- 最简单的方法是删除小于$