【发布时间】:2012-07-18 11:19:34
【问题描述】:
我正在开发一个基于位置的 android 应用程序,它处理大量的叠加项目。
背景: 我想在地图上显示很多实体。实体的坐标随着它们的位置变化而实时变化。对应于更新的位置,实体应在地图上更新。实体可以增长到大量。
实施 我有两个叠加层。一个用于 MyLocationOverlay 显示用户位置,另一个用于 ItemizedOverlay 子类,其中包含我需要在地图上显示的所有实体。
问题 每当实体的位置发生变化时,都需要更新相应的覆盖项。问题是我不确定哪种方法是实现这一目标的最佳方法。我有这些选择
-
当我收到特定实体的位置时,我会从地图中删除所有叠加层并重新添加叠加层。现在使用更新的位置创建了覆盖项之一。
List<Overlay> overlays = map.getOverlays(); overlays.removeAll(overlays); overlays.add(new MyOverlay(marker,this)); 我为每个实体创建一个叠加层。这意味着我将创建 500 个叠加层,每个叠加层仅包含一个叠加项。我创建了一个 Overlay 类的子类,并添加了我自己的属性以清楚地识别实体并为每个实体创建一个。当我到达特定实体的位置更新时,我会迭代并获取特定的覆盖项,将其删除并添加一个具有更新位置的新项。
我不知道在性能方面哪个是最好的。
我觉得当实体数量超过 500 或 1000 个时,为每个实体的每次位置更新(可能很频繁)删除所有覆盖并重新添加所有覆盖会变得相当开销。
同时,遍历相同数量的实体也可以是相等的开销。
任何关于选择哪一个或更好的实现方式的建议都将不胜感激。
/安迪
【问题讨论】:
标签: android google-maps location overlay itemizedoverlay