2009-06-02 5 views
3

J'essaie d'utiliser GLatLngBounds pour rendre tous les marqueurs visibles sur la carte. Voici un petit exemple de ce que je fais.GLatLngBounds - mauvais centre et niveau de zoom

INV.createMap = function(containerId) { 
    var map = null; 
    var geocoder = null; 
    var bounds = new GLatLngBounds(); 

    if (GBrowserIsCompatible()) { 
     map = new GMap2(document.getElementById(containerId), { 
      size: new GSize(600, 300) 
     }); 
     map.setCenter(new GLatLng(54.729378425601766, 25.279541015625), 15); 
     map.addControl(new GSmallZoomControl()); 
     geocoder = new GClientGeocoder(); 
    } 

    return { 
     markAdress: function(address, infoContentHtml) { 
      if (map !== null && geocoder !== null) { 
       geocoder.getLatLng(address, function(point) { 
        if (point) { 
         var marker = new GMarker(point); 
         GEvent.addListener(marker, 'mouseover', function() { 
          if (!map.getInfoWindow().getPoint().equals(this.getLatLng())) { 
           this.openInfoWindowHtml(infoContentHtml); 
          } 
         }); 
         map.addOverlay(marker); 
         bounds.extend(point); 
        } 
       }); 
      } 
     }, 

     finalize: function() { 
      map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds)); 
     } 
    }; 
}; 

Utilisation:

var m = INV.createMap('whatever'); 
var addresses = ... 
for (var i = 0, l = addresses.length; i < l; i++) { 
    m.markAdress('address...', 'htmlInfo...'); 
} 
m.finalize(); 

Le problème est que le niveau de zoom est complètement faux (waaay trop zoom arrière) et les marqueurs apparaissent dans le coin supérieur gauche de la carte pour une raison quelconque (mais tous d'entre eux sont visibles).

Qu'est-ce que je fais mal?

EDIT: Ignorez cette question. J'ai fait une erreur stupide - j'ai négligé le fait que GClientGeocoder fasse des requêtes asynchrones donc la méthode finalize() est appelée trop tôt.

Répondre

1

Le dernier argument de l'appel de fonction ci-dessous indique le niveau de zoom:

map.setCenter(new GLatLng(54.729378425601766, 25.279541015625), 15); 

This article parle un peu de zoom. Donc, le niveau de zoom est un peu trop élevé.

En outre, this tutorial vous indique comment adapter le zoom cartographique pour afficher correctement un ensemble de marqueurs.

Espérons que cela aide

+0

La ligne que vous avez citée est juste dans l'étape d'initialisation. Si vous avez fini de lire le code, vous trouverez la ligne qui définit le niveau de zoom final. Le didacticiel auquel vous avez accédé ne semble pas être différent de ce que fait Ree, à l'exception des détails mineurs qu'il appelle setZoom plutôt que de définir à la fois le centre et le zoom dans un appel à setCenter. FTR, j'utilise le formulaire setCenter (centre, zoom) sans difficulté. Peut-être qu'un test complet et autonome permettrait de diagnostiquer le problème. – Stewart

Questions connexes