2010-05-21 6 views

Répondre

3

Vous devriez être en mesure d'obtenir les sommets individuels de la polyligne générée par GDirections très facilement. Vous devez d'abord vous assurer de passer l'option getPolyline: true lorsque vous appelez le GDirections.load() si vous ne joignez pas le GDirections à la carte. Ensuite, vous pouvez simplement parcourir chaque sommet de la polyligne, puis vous devriez probablement vérifier si votre point est dans un certain seuil de distance de votre emplacement prédéfini.

Prenons l'exemple suivant:

var map = new GMap2(document.getElementById("map")); 
var directions = new GDirections(map); 

// Your predefined point 
var pt = new GLatLng(51.470, -0.453); 

directions.load('from: London, UK to: Glasgow, UK', { getPolyline: true }); 

GEvent.addListener(directions, "load", function() { 
    for (var i = 0; i < directions.getPolyline().getVertexCount(); i++) { 
    if (directions.getPolyline().getVertex(i).distanceFrom(pt) < 100) { 
     // Your predefined point is within 100 meters of the route 
    } 
    } 
}); 

Vous pourriez sans doute améliorer cette méthode en sautant quelques étapes qui sont certainement trop loin de votre point de test. Vous pouvez obtenir l'index polyligne de chaque étape de la route avec la méthode getPolylineIndex(). Cela peut vous aider à restreindre votre boucle for à un ensemble de sommets plus étroit.

Pour en savoir plus et référence:

+0

Cette méthode ne fonctionnera pas. Certaines étapes peuvent être longues de plus de 50 km (comme lorsque vous empruntez la même autoroute). Si mon point d'intérêt est à mi-chemin de cette étape, vérifier si le point est dans un rayon de 25 km donnera beaucoup de faux positifs. J'ai besoin de savoir si le point est exactement sur cette route ou non. – Pavel

+0

@Pavel: Vous avez raison. Vérifiez la réponse mise à jour. Il devait parcourir les sommets des polylignes, et non pas les étapes de routage comme je l'ai suggéré plus tôt. –

Questions connexes