Могу ли я добавить кластеризацию маркеров к моей уже установленной карте и маркерам?

Итак, у меня уже настроена карта, и я добавил все маркеры со значками и заголовками, используя функцию addMarkersToMap(), но они настолько разрежены, что я подумал о их кластеризации. Есть ли способ сгруппировать маркеры, которые я уже установил на своей карте? Я нашел этот код, который отлично подходит для кластеризации из файла .json, но мои маркеры уже настроены на карте, и я не знаю, как кластеризовать маркеры с уже настроенным значком и заголовком.

           protected void startDemo() {
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446), 10));

        mClusterManager = new ClusterManager<MyItem>(this,map);

        map.setOnCameraChangeListener(mClusterManager);
        try {
            readItems();
        } catch (JSONException e) {
            Toast.makeText(this, "Problem reading list of markers.", Toast.LENGTH_LONG).show();
        }
    }

    private void readItems() throws JSONException {
        InputStream inputStream = getResources().openRawResource(R.raw.radar_search);
        List<MyItem> items = new MyItemReader().read(inputStream);
        for (int i = 0; i < 5; i++) {
            double offset = i / 60d;
            for (MyItem item : items) {
                LatLng position = item.getPosition();
                double lat = position.latitude + offset;
                double lng = position.longitude + offset;
                MyItem offsetItem = new MyItem(lat, lng);
                mClusterManager.addItem(offsetItem);
            }
        }

person Shaheedah    schedule 12.05.2014    source источник


Ответы (1)


Вы не можете использовать кластер вместе с уже настроенным пользовательским маркером (с заголовком и сниппетом).

Как только вы начнете использовать кластер, менеджер кластера возьмет на себя все задачи по добавлению маркеров и связанные с ними задачи.

Но все надежды не потеряны!!

Вы можете добавить переменные POJO, их геттеры и сеттеры внутрь объекта MarkerItem, который вы создали для менеджера кластера.

Затем вы можете создать такой класс внутри самой карты,

class OwnIconRendered extends DefaultClusterRenderer<MyItem> {

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

        @Override
        protected void onBeforeClusterItemRendered(MyItem item, MarkerOptions markerOptions) {
            //markerOptions.icon(item.getIcon());
            markerOptions.snippet(item.getContact());
            markerOptions.title(item.getName());
            super.onBeforeClusterItemRendered(item, markerOptions);
        }
}

и установите этот рендер для вашего кластерного менеджера, как это

mClusterManager.setRenderer(new OwnIconRendered(activity.getApplicationContext(), getMap(), mClusterManager));

Для более подробного объяснения вы можете сослаться на этот ответ, на который я ссылался. http://stackoverflow.com/questions/27745299/how-to-add-title-snippet-and-icon-to-clusteritem

person RmK    schedule 12.01.2015