Google maps - загрузка маркеров - фильтр с маркером - PullRequest
0 голосов
/ 18 апреля 2019

Я хотел бы попросить вас помочь с моим кодом. У меня есть скрипт, где я загружаю и обрабатываю файл JSON через $. Ajax . С фильтрацией я также использовал функцию moveToLocation(). который работает хорошо, но не работает с markerclsuter , потому что мои точки после увеличения все еще "кластеризованы".

function moveToLocation(lat, lng, zoom){
    var center = new google.maps.LatLng(lat, lng);
    map.panTo(center);
    map.setZoom(zoom);
}

function addMarkers(v_data) {

        if(v_data!= null){
            removeMarkers();
        }

        $.ajax({ 
            type: 'POST', 
            url: 'get-places-v3.php', 
            data: {data : JSON.stringify(v_data)},
            dataType: 'json',
            success: function (data) { 

                //initialize(data.regionGps[0].lat, data.regionGps[0].lng, data.regionGps[0].zoom);
                console.log(data.regionGps[0].lat + ' ' + data.regionGps[0].lng);
                moveToLocation( data.regionGps[0].lat, data.regionGps[0].lng, data.regionGps[0].zoom );

                //console.log(data.regionGps[0].lat);

                $.each(data.locations, function(index, element) {

                    var latLng = new google.maps.LatLng(element.lat, element.lng);

                    var marker = new google.maps.Marker({
                        position: latLng,
                        map: map,
                        // icon: icon,
                        title: element.name
                    });
                    markers.push(marker);
                    var details = '<strong>' + element.name + '</strong><br>'  + element.adress;

                    bindInfoWindow(marker, map, infowindow, details);

                });
                markerCluster = new MarkerClusterer(map, markers, {
                    imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'
                });
            }
        }); 
}

Итак, я хотел бы помочь с 2 проблемами:

1) Как я описал выше, мне нужно «отменить» кластер после использования фильтра (но если я выберу регион 0, мне нужно «повторно активировать» кластер)

2) Я не знаю почему, но функция «movetolocation» работает только в первый раз, после повторного использования не работает.

Вот рабочий пример: https://ugh.beladzi.cz/show-data-places-v3.php (я не знаю, как я могу импортировать json в codepen или jsfiddle).

Большое спасибо за вашу помощь

1 Ответ

0 голосов
/ 18 апреля 2019

При использовании маркеров и markerCluster необходимо убедиться, что и массив маркеров, и объект markerCluster доступны для других функций, в которые вы хотите их изменить. Каждый раз, когда вы вызываете функцию нажатия кнопки, вам нужно проверить, это регион 0 или нет. Если это не регион 0, звоните markerCluster.clearMarkers(), а в регионе 0 звоните markerCluster.addMarkers(markers)

Вот справочный документ для маркера кластера

https://googlemaps.github.io/js-marker-clusterer/docs/reference.html

Я не могу сказать вам, почему ваши функции panTo или setZoom не работают, не видя больше кода.

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