2012-05-12 9 views
1

J'ai besoin d'aide pour boucler un tableau et terminer ce code. Mon tableau est créé à partir d'un fichier XML. Le fichier XML contient les données de lieu de réunion à tracer sur une carte. Le tableau se termine par ressembler à ceci:Boucle dans la matrice pour la carte

markerfilter[0].name 
markerfilter[0].address 
markerfilter[0].Meeting_Type 
etc... 
markerfilter[1].name 
markerfilter[1].address 
markerfilter[1].Meeting_Type 
etc... 

Maintenant tous les marqueurs placent sur la carte. Je dois faire une boucle dans le tableau et le filtrer en fonction de certaines variables que je configure. Ceci est ma tentative de bouclage à travers le tableau:

for (var i = 0; i < markerfilter.length; i++) { 
    if (markerfilter[i].Meeting_Type==type&&markerfilter[i].Day_of_Meeting==day&&markerfilter[i].Time_of_Meeting==time){ 
     //need to plot the points on the map here 
     }else{ 
     //need to show blank map 
     } 
    } 

Voici mon code entier. Je ne sais même pas si la boucle est au bon endroit ou si d'autres parties du code doivent entrer dans la boucle. De l'aide??

$(document).ready(function() { 
    $("#map").css({ 
    height: 500, 
    width: 600 
}); 
var myLatLng = new google.maps.LatLng(43.653823, -79.382843); 
MYMAP.init('#map', myLatLng, 11); 

$("#showmarkers").click(function(e){ 
    MYMAP.placeMarkers('include/xml.php'); 
}); 
}); 

var MYMAP = { 
map: null, 
bounds: null 
} 

MYMAP.init = function(selector, latLng, zoom) { 
var myOptions = { 
    zoom:zoom, 
    center: latLng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
} 
this.map = new google.maps.Map($(selector)[0], myOptions); 
this.bounds = new google.maps.LatLngBounds(); 
} 

var markerfilter = []; 
MYMAP.placeMarkers = function(filename) { 
$.get(filename, function(xml){ 
    $(xml).find("marker").each(function(){ 
     var name = $(this).find('name').text(); 
     var address = $(this).find('address').text(); 
     var address2 = $(this).find('address2').text(); 
     var Meeting_Type = $(this).find('Meeting_Type').text(); 
     var Time_of_Meeting = $(this).find('Time_of_Meeting').text(); 
     var Day_of_Meeting = $(this).find('Day_of_Meeting').text(); 
     var Open_Meeting = $(this).find('Open_Meeting').text(); 
     var Wheelchair = $(this).find('Wheelchair').text(); 
     var ASL = $(this).find('ASL').text(); 
     var Comments = $(this).find('Comments').text(); 
     // create a new LatLng point for the marker 
     var lat = $(this).find('lat').text(); 
     var lng = $(this).find('lng').text(); 
     var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng)); 

     var markerdata = {}; 
     $(this).children().each(function() { 
      markerdata[this.tagName] = $(this).text(); 
     }); 
     markerfilter.push(markerdata); 

     var MeetingType = document.getElementById("Meeting_Type"); 
     var type = MeetingType.options[MeetingType.selectedIndex].text; 
     var DayofMeeting = document.getElementById("Day_of_Meeting"); 
     var day = DayofMeeting.options[DayofMeeting.selectedIndex].text; 
     var TimeofMeeting = document.getElementById("Time_of_Meeting"); 
     var time = TimeofMeeting.options[TimeofMeeting.selectedIndex].text; 

     for (var i = 0; i < markerfilter.length; i++) { 
     if (markerfilter[i].Meeting_Type==type&&markerfilter[i].Day_of_Meeting==day&&markerfilter[i].Time_of_Meeting==time){ 
      markerfilter[i].setMap(MYMAP.map); 
      }else{ 
      markerfilter[i].setMap(null); 
      } 
     } 

     // extend the bounds to include the new point 
     MYMAP.bounds.extend(point); 

     var marker = new google.maps.Marker({ 
      position: point, 
      map: MYMAP.map 
     }); 

     var infoWindow = new google.maps.InfoWindow(); 
     var html='<b><u>'+name+'</b></u><br />'+address2+'<br />'+address+'<br />'+Meeting_Type+',&nbsp'+Time_of_Meeting+',&nbsp'+Day_of_Meeting+'<br />Open Meeting:&nbsp'+Open_Meeting+'<br />Wheelchair Accessible:&nbsp'+Wheelchair+'<br />ASL:&nbsp'+ASL+'<br />Comments:&nbsp'+Comments; 
     google.maps.event.addListener(marker, 'click', function() { 
      infoWindow.setContent(html); 
      infoWindow.open(MYMAP.map, marker); 
     }); 
     MYMAP.map.fitBounds(MYMAP.bounds); 
    }); 
}); 
console.log(markerfilter); 
} 

En ce moment, quand je lance mon courant, Firebug me dit: markerfilter [i] .setMap (null) n'est pas une fonction.

+0

Et que se passe-t-il avec ce code? –

Répondre

0

En ce qui concerne l'erreur: markerfilter [i] .setMap (null) n'est pas une fonction, je pense que je vois votre problème. Dans la fonction MYMAP.placemarkers, vous créez l'objet markerdata, définir une sorte de tagName propriété qui est attribué une valeur de texte, puis appuyez markerdata sur: il markerfilter tableau:

var markerdata = {}; 
$(this).children().each(function() { 
    markerdata[this.tagName] = $(this).text(); 
}); 
markerfilter.push(markerdata); 

Ensuite, environ 10 lignes plus loin, vous avez une boucle for qui tente de récupérer ce que le code semble attendre sera marqueurs à partir du tableau markerfilter:

for (var i = 0; i < markerfilter.length; i++) { 
    if (markerfilter[i].Meeting_Type==type && 
      markerfilter[i].Day_of_Meeting==day && 
      markerfilter[i].Time_of_Meeting==time) { 

     markerfilter[i].setMap(MYMAP.map); 
    } 
    else { 
     markerfilter[i].setMap(null); 
    } 
} 

Depuis le tableau markerfilter a été chargé avec markerdata, il ne contient pas de marqueurs, donc il est logique que markerfilter[i].setMap(null) ne soit pas une fonction, car markerfilter[i] n'est pas un marqueur. Espérons que cela aide -

+0

Vous étiez correct! J'ai dû charger le tableau avec l'objet marqueur après la création du marqueur. Firebug a beaucoup aidé sur celui-ci! –

Questions connexes