太多(可能是 10,000+)绘制的多边形滞后于谷歌地图



目前在我的应用程序中,通过逐个绘制每个多边形正方形并用颜色填充,在地图上绘制一个"网格"。然后,我将多边形对象添加到地图中,以便以后根据需要进行修改。

只创建每个多边形一次,但是随着我添加的越多(可能数以万计),存在一个主要的一致"滞后"和低帧速率,最终破坏了应用程序。

这是创建每个"Square"并将其添加到哈希映射的当前代码部分。

double latScale = 0.000180;
double lngScale = 0.000288;
PolygonOptions po = new PolygonOptions()
        .add(   new LatLng(lat, lng),
                new LatLng(lat, lng + lngScale),
                new LatLng(lat - latScale, lng + lngScale),
                new LatLng(lat - latScale, lng))
        .strokeWidth(3f)
        .strokeColor(Color.argb(220, 0, 0, 0));
if (colors.containsKey(color)){
    po.fillColor(colors.get(color));
}
else{
    po.fillColor(colors.get("default"));
}
gridSquares.put(square_id, mMap.addPolygon(po));

我的问题是,究竟是什么原因导致它如此滞后(我意识到它一定是绝对的数量,但我需要细节,重新绘制每一帧?我怎样才能以某种方式满足我对这个巨型网格覆盖的需求,而不会滞后太多。要么用我目前的思路,要么用一种新的方式。

如果需要进一步澄清,请询问。

我最终做的非常有效的是

  1. 在谷歌地图中为我需要的每个多边形使用 GroundOverlay,为每个多边形使用小分辨率图像(30x30,但是如果您只需要一种颜色,这可能是 1x1),而不是绘制每个多边形。这大大提高了性能。

  2. 调用 OnCameraIdleListener 将每个 GroundOverlay 设置为可见或不可见,具体取决于它当时是否在屏幕视图中。我最终在屏幕周围使用了一个小缓冲区,以使叠加层也在此区域中可见。

我认为您应该从自定义磁贴提供程序开始。

我根据这篇文章写了类似的东西:

Google Maps API v2 在 MapFragment 上绘制圆圈的一部分

使用这种方法在地图上显示大约 1000 条折线是平滑的。

最新更新