Установить событие для каждого уровня масштабирования карты Google? - PullRequest
0 голосов
/ 15 января 2019

Как мне указать загрузку одного файла kml при масштабировании каждого уровня карты Google? Это мой код:

<!DOCTYPE html>
<html>
<head>
    <title>Getting Properties With Event Handlers</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
        #map {
            height: 100%;
        }
        html,
        body {
            height: 100%;
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <div id="map"></div>
    <script>
        var kmlLayer;
        function initMap() {
            var map = new google.maps.Map(document.getElementById('map'), {
                zoom: 8,
                center: { lat: 10.89779, lng: 106.64619 }
            });

            map.addListener('idle', function () {
                if (map.getZoom() == 9) {
                    //alert('aa');
                    kmlLayer = new google.maps.KmlLayer({
                        url: 'a.kml',
                        map: map
                    });
                }
                else if (map.getZoom() == 10) {
                     kmlLayer = new google.maps.KmlLayer({
                        url: 'b.kml',
                        map: map
                }
            });
        }
    </script>
    <script async defer src="https://maps.googleapis.com/maps/api/js?key=MY_API&callback=initMap">
    </script>
</body>

</html>

Это означает, что когда map.getZoom() == 9, карта будет рисоваться по файлу a.kml. Map.getZoom() == 10 будет отрисован b.kml файлом, и все детали, созданные a.kml файлом, будут удалены.

Но мой код выше не сглаживается, когда зум и детали создаются файлом a.kml. Не удаляется при Map.getZoom() == 10.

Пожалуйста, помогите мне исправить это. Спасибо

1 Ответ

0 голосов
/ 15 января 2019

Вам необходимо скрыть существующий KmlLayer перед отображением нового. Что-то вроде:

var kmlLayer;
map.addListener('idle', function () {
    if (map.getZoom() == 9) {
        if (kmlLayer && kmlLayer.setMap) kmlLayer.setMap(null);
        kmlLayer = new google.maps.KmlLayer({
            url: 'a.kml',
            map: map
        });
    }
    else if (map.getZoom() == 10) {
         if (kmlLayer && kmlLayer.setMap) kmlLayer.setMap(null);
         kmlLayer = new google.maps.KmlLayer({
            url: 'b.kml',
            map: map
         });
    }

(если для всех уровней масштабирования определены KmlLayers, вы можете переместить код, который скрывает существующий слой, за пределы if)

подтверждение концепции скрипки

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