Hello, 

I am a novice programmer attempting to set up a map which allows a user to 
click on a particular cluster causing the display of an info window with 
information about the cluster elements(markers). My code allows individual, 
single element markers to be clicked on leading to an info window but not 
clusters. The information relating to a particular marker or cluster is 
stored in an xml file which includes groups of information. One group might 
include 4 data elements for example with a this type of format <group> 
<row> </row> <row> </row> <row> </row> <row> </row> </group> with data in 
each row and an identifying longitude and latitude per group. My idea is to 
set up a clusterclick event which responds to the clicking of a mouse on a 
cluster and displaying an info window. The problem is that I don't know how 
to associate the data taken from the xml file with a particular cluster. If 
i used this code for example after declaring the markercluster variable I 
would need the appropriate string to display in the info window.
//google.maps.event.addListener(markerCluster, 'clusterclick', 
//function(cluster) { 
//display info window with data related to particular cluster
})

Here is my main code to give you an idea of what I have done so far:

var markers = [];
var map;

/*
 * Main load function:
*/
load();

function load() {
 
var myOptions = {
center: new google.maps.LatLng(45.89000815866184, -63.017578125),
zoom: 5,
mapTypeId: google.maps.MapTypeId.ROADMAP};
map = new google.maps.Map(document.getElementById("map"),
myOptions);
var opt = { minZoom: 5, maxZoom: 8 };
map.setOptions(opt);
loadMap(); 
}



