Google Maps API v3: как динамически изменить значок маркера? - PullRequest
102 голосов
/ 21 декабря 2009

Как с помощью Google Maps API v3 программно изменить значок маркера?

Я хотел бы, чтобы, когда кто-то наводил курсор на ссылку, чтобы соответствующий значок маркера на карте менял цвета для обозначения соответствующего маркера.

По сути, та же функция, что и у Roost.

Когда вы наводите курсор на домашний список слева, соответствующий маркер справа меняет цвет

Ответы [ 5 ]

171 голосов
/ 21 декабря 2009

Позвоните на marker.setIcon('newImage.png') ... Посмотрите здесь для документов.

Вы спрашиваете о том, как это сделать? Вы можете просто создать каждый div и добавить прослушиватель mouseover и mouseout, который будет менять значок и обратно для маркеров.

19 голосов
/ 02 октября 2014

Вы также можете использовать круг в качестве значка маркера, например:

var oMarker = new google.maps.Marker({
    position: latLng,
    sName: "Marker Name",
    map: map,
    icon: {
        path: google.maps.SymbolPath.CIRCLE,
        scale: 8.5,
        fillColor: "#F00",
        fillOpacity: 0.4,
        strokeWeight: 0.4
    },
});

и затем, если вы хотите изменить маркер динамически (как при наведении курсора), вы можете, например:

oMarker.setIcon({
            path: google.maps.SymbolPath.CIRCLE,
            scale: 10,
            fillColor: "#00F",
            fillOpacity: 0.8,
            strokeWeight: 1
        })
8 голосов
/ 12 ноября 2011

Этот поток может быть мертв, но StyledMarker доступен для API v3. Просто привяжите нужное изменение цвета к правильному событию DOM, используя метод addDomListener () . Этот пример очень близок к тому, что вы хотите сделать. Если вы посмотрите на источник страницы, измените:

google.maps.event.addDomListener(document.getElementById("changeButton"),"click",function() {
  styleIcon.set("color","#00ff00");
  styleIcon.set("text","Go");
});

что-то вроде:

google.maps.event.addDomListener("mouseover",function() {
  styleIcon.set("color","#00ff00");
  styleIcon.set("text","Go");
});

Этого должно быть достаточно, чтобы вы двигались вперед.

Страница Википедии События DOM также поможет вам нацелить событие, которое вы хотите захватить на стороне клиента.

Удачи (если она вам все еще нужна)

5 голосов
/ 21 декабря 2009

Библиотека утилит GMaps имеет плагин MapIconMaker , который позволяет легко создавать различные стили маркеров на лету. Он использует Google Charts для рисования маркеров.

Здесь есть хорошее демо , которое показывает, какие маркеры вы можете сделать с ним.

4 голосов
/ 21 апреля 2015

Вы можете попробовать этот код

    <script src="http://maps.googleapis.com/maps/api/js"></script>
<script type="text/javascript" src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobox/src/infobox.js"></script>

<script>

    function initialize()
    {
        var map;
        var bounds = new google.maps.LatLngBounds();
        var mapOptions = {
                            zoom: 10,
                            mapTypeId: google.maps.MapTypeId.ROADMAP    
                         };
        map = new google.maps.Map(document.getElementById("mapDiv"), mapOptions);
        var markers = [
            ['title-1', '<img style="width:100%;" src="canberra_hero_image.jpg"></img>', 51.508742, -0.120850, '<p> Hello - 1 </p>'],
            ['title-2', '<img style="width:100%;" src="canberra_hero_image.jpg"></img>', 51.508742, -0.420850, '<p> Hello - 2 </p>'],
            ['title-3', '<img style="width:100%;" src="canberra_hero_image.jpg"></img>', 51.508742, -0.720850, '<p> Hello - 3 </p>'],
            ['title-4', '<img style="width:100%;" src="canberra_hero_image.jpg"></img>', 51.508742, -1.020850, '<p> Hello - 4 </p>'],
            ['title-5', '<img style="width:100%;" src="canberra_hero_image.jpg"></img>', 51.508742, -1.320850, '<p> Hello - 5 </p>']
        ];

        var infoWindow = new google.maps.InfoWindow(), marker, i;
        var testMarker = [];
        var status = [];
        for( i = 0; i < markers.length; i++ ) 
        {
            var title = markers[i][0];
            var loan = markers[i][1];
            var lat = markers[i][2];
            var long = markers[i][3];
            var add = markers[i][4];


            var iconGreen = 'img/greenMarker.png'; //green marker
            var iconRed = 'img/redMarker.png';     //red marker

            var infoWindowContent = loan + "\n" + placeId + add;

            var position = new google.maps.LatLng(lat, long);
            bounds.extend(position);

            marker = new google.maps.Marker({
                map: map,
                title: title,
                position: position,
                icon: iconGreen
            });
            testMarker[i] = marker;
            status[i] = 1;
            google.maps.event.addListener(marker, 'click', ( function toggleBounce( i,status,testMarker) 
            {
                return function() 
                {
                    infoWindow.setContent(markers[i][1]+markers[i][4]);
                    if( status[i] === 1 )
                    {
                        testMarker[i].setIcon(iconRed);
                        status[i] = 0;

                    }
                    for( var k = 0; k <  markers.length ; k++ )
                    {
                        if(k != i)
                        {
                            testMarker[k].setIcon(iconGreen);
                            status[i] = 1;

                        }
                    }
                    infoWindow.open(map, testMarker[i]);
                }
            })( i,status,testMarker));
            map.fitBounds(bounds);
        }
        var boundsListener = google.maps.event.addListener((map), 'bounds_changed', function(event)
        {
            this.setZoom(8);
            google.maps.event.removeListener(boundsListener);
        });
    }
    google.maps.event.addDomListener(window, 'load', initialize);

</script>

<div id="mapDiv" style="width:820px; height:300px"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...