如何有效地存储来自Android应用程序的LatLng路径路径

时间:2015-08-19 19:24:32

标签: android spring google-maps google-maps-api-3 ehcache

我正在研究一款能够跟踪车辆位置的Android应用程序,并在点击“启动车辆”按钮后每秒向另一个弹簧网络应用程序发送一个LatLng点。 我需要存储此位置,以便在谷歌地图中呈现,以在地图上显示车辆的实时位置。它运行正常,但是,我必须存储所有获得的点,以便在驾驶员从应用程序点击“停止车辆”时显示完整的路线。

我已经应用了以下策略,但似乎都效率低下且资源消耗太多:

  • 当每个当前位置请求到达时,将位置存储在服务器端的列表中,并将其保存在servletContext中。随着收到的每一点继续更新列表。问题:对于即使大约1小时的旅程,也会收到太多积分,并且它们会占用大量内存。如果服务器关闭或崩溃,servletContext就会消失,整个数据也就消失了。
  • 将位置存储在DB中的表行中(使用PostgreSQL)。问题:何时应将条目保留在DB中?然后使数据库事务+消耗那么多的数据库空间?费劲,对吗?
  • 不要将所有位置存储在服务器端,只需将当前位置保存在实时地图中即可。而是保留Android应用程序端的位置列表,并在驱动程序选择停止车辆时将其发送到服务器。问题:从服务器端听起来很公平,但Android手机是否能够处理同一个大的列表,然后在通话中发送给服务器?
  • 使用hibernate和ehcache。我应该考虑一下吗?

我坚持如何通过占用最少的资源和减少生产服务器成本来有效地做到这一点。

任何帮助都会受到Android,服务器和整个方法的赞赏:)

1 个答案:

答案 0 :(得分:1)

将您的数据减少到有意义的数量:

  • 而不是按固定的时间间隔发送数据,而是注意位置的变化。
  • 使位置更改阈值与速度相关;在高速公路上,一英里可能足够准确,而在城市驾驶中,你可能希望分辨率低至100码。
  • 在Android应用中收集您的数据点,然后对其进行插值。如果你在两个城市之间开一条直线,那么没有理由报告所有数百个中间点,而只是报告终点。