0% ont trouvé ce document utile (0 vote)
16 vues4 pages

Affichage d'itinéraires sur Google Maps

Transféré par

hasnabenzahi1
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
16 vues4 pages

Affichage d'itinéraires sur Google Maps

Transféré par

hasnabenzahi1
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

Voici l'explication détaillée ligne par ligne du code que vous avez partagé, qui

est destiné à afficher une carte Google Maps avec des itinéraires entre plusieurs
points (employés) et une destination finale.

### Fonction `initMap()`


Cette fonction initialise la carte et commence à géocoder les adresses des employés
pour tracer un itinéraire.

```javascript
function initMap() {
```
- Déclaration de la fonction `initMap()`, qui sera exécutée lorsque la page se
charge.

```javascript
const map = new google.maps.Map(document.getElementById("map"), {
zoom: 12,
center: { lat: 31.6295, lng: -7.9811 },
});
```
- **`const map`** : Crée une nouvelle carte Google Maps dans l'élément HTML avec
l'ID `map`.
- **`zoom: 12`** : Définit le niveau de zoom initial de la carte (plus le nombre
est élevé, plus le zoom est proche).
- **`center: { lat: 31.6295, lng: -7.9811 }`** : Définit les coordonnées (latitude
et longitude) du centre de la carte (par défaut).

```javascript
const geocoder = new google.maps.Geocoder();
```
- **`const geocoder`** : Crée un objet `Geocoder` de Google Maps qui est utilisé
pour convertir des adresses en coordonnées géographiques (géocodage).

```javascript
const employes = <?php echo json_encode($employes); ?>;
```
- **`const employes`** : Charge la liste des employés à partir du code PHP via
`json_encode`. Cela permet de convertir les données PHP en un tableau JavaScript
qui peut être utilisé dans le script.

```javascript
const destination = { lat: 31.6258, lng: -7.9892 };
```
- **`const destination`** : Définit la destination finale de l'itinéraire avec les
coordonnées géographiques (latitude et longitude).

### Fonction `geocodeAddresses()`


Cette fonction est responsable de géocoder chaque adresse des employés et de placer
un marqueur sur la carte pour chaque employé.

```javascript
const geocodeAddresses = async () => {
const locations = [];
```
- **`const geocodeAddresses = async () => {`** : Déclare une fonction asynchrone
qui géocode les adresses des employés. Elle retourne une promesse pour indiquer que
l'opération de géocodage est asynchrone.
- **`const locations = []`** : Initialise un tableau vide pour stocker les
positions géocodées des employés.

```javascript
for (const employee of employes) {
try {
const location = await geocodeAddress(geocoder, employee.adresse);
locations.push({
employee: employee,
location: location,
});
```
- **`for (const employee of employes)`** : Parcourt chaque employé dans le tableau
`employes`.
- **`const location = await geocodeAddress(geocoder, employee.adresse)`** : Appelle
la fonction `geocodeAddress()` (voir ci-dessous), qui géocode l'adresse de
l'employé. `await` attend que la géocodification soit terminée.
- **`locations.push({ employee: employee, location: location })`** : Ajoute l'objet
contenant l'employé et sa position géocodée dans le tableau `locations`.

```javascript
const marker = new google.maps.Marker({
position: location,
map: map,
title: `${employee.first_name} ${employee.last_name}`,
});
```
- **`const marker`** : Crée un nouveau marqueur sur la carte à la position géocodée
de l'employé.
- **`position: location`** : Place le marqueur à la position géocodée.
- **`map: map`** : Associe ce marqueur à la carte.
- **`title: `${employee.first_name} ${employee.last_name}``** : Définit le titre du
marqueur (affiché en survolant le marqueur avec la souris).

```javascript
const infoWindow = new google.maps.InfoWindow({
content: `
<strong>${employee.first_name}
${employee.last_name}</strong><br>
Adresse: ${employee.adresse}
`,
});
```
- **`const infoWindow`** : Crée une fenêtre d'information qui s'affiche lorsque
l'utilisateur clique sur un marqueur. Cette fenêtre contient le nom de l'employé et
son adresse.

