2013-05-09 5 views
0

У меня проблема с пользовательскими маркерами на картах Google. Я постараюсь объяснить, насколько смогу.Как удалить CustomMarker с Google Maps v2 android

У меня есть некоторые маркеры, и я сделал один Asyntask, который кластеризует его, если это необходимо, возвращая LinkedHashMap<Point, ArrayList<MarkerOptions>> clusters, где у меня есть кластеры. Каждая позиция представляет собой кластер (это возможно, чтобы иметь кластер с 1 маркером)

Когда я получил этот список, я добавляю Кластеры на карту:

здесь является деятельностью, где я взываю к Clusterizer.

protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 
     map.getUiSettings().setMyLocationButtonEnabled(true); 

     CameraUpdate camUpd1 = CameraUpdateFactory.newLatLngZoom(new LatLng(41.40520680710329,2.191342011603923),MAP_ZOOM_LEVEL);  
     map.animateCamera(camUpd1); 

     loadMarkers(); 

     map.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { 

      @Override 
      public void onCameraChange(CameraPosition position) { 
       if(position.zoom != oldZoom) { 
        try { 

         clusters = null;       
         map.clear(); 
         Clusterizer.setContext(getApplicationContext()); 
         clusters = Clusterizer.clusterMarkers(map, markers, INTERVAL); 

        } catch (ExecutionException e) { 
         e.printStackTrace(); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       }    
       oldZoom = position.zoom; 
      } 
     }); 

    } 


    private void loadMarkers() { 

     markers.add(new Marker(41.40520680710229,2.191342011603823,"Glorias1","Centro Comercial",true).getMarker()); 
     markers.add(new Marker(41.40520680710229+0.0005,2.191342011603823-0.0005,"Glorias11","Centro Comercial",true).getMarker()); 
     markers.add(new Marker(41.40520680710229+0.0005,2.191342011603823+0.0005,"Glorias111","Centro Comercial",true).getMarker()); 
     markers.add(new Marker(41.40520680710229-0.0005,2.191342011603823+0.0005,"Glorias1111","Centro Comercial",true).getMarker()); 
     markers.add(new Marker(41.40520680710229-0.0005,2.191342011603823-0.0005,"Glorias1111","Centro Comercial",true).getMarker()); 
    } 

И в Asyntask после расчета кластеров (это нормально) метод postExecute, делает это:

@Override 
     protected void onPostExecute(
       LinkedHashMap<Point, ArrayList<MarkerOptions>> clusters) { 

      map.clear(); 
      for(Point point: clusters.keySet()) { 
       ArrayList<MarkerOptions> markersForPoint = clusters.get(point); 
       MarkerOptions mainMaker= markersForPoint.get(0); 
       //If the point (taken from cluster, has more than 1 markerOption, means that has been clusterized, so It have to be printed with the //modified canvas that contains the number of markers clusterized) 
       if(markersForPoint.size() > 1) { 
        mainMaker.title(Integer.toString(markersForPoint.size())); 

        Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
        Bitmap bmp = Bitmap.createBitmap(80, 80, conf); 
        Canvas canvas1 = new Canvas(bmp); 
        Paint color = new Paint(); 
        color.setTextSize(35); 
        color.setColor(Color.BLACK 
        canvas1.drawBitmap(BitmapFactory.decodeResource(context.getResources(), 
          R.drawable.pin), 0,0, color);     
        canvas1.drawText("",10,40,color); 
        canvas1.drawText(Integer.toString(markersForPoint.size()), 10, 40, color); 

        mainMaker.icon(BitmapDescriptorFactory.fromBitmap(bmp)); 
        mainMaker.anchor(0.5f, 1); 
       } 
       map.addMarker(mainMaker); 
      } 
     } 

А вот проблема ...

Если это кластерный есть нет проблем, это показывает хорошо, но когда я сделал увеличение в cluster list, это нормально, но маркер не

Thats hoow выглядит кластер, когда «кластеризован» и когда он не кластеризуется

Как это исправить? Я очищаю карту до добавления маркеров ...

Спасибо за все!

кластерного:

enter image description here

Не Кластерный enter image description here enter image description here

+0

Непонятно, о чем вы просите. –

+0

@ MaciejGórski Я пытаюсь объяснить другим способом .. ^^. Когда я нажимаю «Увеличить» или «Уменьшить» на карте, если маркеры должны закрываться (помечены в пикселях на экране), я группирую ту, которая закрывается (например, 70 пикселей). Когда маркеры кластеризованы, я не использую маркер по умолчанию GMap, я использую custommarker, «drawed» с количеством маркеров, которые представляют.Но когда я делаю Zoom (кластер исчезает и теперь можно увидеть 5 маркеров (например), маркер, который представлял кластер, по-прежнему является обычным, когда предполагается, что он является маркером по умолчанию. – Shudy

ответ

0

Попробуйте добавить:

 color.setTextAlign(Align.CENTER); 

Возможно, вам придется настроить источник вашей краски, чтобы она была центрирована в маркере.

0

чищу карту, прежде чем добавить маркеры ...

Я не могу видеть клиринговую код и кажется, что вы не вызываете Marker.remove() на старых. Ясно, что у вас есть проблема с алгоритмом, и не получится ответить, если вы не предоставите полный код.

Вместо этого вы можете использовать один из алгоритмов кластеризации с открытым исходным кодом для API Google Maps Android v2: Android Maps Extensions или Clusterkraf. Последнее, по-видимому, ближе к тому, что вы хотите достичь - оно основано на расстоянии.

+0

Я добавил больше закодированных я использую 'map.clear()' для очистки карты от маркеров. И в postExecute() AsynTask, где я «рисую» пользовательский маркер, если маркер кластеризован – Shudy