2010-10-13 17 views
0

J'utilise le plugin jQuery http://googlemaps.mayzes.org/ pour Google Maps, mais j'ai eu du mal à ajouter des marqueurs.API Google Maps: GClientGeocoder.getLatLng()

configuration actuelle:

Afficher le contenu AJAX dans un thickbox, où une carte est chargée. La carte se charge correctement et se centre correctement sur une adresse géocodée.

Cependant, si vous ajoutez un marqueur avec une adresse géocodées les erreurs de l'API Google Maps avec « un est indéfini »

(code correspondant du plug-in)

if (markers[i].geocode) { 
    var geocoder = new GClientGeocoder(); 
    geocoder.getLatLng(markers[i].geocode, function(center) {      
     if (!center) 
     alert(address + " not found"); 
     else 
     jQuery.googleMaps.marker[i] = new GMarker(center, {draggable: markers[i].draggable, icon: gIcon}); 
    }); 
    } 

La partie notable est geocoder.getLatLng(markers[i].geocode, func... comme cela appelle directement l'API des cartes, et lors de l'inspection, markers[i].geocode sort comme mon adresse de test ("Australie"). Ce que je trouve c'est que si je charge la carte la première fois, elle va centrer la carte, mais l'erreur due au marqueur (et ne pas montrer l'interface non plus). Si je ferme la caisse épaisse et la charge à nouveau avec une autre adresse/pays, la carte se chargera bien, avec l'interface utilisateur et centrée sur le nouvel emplacement avec un marqueur dans l'ancienne adresse/pays.

La fermeture et l'ouverture de l'thickbox plusieurs fois après cela déplaceront le centrage, mais le marqueur restera toujours dans la première adresse/pays.

Des idées?

Répondre

1

J'ai un correctif, pas nécessairement une solution. L'itérateur dépasse markers.length. Je n'ai aucune idée pourquoi et basé sur la définition de la boucle, il ne devrait pas. Si le iterator==markers.length je soustrais markers.length de l'itérateur pour le réinitialiser à 0 pour re-boucle sur les marqueurs.

J'ai déplacé l'appel de superposition dans les instructions de latitude/longitude et de géocode si. Ce n'est que lorsque geocoder.getLatLng trouve une adresse si elle doit ajouter la superposition.

Je suis encore en train de nettoyer le code et les tests. Espérons que cela aide.

mapMarkers: function(center, markers) { 
     if (typeof(markers.length) == 'undefined') 
      // One marker only. Parse it into an array for consistency. 
      markers = [markers];   
     var j = 0; 
     for (indx = 0; indx<markers.length; indx++) { 
      var gIcon = null; 
      if (markers[indx].icon) { 
       gIcon = $.googleMaps.mapMarkersOptions(markers[indx].icon); 
      } 

      if (markers[indx].geocode) { 
       var geocoder = new GClientGeocoder(); 
       geocoder.getLatLng(markers[indx].geocode, function(center) {           
        if (!center) 
         alert(address + " not found"); 
        else 
         if(true) //if(indx<markers.length || indx>markers.length) 
          { 
          if(indx==markers.length) 
           indx = indx-markers.length; 

           alert(center); 
           $.googleMaps.marker[indx] = new GMarker(center, {draggable: markers[indx].draggable, icon: gIcon}); 
           $.googleMaps.gMap.addOverlay($.googleMaps.marker[indx]); 
           if (markers[indx].info) { 
            // Hide Div Layer With Info Window HTML 
            $(markers[indx].info.layer).hide(); 
            // Marker Div Layer Exists 
            if (markers[indx].info.popup) 
             // Map Marker Shows an Info Box on Load 
             $.googleMaps.marker[indx].openInfoWindowHtml($(markers[indx].info.layer).html()); 
            else 
             $.googleMaps.marker[indx].bindInfoWindowHtml($(markers[indx].info.layer).html().toString()); 
           } 
          } 
       }); 

      } 
      else if (markers[indx].latitude && markers[indx].longitude) { 
       // Latitude & Longitude Center Point 
       center = $.googleMaps.mapLatLong(markers[indx].latitude, markers[indx].longitude); 
       $.googleMaps.marker[indx] = new GMarker(center, {draggable: markers[indx].draggable, icon: gIcon}); 
       $.googleMaps.gMap.addOverlay($.googleMaps.marker[indx]); 
       if (markers[indx].info) { 
        // Hide Div Layer With Info Window HTML 
        $(markers[indx].info.layer).hide(); 
        // Marker Div Layer Exists 
        if (markers[indx].info.popup) 
         // Map Marker Shows an Info Box on Load 
         $.googleMaps.marker[indx].openInfoWindowHtml($(markers[indx].info.layer).html()); 
        else 
         $.googleMaps.marker[indx].bindInfoWindowHtml($(markers[indx].info.layer).html().toString()); 
       } 
      } 

     } 
    },