```javascript
marker.addListener("click", () => {
infoWindow.open(map, marker);
});
```
- **`marker.addListener("click", () => {...})`** : Ajoute un écouteur d'événements
pour afficher la fenêtre d'information quand le marqueur est cliqué.

```javascript
} catch (error) {
console.error(`Erreur de géocodage pour ${employee.adresse}:`,
error);
}
}
return locations;
};
```
- **`catch (error)`** : Si le géocodage échoue pour une adresse, il est capturé et
un message d'erreur est affiché dans la console.
- **`return locations`** : La fonction retourne le tableau `locations` contenant
les coordonnées géocodées des employés.

### Fonction `geocodeAddress()`


Cette fonction géocode une adresse donnée.

```javascript
const geocodeAddress = (geocoder, address) => {
return new Promise((resolve, reject) => {
geocoder.geocode({ address: address }, (results, status) => {
if (status === "OK") {
resolve(results[0].geometry.location);
} else {
reject(status);
}
});
});
};
```
- **`geocodeAddress()`** : Cette fonction prend un `geocoder` et une `address`
comme arguments et retourne une promesse.
- **`geocoder.geocode({ address: address })`** : Appelle l'API de géocodage de
Google Maps pour obtenir les coordonnées de l'adresse.
- **`resolve(results[0].geometry.location)`** : Si le géocodage est réussi, la
promesse est résolue avec la première position géocodée.
- **`reject(status)`** : Si le géocodage échoue, la promesse est rejetée avec le
statut de l'échec.

### Appel de la fonction `geocodeAddresses()`


```javascript
geocodeAddresses().then((locations) => {
if (locations.length > 0) {
const waypoints = locations.map((loc) => ({
location: loc.location,
stopover: true,
}));
```
- **`geocodeAddresses().then((locations) => {...})`** : Appelle la fonction
`geocodeAddresses()` et attend que les géocodages soient terminés. Une fois que les
positions géocodées sont retournées, elles sont passées dans la fonction `then()`.
- **`const waypoints = locations.map((loc) => ({ location: loc.location, stopover:
true }))`** : Transforme les coordonnées géocodées en points de passage (waypoints)
que l'API Directions peut utiliser pour l'itinéraire.

```javascript
drawRouteWithAPI(waypoints, destination, map);
} else {
console.error("Aucun point valide pour dessiner un trajet.");
}
});
```
- **`drawRouteWithAPI(waypoints, destination, map)`** : Appelle la fonction
`drawRouteWithAPI()` pour dessiner l'itinéraire avec les points de passage et la
destination finale.
- **`else`** : Si aucune position géocodée valide n'a été trouvée, un message
d'erreur est affiché.

### Fonction `drawRouteWithAPI()`


Cette fonction dessine un itinéraire sur la carte en utilisant l'API Directions de
Google Maps.

```javascript
function drawRouteWithAPI(waypoints, destination, map) {
const directionsService = new google.maps.DirectionsService();
const directionsRenderer = new google.maps.DirectionsRenderer({
map: map,
suppressMarkers: true,
});
```
- **`const directionsService`** : Crée un service de directions de Google Maps pour
calculer l'itinéraire.
- **`const directionsRenderer`** : Crée un objet qui rendra l'itinéraire sur la
carte. L'option `suppressMarkers: true` empêche Google Maps d'ajouter des marqueurs
automatiques sur l'itinéraire.

```javascript
directionsService.route(
{
origin: waypoints[0].location,
destination: destination,
waypoints: waypoints.slice(1),
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING,
},
(response, status) => {
if (status === "OK") {
directionsRenderer.setDirections(response);
} else {
console.error("Erreur lors de la création de l'itinéraire :",
status);
}
}
);
}
```
- **`directionsService.route({...})`** : Calcule l'itinéraire en spécifiant
l'origine (premier employé), la destination finale, les points de passage et le
mode de transport (`DRIVING`).
- **`directionsRenderer.setDirections(response)`** : Affiche l'itinéraire sur la
carte.

Vous aimerez peut-être aussi