Android谷歌地图有超过一千个标记?

时间:2012-11-02 05:17:00

标签: android google-maps android-maps

我的应用程序中有一个mapview。我必须在地图上显示超过1,000个叠加层。 我有一个包含这些地方的清单。那么,我是否必须通过迭代列表中的项目来创建1,000个重叠对象?任何人都可以给我一个有效的方法吗?

3 个答案:

答案 0 :(得分:0)

为此您不必进行1000覆盖..只需在itemizedoverlay中添加叠加并在mapoverlay中添加此itemized覆盖并在添加新的逐项覆盖之前填充叠加层。

try
         {
         point = new GeoPoint((int) (Double.parseDouble(list.get(i).getLatitude()) * 1e6),(int) (Double.parseDouble(list.get(i).getLongitude()) * 1e6));
         overlayitem = new OverlayItem(point, list.get(i).getLocationName()+"_@_"+list.get(i).getLatitude()+"_@_"+list.get(i).getLongitude()+"_@_yes", list.get(i).getAddress());
         itemizedoverlay.addOverlay(overlayitem);
         itemizedoverlay.populateOverlay();
                 mapOverlays.add(itemizedoverlay);
         }
         catch (Exception e)
         {
            Log.v("log",""+e.toString());
            e.printStackTrace();
         }

答案 1 :(得分:0)

Sanket正在这样做的方式是在添加每个点之后填充点,这往往会滞后。一种更有效的方法可以这样做:

发生的事情是每次添加GeoPoint时都会填充MapView。尝试将其添加到您的代码中:

在您完成GeoPoints循环后放置此代码

itemizedOverlay.populateNow();

并将itemizedOverlay更改为:

public void addOverlay(OverlayItem overlay) {
m_overlays.add(overlay);
    }
public void populateNow()
{
populate(); 
}

@Override
protected OverlayItem createItem(int i) {
return m_overlays.get(i);
}

@Override
public int size() {
return m_overlays.size();
}

答案 2 :(得分:0)

您只能通过以下代码显示可见区域标记,而隐藏不可见区域标记;

mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
    public void onCameraChange(CameraPosition cameraPosition) {
         LatLngBounds bounds = mMap.getProjection().getVisibleRegion().latLngBounds;

         for (Marker marker : markerArrayList) {
             if (bounds.contains(marker.getPosition())) {
                   marker.setVisible(true);
             } else {
                   marker.setVisible(false);
             }
        }
      }
   });