Изменение размера маркеров в зависимости от масштаба Google Maps v3

У меня есть карта Google, работающая на v3 API, я добавил несколько пользовательских маркеров, можно ли сделать так, чтобы они масштабировались в зависимости от уровня масштабирования карты? Я попытался найти ссылку, но не могу найти никаких методов для изменения размера MarkerImage.

Может быть, мне нужно удалить маркеры, когда карта меняет масштаб, и создать новые маркеры другого размера?


person Mads Lee Jensen    schedule 19.07.2010    source источник


Ответы (3)


К сожалению, вам придется устанавливатьIcon каждый раз. Однако вы можете предварительно определить их, а затем просто применить к маркеру.

zoomIcons = [null, icon1, icon2];  // No such thing as zoom level 0. A global variable or define within object.
marker.setIcon(zoomIcons[map.getZoom()]);
person CrazyEnigma    schedule 20.07.2010
comment
Вы также можете привязать это к событию zoom_changed, например: google.maps.event.addListener(map, zoom_changed, function() { var zoom = map.getZoom(); // сделать что-то в зависимости от текущего масштаба }); - person Dr1Ku; 29.07.2010

Этот код будет изменять размер каждый раз, когда масштабируется карта, чтобы он всегда покрывал одну и ту же географическую область.

//create a marker image with the path to your graphic and the size of your graphic
var markerImage = new google.maps.MarkerImage(
    'myIcon.png',
    new google.maps.Size(8,8), //size
    null, //origin
    null, //anchor
    new google.maps.Size(8,8) //scale
);

var marker = new google.maps.Marker({
    position: new google.maps.LatLng(38, -98),
    map: map,
    icon: markerImage //set the markers icon to the MarkerImage
});

//when the map zoom changes, resize the icon based on the zoom level so the marker covers the same geographic area
google.maps.event.addListener(map, 'zoom_changed', function() {

    var pixelSizeAtZoom0 = 8; //the size of the icon at zoom level 0
    var maxPixelSize = 350; //restricts the maximum size of the icon, otherwise the browser will choke at higher zoom levels trying to scale an image to millions of pixels

    var zoom = map.getZoom();
    var relativePixelSize = Math.round(pixelSizeAtZoom0*Math.pow(2,zoom)); // use 2 to the power of current zoom to calculate relative pixel size.  Base of exponent is 2 because relative size should double every time you zoom in

    if(relativePixelSize > maxPixelSize) //restrict the maximum size of the icon
        relativePixelSize = maxPixelSize;

    //change the size of the icon
    marker.setIcon(
        new google.maps.MarkerImage(
            marker.getIcon().url, //marker's same icon graphic
            null,//size
            null,//origin
            null, //anchor
            new google.maps.Size(relativePixelSize, relativePixelSize) //changes the scale
        )
    );        
});
person Simon    schedule 14.11.2012
comment
Спасибо, это сработало! Мне также нравится дополнительный шаг масштабирования для охвата географической части. Однако для меня маркеры являются символическими, поэтому я просто использовал условные выражения сравнения в map.getZoom(), чтобы соответствующим образом масштабировать их. - person ericjam; 17.03.2014
comment
Спасибо за ваш код. По-видимому, MarkerImage устарел и был удален. Используйте сейчас это -› developers.google.com/maps/documentation/javascript/< /а> - person Becario Senior; 31.03.2017

Чтобы добавить на карту изображение, соответствующее уровню масштабирования, используйте GroundOverlay.

https://developers.google.com/maps/documentation/javascript/groundoverlays

person Giovanni Gigante    schedule 06.01.2021