2012-11-29 5 views
0

Les utilisateurs effectuent une recherche sur ma carte avec l'API Google Places qui ajoute des marqueurs à ma carte. J'ai un événement de clic dans chaque infowindow de marqueurs pour obtenir des directions à ce marqueur. Comment puis-je transmettre les coordonnées du marqueur sélectionné à ma demande de service google directions?Google Maps API V3: passer la coordonnée du marqueur à la demande de service google directions

Jusqu'ici, j'ai déclaré var placeLoc = null; en tant que variable globale. J'ai défini placeLoc=place.geometry.location; à l'intérieur de ma fonction de marqueur de création. Ensuite, j'ai:

function calcRoute() { 
var start = myLatLng; 
var end = placeLoc; 
var request = { 
    origin: start, 
    destination: end, 
    travelMode: google.maps.DirectionsTravelMode.BICYCLING 
}; 
directionsService.route(request, function(response, status) { 
    if (status == google.maps.DirectionsStatus.OK) { 
     directionsDisplay.setDirections(response); 
    } 
}); 
} 

La fonction renvoie les directions vers le mauvais marqueur. Je devine que c'est juste donner des directions au premier marqueur dans le tableau retourné après la recherche et pas le marqueur réel que j'ai choisi. Comment puis-je fournir les directions demander les coordonnées d'un marqueur sélectionné?

Ci-dessous est le code qui place les résultats de la recherche dans la variable lieu:

google.maps.event.addListener(searchBox, 'places_changed', function() { 
    var places = searchBox.getPlaces(); 
    // alert("getPlaces returns "+places.length+" places"); 

    for (var i = 0; i < gmarkers.length; i++) { 
     gmarkers[i].setMap(null); 
    } 

    gmarkers = []; 
    var bounds = new google.maps.LatLngBounds(); 

    for (var i = 0, place; place = places[i]; i++) { 
     var place = places[i]; 
     createMarker(place); 
     bounds.extend(place.geometry.location); 
    } 
    map.fitBounds(bounds); 
    // if (markers.length == 1) map.setZoom(17); 
}); 

Répondre

0

Quelque chose comme ça?

function createMarker(options) { 
    var marker = new google.maps.Marker(options); 

    google.maps.event.addListener(marker, 'click', function() { 
    placeLoc = marker.getPosition(); 
    calcRoute(); 
    }); 

    return marker; 
} 
+0

J'ai essayé ceci et il ne m'a pas donné les directions au marqueur que j'ai choisi. Il renvoyait toujours les directions à un autre marqueur dans le tableau. Mais je pense que marker.getPosition() est ce qui me manque quelque part dans mon code. Je ai juste besoin de savoir où, – Rick

+0

J'ai trouvé cet exemple: http://econym.org.uk/gmap/example_map4c.htm que je crois passe l'emplacement du marqueur à travers ce code '' '; 'Ce code utilise google maps api v2. Quelque chose de similaire fonctionnera-t-il en V3 ou est-ce que la fonction getPosition() est ce que je devrais rechercher? – Rick

+1

Enfin compris. C'était semblable à votre réponse, la clé est d'obtenir marker.getPosition dans la fonction qui a l'écouteur d'événement qui ouvre l'infowindow. Je pense que votre code de fonction devrait suffire à aider les gens à traverser ce problème. Merci – Rick

Questions connexes