2013-09-22 4 views
0

J'essaye d'obtenir le Google Maps Geocoder pour renvoyer un LatLng d'une adresse et ensuite initialiser la carte avec ce LatLng sur le centre.Pourquoi Google Maps Geocoder n'appelle pas l'initialisation?

J'ai vu quelques questions sur ce sujet avec des suggestions que la carte devrait être initialisée d'abord avec un centre arbitraire puis recentré, mais cela semble inutile.

Le code ci-dessous fonctionne bien jusqu'à ce que je change le lat global et lon à zéro. Le geocder est alors appelé avec l'adresse et un LatLng est renvoyé très bien. Tout ce que j'obtiens alors est une fenêtre vide et l'alerte dans la fonction d'initialisation n'est jamais déclenchée. Est-ce que quelqu'un peut m'expliquer pourquoi cela ne fonctionne pas avant d'aller sur la route de l'initialisation sur 0,0 puis sur le centrage?

Merci

var lat = 37.425593; 
var lon = -122.075915; 
var address = '1600 Amphitheatre Pky, Mountain View, CA'; 
var LatLon = new google.maps.LatLng(0, 0); 

function initialize() { 

    alert("2. "+LatLon); 

    var mapOptions = { 
     center: LatLon, 
     zoom: 14, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

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

} 

if (lat == 0 && lon == 0) { 
    alert('address = '+address); 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      if (results[0]) { 
       LatLon = results[0].geometry.location; 
       alert("1. "+LatLon); 
       google.maps.event.addDomListener(window, 'load', initialize); 
      } else { 
       alert("No results found"); 
      } 
     } else { 
      alert("Geocoder failed: " + status); 
     } 
    }); 
} else { 
    alert('lat/lon = '+lat+' '+lon); 
    LatLon = new google.maps.LatLng(lat, lon); 
    alert("1. "+LatLon); 
    google.maps.event.addDomListener(window, 'load', initialize); 
} 
+0

double possible de [passer la latitude et la longitude à mon script carte] (http://stackoverflow.com/questions/18936231/passing-the-latitude-and-longitude-to- mon-carte-script) – geocodezip

Répondre

0

Le géocodage est asynchrone. Vous n'avez pas placé votre code en contexte, mais le temps nécessaire pour renvoyer les coordonnées doit indiquer que l'événement de chargement de la fenêtre a déjà été déclenché, lorsque les coordonnées reviennent du serveur, de sorte que la fonction initialize ne s'exécute jamais. Cela fonctionnera si vous utilisez l'événement onload pour démarrer l'opération de géocodage, ou si vous appelez initialize directement et mettez le code au bas de la page afin qu'il ne s'exécute pas jusqu'à ce que la page soit complètement rendue (et la carte a une taille).

<script type="text/javascript"> 
var address = '1600 Amphitheatre Pky, Mountain View, CA'; 
var LatLon = new google.maps.LatLng(0, 0); 

function initialize(LatLon) { 
    var mapOptions = { 
     center: LatLon, 
     zoom: 14, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

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

} 

    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      if (results[0]) { 
       var LatLon = results[0].geometry.location; 
       initialize(LatLon); 
      } else { 
       alert("No results found"); 
      } 
     } else { 
      alert("Geocoder failed: " + status); 
     } 
    }); 
</script> 
</body> 

working example