2

我试图在我的地图上实现集群标记,它有点奇怪,首先,它显示具有正确数量的标记的集群标记,但是当我缩小参加其生成另一个群集标记,我不知道它是从哪里来的,为什么它显示在地图上的其他标记,我心底添加一些图像,以便更好地解释:集群标记错误计算时缩小Android谷歌地图

enter image description here

这里是放大的图像,正如你所看到的,我有一个带有8个点的集群标记,另一个单独存在,所以当我缩小它时,应该给我一个9点的clusterMarker,但看看当我放大时会发生什么out:

enter image description here

什么连得7分该集群标记做什么呢?

这里是我的代码:

public class MapaViagem extends FragmentActivity implements ClusterManager.OnClusterClickListener<MyItem>, ClusterManager.OnClusterItemClickListener<MyItem> { 

    private GoogleMap googleMap; 
    private String rm_IdViagem; 
    private List<ClienteModel> mClienteModel = new ArrayList<ClienteModel>(); 
    private List<EnderecoModel> mEnderecoModel = new ArrayList<EnderecoModel>(); 
    private ArrayList<LatLng> coordList = new ArrayList<LatLng>(); 
    private ArrayList<String> nomes = new ArrayList<String>(); 
    private ViagemModel mViagemModel = new ViagemModel(); 
    private ClusterManager<MyItem> mClusterManager; 
    private ProgressDialog dialog; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     setContentView(R.layout.maps); 





     try { 

      Bundle parametros = getIntent().getExtras(); 
      rm_IdViagem = parametros.getString("id_viagem"); 

      Repositorio ca = new Repositorio(this); 
      mViagemModel = ca.getViagemPorId(Integer.valueOf(rm_IdViagem)); 

      Repositorio cl = new Repositorio(this); 
      mClienteModel = cl.getClientesViagem(Integer.valueOf(rm_IdViagem)); 


      String waypoints = "waypoints=optimize:true"; 
      String coordenadas = ""; 

      if(mClienteModel != null) { 


       for (int i = 0; i < mClienteModel.size(); i++) { 


        Repositorio mRepositorio = new Repositorio(this); 
        mEnderecoModel = mRepositorio.getListaEnderecosDoCliente(Integer.valueOf(mClienteModel.get(i).getClientes_id())); 

        for (int j = 0; j < mEnderecoModel.size(); j++) { 

         // Loading map 
         initilizeMap(); 
         // Changing map type 
         googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
         // googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
         // googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
         // googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); 
         // googleMap.setMapType(GoogleMap.MAP_TYPE_NONE); 

         // Showing/hiding your current location 
         googleMap.setMyLocationEnabled(true); 

         // Enable/Disable zooming controls 
         googleMap.getUiSettings().setZoomControlsEnabled(true); 

         // Enable/Disable my location button 
         googleMap.getUiSettings().setMyLocationButtonEnabled(true); 

         // Enable/Disable Compass icon 
         googleMap.getUiSettings().setCompassEnabled(true); 

         // Enable/Disable Rotate gesture 
         googleMap.getUiSettings().setRotateGesturesEnabled(true); 

         // Enable/Disable zooming functionality 
         googleMap.getUiSettings().setZoomGesturesEnabled(true); 


         float latitude = Float.parseFloat(mEnderecoModel.get(j).getLatitude()); 
         float longitude = Float.parseFloat(mEnderecoModel.get(j).getLongitude()); 


         coordenadas += "|" + latitude + "," + longitude; 


         nomes.add(mClienteModel.get(i).getNome()); 


         coordList.add(new LatLng(latitude, longitude)); 




         mClusterManager = new ClusterManager<MyItem>(MapaViagem.this, googleMap); 


         mClusterManager.setRenderer(new MyClusterRenderer(MapaViagem.this, googleMap, mClusterManager)); 
         addItems(coordList, nomes); 

         googleMap.setOnCameraChangeListener(mClusterManager); 
         googleMap.setOnMarkerClickListener(mClusterManager); 


         mClusterManager.setOnClusterClickListener(this); 

         mClusterManager.setOnClusterItemClickListener(this); 








         mClusterManager.cluster(); 

         googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 5)); 


        } 


       } 

          String sensor = "sensor=false"; 
          String params = waypoints + coordenadas + "&" + sensor; 
          String output = "json"; 
          String url = "https://maps.googleapis.com/maps/api/directions/" + output + "?" + params; 
          ReadTask downloadTask = new ReadTask(); 
          downloadTask.execute(url); 
      } 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 


    public class MyClusterRenderer extends DefaultClusterRenderer<MyItem> { 

     public MyClusterRenderer(Context context, GoogleMap map, 
           ClusterManager<MyItem> clusterManager) { 
      super(context, map, clusterManager); 
     } 

     @Override 
     protected void onBeforeClusterItemRendered(MyItem item, MarkerOptions markerOptions) { 
      super.onBeforeClusterItemRendered(item, markerOptions); 

      markerOptions.title(String.valueOf(item.getName())); 
     } 

     @Override 
     protected void onClusterItemRendered(MyItem clusterItem, Marker marker) { 
      super.onClusterItemRendered(clusterItem, marker); 



      //here you have access to the marker itself 
     } 

     @Override 
     protected boolean shouldRenderAsCluster(Cluster<MyItem> cluster) { 
      return cluster.getSize() > 1; 
     } 



    } 
} 

回答

1

人们似乎在这个代码的问题:

coordenadas += "|" + latitude + "," + longitude; nomes.add(mClienteModel.get(i).getNome()); 
coordList.add(new LatLng(latitude, longitude)); 
mClusterManager = new ClusterManager<MyItem>(MapaViagem.this, googleMap); 
mClusterManager.setRenderer(new MyClusterRenderer(MapaViagem.this, googleMap, mClusterManager)); 
addItems(coordList, nomes); 

你应该在那里加入这两个东西:

getMap().setOnCameraChangeListener(mClusterManager); 

private void addItems() { 

    // Set some lat/lng coordinates to start with. 
    double lat = 51.5145160; 
    double lng = -0.1270060; 

    // Add ten cluster items in close proximity, for purposes of this example. 
    for (int i = 0; i < 10; i++) { 
     double offset = i/60d; 
     lat = lat + offset; 
     lng = lng + offset; 
     MyItem offsetItem = new MyItem(lat, lng); 
     mClusterManager.addItem(offsetItem); 
    } 

下面是从文档的例子:https://developers.google.com/maps/documentation/android/utility/marker-clustering#simple

+0

这里是另外一个例子,但它是一个有点复杂,并使用了一些算法和锁类:https://github.com/googlemaps/android-maps-utils/blob/master /library/src/com/google/maps/android/clustering/ClusterManager.java – 2015-01-24 01:33:41