2011-05-26 2 views
35

Avec l'API Google Maps v3, existe-t-il un moyen de définir le centre de la carte lors de l'initialisation? J'ai une solution en utilisant ce code:Google Maps v3 - Comment centrer en utilisant une adresse à l'initialisation?

var geocoder; 
    var map; 
    function initialize() { 
    geocoder = new google.maps.Geocoder(); 
    var latlng = new google.maps.LatLng(-34.397, 150.644); 
    var myOptions = { 
     zoom: 8, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    codeAddress('germany'); 
    } 

    function codeAddress(address) { 
    geocoder.geocode({ 'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
     map.setCenter(results[0].geometry.location); 
     var marker = new google.maps.Marker({ 
      map: map, 
      position: results[0].geometry.location 
     }); 
     } 
    }); 
    } 

Le seul problème est que quand initialisées, il centre au « latlng » pour une fraction de seconde. Je n'arrive pas à comprendre comment définir le centre dans "myOptions". Je pensais que je pourrais retourner "results [0] .geometry.location" de la fonction codeAddress et le passer à myOptions, mais cela ne fonctionne pas.

Merci pour toute aide.

Mise à jour Puisque je ne peux pas enlever « centre » tout à fait, je me demande s'il y a un moyen de transmettre l'adresse aux options.

API de Google:

Pour initialiser une carte, nous avons d'abord créer un objet d'options Carte pour contenir des variables d'initialisation de carte. Cet objet n'est pas construit; à la place, il est créé en tant qu'objet littéral. Il existe deux options requises pour chaque carte: centre et zoom.

Répondre

70

bien une solution simple pourrait être d'initialiser la carte dans votre fonction codeAddress:

var geocoder, map; 

function codeAddress(address) { 
    geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 
     'address': address 
    }, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      var myOptions = { 
       zoom: 8, 
       center: results[0].geometry.location, 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      } 
      map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

      var marker = new google.maps.Marker({ 
       map: map, 
       position: results[0].geometry.location 
      }); 
     } 
    }); 
} 

Cela devrait résoudre le problème.

+2

J'ai continué à essayer d'inclure la fonction de géocodage dans la fonction d'initialisation ... mais cela fonctionne dans l'autre sens. Merci! – TerryMatula