【问题标题】:Android Google map having more than a thousand markers?Android 谷歌地图有超过一千个标记?
【发布时间】:2023-03-28 23:31:01
【问题描述】:

我的应用程序中有一个地图视图。而且我必须在地图上显示超过 1,000 个叠加层。 我有一个包含这些地方的列表。那么,我是否必须通过迭代列表中的项目来创建 1,000 个叠加对象?谁能给我一个有效的方法来做到这一点?

【问题讨论】:

标签: android google-maps android-maps


【解决方案1】:

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

【讨论】:

  • 你好。我正在迭代另一个线程中的列表。现在在 itemizedOveray 上调用 populateNow 方法的位置
【解决方案2】:

为此,您不必制作 1000 个叠加层。只需在 itemizedoverlay 中添加叠加层并在 mapoverlay 中添加此 itemizedoverlay 并在添加新的 itemizedoverlay 之前填充叠加层..

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

【讨论】:

    【解决方案3】:

    下面的代码可以只显示可见区域标记和隐藏不可见区域标记;

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

    【讨论】:

      猜你喜欢
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 2016-02-04
      • 2016-07-31
      • 1970-01-01
      相关资源
      最近更新 更多