Multiple markers linken in Google Maps API V3

Status
Niet open voor verdere reacties.

BasMatthee

Gebruiker
Lid geworden
16 jun 2011
Berichten
8
Mensen,

Ik heb een google-map met daarop een ****load aan markers (advocatenkantoren in nederland) en wil deze allen aanklikbaar maken. Echter heb ik het probleem dat alle markers dezelfde link bevatten (namelijk de link van het laatste item. De addListeners worden dus overschreven ipv toegevoegd. Hieronder een deel van de code (het belangrijkste)

Code:
echo '
        <script type="text/javascript">
        
        function initialize(AllMarkers) {
        
            var latlng = new google.maps.LatLng(52.163824,5.564575);
        
            var myOptions = {
                zoom: 8,
                center: latlng,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            }
        
            var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);
            
            setMarkers(map, AllMarkers);
            
        }
        
        function setMarkers(map, locations) {

            var image = new google.maps.MarkerImage(
                "'.get_bloginfo('template_url').'/assets/img/layout/image.png",
        		new google.maps.Size(40,35),
        		new google.maps.Point(0,0),
        		new google.maps.Point(0,35)
        	);
            
            var shadow = new google.maps.MarkerImage(
                "'.get_bloginfo('template_url').'/assets/img/layout/shadow.png",
        		new google.maps.Size(62,35),
        		new google.maps.Point(0, 0),
        		new google.maps.Point(0,35)
         	);
            
            for (var i = 0; i < locations.length; i++) {
                
                var location = locations[i];
                var myLatLng = new google.maps.LatLng(location[1], location[2]);
                
                var marker = new google.maps.Marker({
                    position: myLatLng,
                    map:      map,
                    shadow:   shadow,
                    icon:     image,
                    title:    location[0],
                    zIndex:   location[3]
                });
                
                google.maps.event.addListener(marker, "click", function(){window.location = location[4]});
                
            }
            
        }
        
        var Markers = '.$Markers.';
        
        initialize(Markers);
        
        </script>';

De variabele $Markers is een php-variabele, waarin een javascript array staat welke alsvbolgt is opgebouwd:

[
["SAP advocaten", 52.1556751, 5.3971402, 0, "asp-leden/details?kantoor_id=2"],
["Beer Advocaten", 52.3612121, 4.8870694, 0, "asp-leden/details?kantoor_id=3"],
["Dolk - Verburg - Diamand Advocaten", 52.3282016, 4.8604929, 0, "asp-leden/details?kantoor_id=4"]
];

Iemand enig idee wat er gedaan moet worden om dit op te lossen?
 
Ik ben pas toevallig tegen zo'n zelfde probleem aangelopen. Probeer dit eens:
(Ik heb de constructie van het addListener commando in de setMarkers functie iets aangepast)
[JS]echo '
<script type="text/javascript">

function initialize(AllMarkers) {

var latlng = new google.maps.LatLng(52.163824,5.564575);

var myOptions = {
zoom: 8,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}

var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);

setMarkers(map, AllMarkers);

}

function setMarkers(map, locations) {

var image = new google.maps.MarkerImage(
"'.get_bloginfo('template_url').'/assets/img/layout/image.png",
new google.maps.Size(40,35),
new google.maps.Point(0,0),
new google.maps.Point(0,35)
);

var shadow = new google.maps.MarkerImage(
"'.get_bloginfo('template_url').'/assets/img/layout/shadow.png",
new google.maps.Size(62,35),
new google.maps.Point(0, 0),
new google.maps.Point(0,35)
);

for (var i = 0; i < locations.length; i++) {

var location = locations;
var myLatLng = new google.maps.LatLng(location[1], location[2]);

var marker = new google.maps.Marker({
position: myLatLng,
map: map,
shadow: shadow,
icon: image,
title: location[0],
zIndex: location[3]
});

google.maps.event.addListener(marker, "click", (function(url) {
return function() {
window.location = url;
}
})(location[4]));

}

}

var Markers = '.$Markers.';

initialize(Markers);

</script>';[/JS]
 
Hey Robin,

Bedankt voor je antwoord. Ik ben er inmiddels achter. Wanneer ik deze regel:
Code:
google.maps.event.addListener(marker, "click", function(){window.location = location[4]});


Vervag met:
Code:
                function buildClickHandler(i) {
                    return function() { window.location = locations[i][4]; };
                }
                
                google.maps.event.addListener(marker, "click", buildClickHandler(i));

Werkt het allemaal weer! Komt op het zelfde neer als jouw oplossing. Dank!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan