太多(可能超过10,000个)绘制的多边形落后谷歌地图

时间:2017-01-31 17:18:36

标签: android google-maps

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

我只创建一次多边形,但是存在一个主要的一致性延迟'我加的越多(可能有数万个),帧率越低,最终打破了应用程序。

这是代码的当前部分,用于创建和添加每个' Square'到一个hashmap。

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));

我的问题是,究竟是什么导致它滞后这么多(我意识到它必须是绝对数量,但我需要细节,重新绘制每一帧?记忆?)我怎样才能满足我对这个巨大网格的需求以某种方式叠加,并没有太多滞后。无论是我目前的思路还是新方式。

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

2 个答案:

答案 0 :(得分:2)

我最终做的最好的工作是

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

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

答案 1 :(得分:0)

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

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

Google Maps API v2 draw part of circle on MapFragment

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