function loadMap() {
downloadUrl("http://www******/sample.xml";, function(data) {          
var xml = xmlParse(data);
var xmlMarkers = xml.documentElement.getElementsByTagName("Group");
var eventData = {};
var PositionData = {};
var GroupDetails = "";

for (var i = 0; i < xmlMarkers.length; i++) {
// Initialize data array
PositionData = { "latitude" : "" , "longitude" : "" };
var xmlSubMarkers = xmlMarkers[i].getElementsByTagName("Row");

for (var l = 0; l < xmlSubMarkers.length; l++) { 
eventData = {   "Proponent" : "", 
                            "City" : "", 
                            "Province" : "", 
                            "Homepage" : "", 
                            "Logo" : "",
                            "Latitude" : "",
                            "Longitude" : "",    
                            "Project" : "",
                            "Funding" : "",
                            "Total project value" : "",
                            "Desc" : "",
                            "Alt" : ""
                        };
            // Make sure XML node exists before placing data in to array 
element            
            try {eventData["Proponent"] = 
xmlMarkers[i].getElementsByTagName("PROPONENT")[l].firstChild.data;} 
catch(err) {}
            try {eventData["City"] = 
xmlMarkers[i].getElementsByTagName("CITY")[l].firstChild.data;} catch(err) 
{}
            try {eventData["Province"] = 
xmlMarkers[i].getElementsByTagName("PROV_CODE")[l].firstChild.data;} 
catch(err) {}
            try {eventData["Homepage"] = 
xmlMarkers[i].getElementsByTagName("HOMEPAGE")[l].firstChild.data;} 
catch(err) {}
            try {eventData["Logo"] = 
xmlMarkers[i].getElementsByTagName("LOGO")[l].firstChild.data;} catch(err) 
{}
            try {eventData["Latitude"] = 
xmlMarkers[i].getElementsByTagName("LATITUDE")[l].firstChild.data;} 
catch(err) {}
            try {eventData["Longitude"] = 
xmlMarkers[i].getElementsByTagName("LONGITUDE")[l].firstChild.data;} 
catch(err) {}    
            try {eventData["Project"] = 
xmlMarkers[i].getElementsByTagName("PROJECT")[l].firstChild.data;} 
catch(err) {}
            try {eventData["funding"] = 
xmlMarkers[i].getElementsByTagName("FUNDING")[l].firstChild.data;} 
catch(err) {}
            try {eventData["five"] = 
xmlMarkers[i].getElementsByTagName("FIVE")[l].firstChild.data;} catch(err) 
{}
            try {eventData["Total project value"] = 
xmlMarkers[i].getElementsByTagName("TOTALVALUE")[l].firstChild.data;} 
catch(err) {}
            try {eventData["Alt"] = 
xmlMarkers[i].getElementsByTagName("ALT")[l].firstChild.data;} catch(err) {}
            try {eventData["Desc"] = 
xmlMarkers[i].getElementsByTagName("DESC")[l].firstChild.data;} catch(err) 
{}            

         if (eventData["logo"] != "") 
         {
                 var eventDetails = //"<div>"+
                "</br>"+
                "<h5> " + eventData["Project"] + "</h5>" +
                "<img src=\"" + eventData["Logo"] + "\" alt=\"" + 
eventData["Alt"] + "\"/></br>" +
                "<h5>" + eventData["Proponent"] + "</h5>" +
                "<b>Location:</b> " + " " + eventData["City"] + ", " + 
eventData["Province"] + "<br/>" +
                "<b>Funding:</b> " + eventData["Funding"] + "<br/>" +
                "<b>Total project value:</b> " + eventData["Total project 
value"] + "<br/>" +
                "<b>Description:</b> " + eventData["Desc"] + "<br/>";
                }
            
         else 
         {
                var eventDetails = //"<div>"+
                "<h5> " + eventData["Project"] + "</h5>" +
                "<b><h5>" + eventData["Proponent"] + "</h5></b>" +
                "<b>Location:</b> " + " " + eventData["City"] + ", " + 
eventData["Province"] + "<br/>" +
                "<b Funding:</b> " + eventData["Funding"] + "<br/>" +
                "<b>Total project value:</b> " + eventData["Total project 
value"] + "<br/>" +
                "<b>Description:</b> " + eventData["Desc"] + "<br/>";
         }
         eventDetails = eventDetails + 
            "<a href=\"" + eventData["Homepage"] + "\"><strong>[More 
Details]</strong></a>";
            if (xmlSubMarkers.length > 1) {eventDetails = eventDetails 
+"</br></br>" + "<hr 
style='height:2px;border-width:0;color:gray;background-color:gray' />"};    
                    
          
GroupDetails = GroupDetails+eventDetails;
   
  }//nested for loop
          
 try {PositionData["latitude"] = 
xmlMarkers[i].getElementsByTagName("LATITUDE")[0].firstChild.data;} 
catch(err) {}
 try {PositionData["longitude"] = 
xmlMarkers[i].getElementsByTagName("LONGITUDE")[0].firstChild.data;} 
catch(err) {}
    
for (var l = 0; l < xmlSubMarkers.length; l++) { 
    // For each event found, show the marker on the map
      if (PositionData["latitude"] != "" && PositionData["longitude"] != 
"") {
  
      showMarker(PositionData,GroupDetails);

//showMarker method is futher down the page    

      }//another nested for loop
    }
    GroupDetails = "";    
  }//initial for loop
  var styles = [[{
        url: 'http://www.acoa-apeca.gc.ca/Config/blue-trans.png',
        height: 25,
        width: 25,
        //opt_anchor: [12, 0],
        opt_textColor: '#000000'
      }]];
var markerCluster = new MarkerClusterer(map, markers,{gridSize: 20, 
maxZoom:8,  styles: styles[0]});

//This is where I want to add the clusterclick event but I don't have the 
GroupDetails String and I'm not sure how to know what String is associated 
with a Cluster. In this code what is the cluster variable? Is it an
//arrray of markers and if so how do I know which is which?
//google.maps.event.addListener(markerCluster, 'clusterclick', 
//function(cluster) { 
//display info window with data related to particular cluster
})
      
 });
}

    
function showMarker(PositionData,GroupDetails) {
// Create point
var point = new google.maps.LatLng(PositionData["latitude"], 
PositionData["longitude"]);
var displaystring = '<div style="width: 420px; height: 370px; 
overflow:auto;">'+ GroupDetails + '</div>';
        
var infowindow = new google.maps.InfoWindow({
content: displaystring});

var Marker = new google.maps.Marker({
position: point,
map: map,
icon: image});
    
markers.push(Marker);
    
google.maps.event.addListener(Marker, 'click', function() {
var maxContentDiv = document.createElement('div');
maxContentDiv.innerHTML = 'Loading...';
infowindow.open(map,Marker);
});    
};

I hope this code made some sense. Any input you could give would be 
helpful. 
Thank you for your time, 

G

-- 
You received this message because you are subscribed to the Google Groups 
"Google Maps JavaScript API v3" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-maps-js-api-v3/-/NXm2rfH6tUwJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-maps-js-api-v3?hl=en.

Reply via email to