Calculer un cap entre deux points ( Départ et Arrivée )
Lorsque vous naviguez sur une sphère, le cap est l'angle séparant votre direction d'un point de référence fixe, généralement le Nord vrai. Dans l'API Google Maps, le cap est défini en degrés par rapport au Nord vrai, où le cap est mesuré dans le sens horaire à partir du Nord vrai (0 degrés).
Vous pouvez calculer le cap entre deux endroits à l'aide de la méthode computeHeading(), en lui passant :
- les coordonnées du point de départ : objet LatLng,
- les coordonnées du point d'arrivée : objet LatLng.
La valeur retournée est un nombre.
Exemple :
var cap = google.maps.geometry.spherical.computeHeading(départ, arrivée)

/** * Dans cet exemple on souhaite calculer le cap entre ces 2 points : * Départ : Tours (FR) : 47.390273, 0.688834 * Arrivée : Fukushima (JA) : 37.316864, 141.024928 */ var Tours = new google.maps.LatLng(47.390273,0.688834); var Fukushima = new google.maps.LatLng(37.316864,141.024928); var cap = google.maps.geometry.spherical.computeHeading(Tours, Fukushima); /** * Résultat le cap a pour valeur : 30.522621338711815 degrès * Conclusion lorsque je suis à Tours et que je regarde le Nord vrai * Je dois me tourner de 30.52 degrès dans le sens des aiguilles d'une montre * puis marcher en ligne droite pour atteindre Fukushima ... d'ici quelques jours ! */
Voir un exemple complet : Calculer un cap pour atteindre un point particulier
Calculer le point d'arrivée à partir du point de départ, d'un cap et d'une distance
La bibliothèque Géométrie permet, grâce à la méthode statique computeOffset(), de calculer les coordonnées d'un point arrivée en donnant :
- les coordonnées du point de départ : objet LatLng,
- le cap (en degrès) à suivre,
- la distance à parcourir (en mètres).
La valeur retournée est un objet LatLng.
Exemple :
var pointArrivee = google.maps.geometry.spherical.computeOffset(départ, distance, cap)

/** * Dans cet exemple on souhaite calculer le point atteind : * - en partant de Tours (FR), * - en parcourant 9.500 kms, * - avec un cap de 72 °. */ var pointDepart = new google.maps.LatLng(47.390287,0.688818); var distance = 9500000; var cap = 72; var pointArrivee = google.maps.geometry.spherical.computeOffset(pointDepart, distance, cap); /** * Résultat on arrive sur le point pointArrivee * situé quelque part en Thailande et ayant pour * coordonnées GPS 15.563547, 100.954431 */
Voir un exemple complet : Calculer une destination en connaissant le point de départ, le cap et la distance
Calculer l'emplacement d'un point situé entre deux points connus via une fraction
Vous pouvez également calculer une destination située entre deux points en utilisant la méthode statique interpolate(), qui effectue une interpolation linéaire sphériques entre les deux emplacements, où la valeur indique la distance fractionnaire à parcourir le long du chemin depuis l'origine jusqu'à la destination.
En donnant :
- les coordonnées du point de départ : LatLng,
- les coordonnées du point d'arrivée : LatLng,
- une valeur comprise entre 0 et 1 correspondant à la fraction.
La valeur retournée est un objet LatLng.
Exemple :
var pointIntermediaire = google.maps.geometry.spherical.interpolate(départ, arrivée, fraction)

/** * Dans cet exemple on souhaite connaître l'emplacement du point intermédiaire : * - placé sur la trajectoire de deux point connus * - situé à 75% du point de départ (distance fractionnaire entre 0 et 1) */ var distanceFractionnaire = .75; var pointDepart = new google.maps.LatLng(47.390287,0.688818); var pointArrivee = new google.maps.LatLng(47.128151,0.997739); var pointIntermediaire = google.maps.geometry.spherical.interpolate(pointDepart, pointArrivee, distanceFractionnaire); /** * Résultat on arrive sur le point pointIntermediaire * ayant pour coordonnées GPS : * 48.021604151492255, 1.6385190734584967 */
Voir un exemple complet : Calculer l'emplacement d'un point sur une trajectoire à l'aide d'une fraction.
Afficher une geodésique et une ligne droite entre 2 points
L'exemple suivant crée deux polylines lorsque vous cliquez sur deux emplacements sur la carte - une géodésique et une "ligne droite" reliant les deux emplacements - et calcule le cap pour le voyage entre les deux emplacements :
var polyline;
var geodesique;
var maCarte;
var compteurClick = 0;
function initialize () {
var atlantique = new google.maps.LatLng(34, -40.605);
var optionsCarte = {
zoom: 4,
center: atlantique,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
maCarte = new google.maps.Map(document.getElementById('EmplacementDeMaCarte'), optionsCarte);
var optionsPolyline = {
strokeColor: "#FF0000",
strokeOpacity: 1.0,
strokeWeight: 3
}
polyline = new google.maps.Polyline(polyOptions);
polyline.setMap(maCarte);
var optionsGeodesique = {
strokeColor: "#CC0099",
strokeOpacity: 1.0,
strokeWeight: 3,
geodesic: true
}
geodesique = new google.maps.Polyline(optionsGeodesique);
geodesique.setMap(maCarte);
// Ajouter un gestionnaire d´événement pour le click
google.maps.event.addListener (maCarte, 'click', addLocation);
}
function addLocation(event) {
compteurClick ++;
if (compteurClick == 1) {
addOrigin(event);
}
if (compteurClick == 2) {
addDestination(event);
}
}
function addOrigin(event){
clearPaths();
var path = polyline.getPath();
path.push(event.latLng);
var = gPath geodesic.getPath();
gPath.push(event.latLng);
}
function addDestination(event){
var path = polyline.getPath();
path.push(event.latLng);
var gPath = geodesic.getPath();
gPath.push(event.latLng);
adjustHeading();
compteurClick = 0;
}
function clearPaths() {
var path = polyline.getPath();
while(path.getLength()){
path.pop();
}
var gPath = geodesic.getPath();
while(gPath.getLength()){
gPath.pop();
}
}
function adjustHeading() {
var path = polyline.getPath();
var pathSize = path.getLength();
var heading = google.maps.geometry.spherical.computeHeading(path.getAt(0), path.getAt(pathSize-1));
document.getElementById('heading').value = heading;
document.getElementById('origine').value = path.getAt(0).lat() + "," + path.getAt(0).lng();
document.getElementById('destination').value = path.getAt(pathSize-1).lat() + "," + path.getAt(pathSize-1).lng();
}
