Obtenez des événements depuis la polyligne ou le marqueur d'un DirectionsRenderer

J'utilise les DirectionsService et la méthode d'itinéraire pour générer un DirectionsResult. J'utilise également l'objet DirectionsRenderer pour afficher les résultats, car il est très facile à utiliser. Je n'ai aucun problème à détecter les événements de directions_changed, mais j'aimerais savoir s'il est possible d'obtenir des événements à partir de la polyligne représentant l'itinéraire, voire des événements de marqueurs (petits cercles) générés après avoir traîné la polyligne.

Lorsque vous utilisez google maps (maps.google.com, "Get Directions"), vous pouvez faire glisser la polyligne, faire un clic droit dessus (ou sur les marqueurs), cela a pour effet d'afficher un menu. Donc, je pense qu'il existe un moyen d'attraper des événements depuis DirectionsRenderer (en supposant que Google utilise cet objet dans ce cas).

Si quelqu'un a eu une idée

Je cherche également une réponse pour votre question. Jusque-là, j'essaierai de comprendre moi-même et je vais poster en retour si je trouve quelque chose d'utile.

Mise à jour: après quelques minutes dans JavaScript, j'ai découvert que l'objet DirectionsResult contient un ensemble de waypoints, y compris ceux créés lorsque le chemin est traîné avec le curseur. Si vous avez complété le didacticiel Draggable Directions, vous pouvez accéder à cet objet via les directionsDisplay.directions, à l'intérieur de la méthode de rappel pour l'événement direction_changed . Cet objet contient un membre nommé sf qui détient un tableau de waypoints s'il en existe, sinon il est nul. Chaque membre de ce tableau contient un membre nommé emplacement , stockant les coordonnées sous wa (latitude) et ya (longitude).

Pour démontrer la gestion du waypoint, j'ai écrit une petite fonction qui affiche des marqueurs à la place des waypoints. Pour le tester, ajoutez la variable globale suivante au script;

var markers = []; 

Modifiez la fonction callback d'événement direction_changed

 google.maps.event.addListener(directionsDisplay, 'directions_changed', function() { computeTotalDistance(directionsDisplay.directions); }); 

À ce qui suit;

 google.maps.event.addListener(directionsDisplay, 'directions_changed', function() { computeTotalDistance(directionsDisplay.directions); displayWaypoints(directionsDisplay.directions); }); 

Et ajouter cette fonction aussi

 function displayWaypoints(result) { for (var i = 0; i < markers.length; ++i) { markers[i].setMap(null); } markers = []; if (result.sf.waypoints) { for (var i = 0; i < result.sf.waypoints.length; ++i) { var latitude = result.sf.waypoints[i].location.wa; var longitude = result.sf.waypoints[i].location.ya; markers.push(new google.maps.Marker({ position: new google.maps.LatLng(latitude, longitude), map: map })); } } } 

Vous voudrez peut-être également supprimer le dessin du marqueur intégré de DirectionsRenderer. Remplacer

 var rendererOptions = { draggable: true }; 

Avec le suivant

 var rendererOptions = { draggable: true, suppressMarkers: true }; 

Je n'ai pas trouvé de références officielles à ce membre. Utilisez-le à vos risques et périls, Google peut modifier l'API sans préavis. Jusqu'à ce qu'ils établissent une API publique pour manipuler des waypoints après la trajectoire, je ne peux pas penser à une meilleure solution.

C'est ma première réponse de débordement de pile, j'espère que j'ai été utile.

Cordialement, Johnny