API Карт Google v3: Как я могу динамически изменять значок маркера?

Используя Google Maps API v3, как программно изменить значок маркера?

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

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

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

Ответ 1

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

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

Ответ 2

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

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
        })

Ответ 3

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

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");
});

Этого должно быть достаточно, чтобы заставить вас двигаться.

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

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

Ответ 4

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

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

Ответ 5

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

    <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>