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