как показать маркеры в соответствии с уровнем масштабирования карты - PullRequest
0 голосов
/ 16 июня 2019

Я использую много маркеров на своей карте, и если я уменьшаю масштаб, есть много больших маркеров, которые блокируют вид другого объекта карты.Я хочу показывать маркеры, только если уровень масштабирования небольшой.Я использовал это, но это не работает:

final List<Marker> list = new ArrayList<>();

        final Marker marker = mMap.addMarker(new MarkerOptions()
                .position(latLng)
                .icon(markerIcon)
                .title(title));

        list.add(marker);


        mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
            @Override
            public void onCameraChange(CameraPosition cameraPosition) {
                for(Marker m:list){

                    m.setVisible(cameraPosition.zoom>8);
                    //8 here is your zoom level, you can set it as your need.
                }


            }
        });

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

enter image description here

И отключите их, если масштаб будет таким: enter image description here

Ответы [ 2 ]

1 голос
/ 16 июня 2019

Я бы предложил вам использовать Marker Clustering

enter image description here

Вот краткое изложение необходимых шагов:

  1. Реализация ClusterItem для представления маркера на карте. Кластер item возвращает позицию маркера в виде объекта LatLng и необязательный заголовок или фрагмент.

  2. Добавить новый ClusterManager для группировки элементов кластера (маркеров) на основе на уровне увеличения.

  3. Установите для OnCameraIdleListener () карты значение ClusterManager, поскольку ClusterManager реализует слушатель.
  4. Если вы хотите добавить определенные функции в ответ на маркер событие клика, установите OnMarkerClickListener () карты в ClusterManager, поскольку ClusterManager реализует прослушиватель.
  5. Вставьте маркеры в ClusterManager.

Подробнее об этом можно прочитать здесь

0 голосов
/ 16 июня 2019

Я только что попробовал ваш код, и он на самом деле работает.Но обратите внимание, что уровень масштабирования 8 довольно далеко;Я воссоздал сектор на втором снимке экрана, и он на самом деле имеет уровень масштабирования около 12.

Также обратите внимание, что OnCameraChangeListener устарела, и вы должны использовать вместо него OnCameraMoveListener.

mMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
    @Override
    public void onCameraMove() {
        CameraPosition cameraPosition = mMap.getCameraPosition();
        for(Marker m:list){

            m.setVisible(cameraPosition.zoom>8);
            //8 here is your zoom level, you can set it as your need.
        }

    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...