InfoWindow on Marker using MarkerClusterer

后端 未结 2 534
感动是毒
感动是毒 2021-01-01 03:25

This is my html code. I\'ve try anything to add an infowindow on the markers but it don\'t wanna work. My data is loading from the \"Alle_Ortswahlen.page1.xml\" file. Do an

2条回答
  •  忘掉有多难
    2021-01-01 04:00

    Before the for cycle, make an empty infowindow object.

    var infowindow = new google.maps.InfoWindow();
    

    Than in the for cycle, after the marker, add an event listener, like this:

                google.maps.event.addListener(marker, 'click', (function(marker, i) {
                    return function() {
                        infowindow.setContent("You might put some content here from your XML");
                        infowindow.open(map, marker);
                    }
                })(marker, i));
    

    There is some closure magic happening when passing the callback argument to the addListener method. If you are not familiar with it, take a look at here:

    Mozilla Dev Center: Working with Closures

    So, your code should look something like this:

    google.load('maps', '3', {
                other_params: 'sensor=false'
            });
    
            google.setOnLoadCallback(initialize);
    
            function initialize() {
    
                var stack = [];
    
                var center = new google.maps.LatLng(48.136, 11.586);
                var options = {
                    'zoom': 5,
                    'center': center,
                    'mapTypeId': google.maps.MapTypeId.ROADMAP
                };
                var map = new google.maps.Map(document.getElementById("map_canvas"), options);
                var infowindow = new google.maps.InfoWindow();
                GDownloadUrl("Alle_Ortswahlen.page1.xml", function(doc) {
                    var xmlDoc = GXml.parse(doc);
                    var markers = xmlDoc.documentElement.getElementsByTagName("ROW");
                    for (var i = 0; i < markers.length; i++) {
                        // obtain the attribues of each marker
                        var lat = parseFloat(markers[i].getAttribute("Field4"));
                        var lng = parseFloat(markers[i].getAttribute("Field6"));
                        var marker = new google.maps.Marker({
                            position : new google.maps.LatLng(lat, lng),
                            map: map,
                            title:"This is a marker"
                        });     
                        google.maps.event.addListener(marker, 'click', (function(marker, i) {
                            return function() {
                                infowindow.setContent("You might put some content here from your XML");
                                infowindow.open(map, marker);
                            }
                        })(marker, i));
                        stack.push(marker);
                    }
                    var mc = new MarkerClusterer(map,stack);
                });
            }
    

提交回复
热议问题