MapView非常慢,地图上有1000个叠加项,即使只有2个可见项

时间:2012-08-02 12:13:11

标签: android android-mapview itemizedoverlay overlayitem

我有一个mapview,在mapview上显示1000个overlayitems。即使地图上只有两个重叠项目可见,地图移动也很慢(应用巨大的缩放)

如果只有少量的叠加层是可见的,那么可以优化mapview的移动速度更快吗?

由于

3 个答案:

答案 0 :(得分:2)

你可能已陷入通常的陷阱。如果您已经创建了自己的自定义覆盖,请确保您的addOverlay方法不会填充。首先应该在添加所有叠加层时发生填充。如果您每次添加时都填充,那么最终会有很多叠加层。

确保它为此过程使用2个方法,1个添加,1个填充:

public void addOverlay(CustomOverlayItem overlay){     mOverlays.add(覆盖); }

public void populateOverlay(){     填充(); }

如果这不是问题那么您应该考虑在屏幕范围之外或将引脚分组在一起时动态删除引脚。我相信有一些开源项目在这方面为你完成了工作。

答案 1 :(得分:1)

找到一个链接http://onthefencedevelopment.com/blog/using-google-maps-your-android-applications-%E2%80%93-part-3-adding-place-markers,仅绘制屏幕上的叠加层。还没有测试过,但看起来很有希望。

编辑:它有效

答案 2 :(得分:0)

子类MapView,覆盖dispatchDraw()。检测地图中心或缩放级别的更改:

@Override
public void dispatchDraw(Canvas canvas)
{
    super.dispatchDraw(canvas);

    GeoPoint gpCenterPoint = getMapCenter();
    int nZoomLevel = getZoomLevel();

    // either diff't zoom level or change to center point?
    if ( (gpCenterPoint.getLatitudeE6() != mCenterPoint.getLatitudeE6()) ||
         (gpCenterPoint.getLongitudeE6() != mCenterPoint.getLongitudeE6()) ||
         (nZoomLevel != mZoomLevel) )
    {
        // update pins here
                  updatePINS();

        mZoomLevel = nZoomLevel;
            mCenterPoint = gpCenterPoint;
    }
}

void updatePINS()
{
    int nLatitudeSpan = mapView.getLatitudeSpan();
    int nLongitudeSpan = mapView.getLatitudeSpan();

     // TODO insert/remove PINS as needed
}