2013-02-13 3 views
0

J'ai essayé de géocoder une adresse en coordonnées LatLng, mais j'ai beaucoup de difficulté à le faire. Je sais que geocode() est une fonction asynchrone, et j'ai été jouer avec des rappels en vain. J'ai regardé d'autres posts comme celui-ci (How to return value from an asynchronous callback function?), mais j'ai du mal à comprendre le concept. Si quelqu'un peut me montrer comment faire correctement cette fonction de rappel, sera très apprécié. Beaucoup de maux de tête sur celui-ci. A été en mesure d'obtenir le rappel de faire un alert() qui donne le LatLng correct, mais ne pas définir le paramètre de position. Désolé ne pouvait pas comprendre à partir de l'exemple cité plus tôt. Assez nouveau à la langue. Toutes les références que vous pouvez me montrer pour comprendre le concept sont également très appréciées. Merci!Utilisation de google.maps.Geocoder(). Rappel asynchrone

var location; 
    var image; 
    var map; 
    var geocoder; 
    var address; 

    function initialize() { 
    var mapOptions = { 
     center: new google.maps.LatLng(42.763146, -73.3776), 
     zoom: 6, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById("map_canvas"), 
     mapOptions); 
    var cloudLayer = new google.maps.weather.CloudLayer(); 
    cloudLayer.setMap(map); 

    addressSet(function(address) { 
     console.log(address); 
     // tried to set location = address;, location = new google.maps.LatLng(address); 
     // neither works 
    }); 

    addMtsToMap(location, 
       map, 
       new google.maps.MarkerImage("img/mts/skier.png", null, null, null, new google.maps.Size(50,50))); 

    } 

    function addMtsToMap(location, map, image) { 

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

    var infoWindow = new google.maps.InfoWindow({content: "<h1>Powder!!!</h1>"}); 

    google.maps.event.addListener(marker, "click", function() { 
     infoWindow.open(map, marker); 
    }); 
    } 

    function addressSet(callback) { 

    geocoder = new google.maps.Geocoder(); 

    geocoder.geocode({address: "Killington+VT"}, function(results, status) { 

     if (status == google.maps.GeocoderStatus.OK) { 

      address = results[0].geometry.location; 
      callback(address); 
     } 
    }); 
    } 

Répondre

0

Désolé pour tous. Je n'arrivais pas à croire ce que j'ai trouvé après avoir joué avec ça pendant si longtemps. J'ai déclaré var map à nouveau dans initialize, ce qui a fait que ma fonction addressSet() tire la variable de carte globale incorrecte. Supprimer le var a fait fonctionner.

Questions connexes