在Android地图上处理大型叠加项目的最佳做法

时间:2012-08-30 11:44:59

标签: android maps android-maps

我有一种情况需要告诉用户附近的ATM所在的位置。问题是银行有10000台ATM。

当我使用地图进行网络编程时,我通常只在可见区域加载ATM。当用户进行平移或缩小时,我请求后端服务器提供更多的ATM并重新绘制所有叠加项。但我认为我们不能在移动设备上使用这种技术。

如果我使用来自https://developers.google.com/maps/documentation/android/hello-mapview的技术,我会受到性能影响。

处理此问题的最佳方法是什么?我们知道有一些问题:

  1. 装载所有自动柜员机会占用大量内存。
  2. 在用户进行平移时,在可见区域加载ATM可能会占用大量数据。 (我不知道如何获得可见的坐标边界)
  3. 我做了一些实验。加载1000个重叠项(ATM)(1000 x itemizedOverlay.addOverlayItem(anAtm);以及1 x populate())消耗了5秒。

    这样做有什么最好的做法吗?我真的希望Google能够为开发人员提供最佳实践。

    由于

2 个答案:

答案 0 :(得分:0)

您可以过滤服务器发回的ATM列表,将接近特定点的ATM分组,从而实现搜索结果显示的比例依赖性。

答案 1 :(得分:0)

您没有发布您的代码,所以我不知道您是否遵循我认为最好的方法:

1 - 创建itemizedOverlay

2 - 将所有项目(ATM)添加到itemizedOverlay

3-Call populate()

4 - 只有在这之后,你应该将itemizedOverlay添加到mapview.getoverlays()

如果您的内存中已经有10000台ATM,则几乎可以立即执行上述步骤。可能需要一些时间的是在移动或缩放地图时不断重绘屏幕,并显示所有这些标记。

如果您从数据库获取ATM,那么我建议使用AsynkTask来避免收到ANR消息。

祝你好运。