Bonjour,
Je débute complètement en javaScript.
Je dois faire une carte interactive. Pour cela j'ai choisi OpenStreetMap et Leaflet.
J'arrive à afficher la carte sans problème ou même à afficher un seul marqueur. Mais je dois en afficher plusieurs à partir d'un fichier externe.
J'ai utilisé dans mon code un console.log pour vérifier que j'ai bien paramétrer l'appel à ce fichier. C'est correct.
Mais je ne vois aucun marqueur sur ma carte. J'ai donc soit oublié quelque chose, mal paramétrer quelque chose ou une simple erreur de frappe.
Je copie ci-dessous mes codes. Merci d'avance pour votre aide.
le fichier html (css incus pour ne faire qu'un ici)
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"/> <link rel="icon" href="img/bike.jpg"> <meta name="viewport" content="width=device-width"> <link rel="stylesheet" type="text/css" href="css/style.css"> <!--fichiers leaflet--> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.4/dist/leaflet.css" integrity="sha512-puBpdR0798OZvTTbP4A8Ix/l+A4dHDD0DGqYW6RQ+9jxkRFclaxxQb/SJAWZfWAkuyeQUytO7+7N4QKrDh+drA==" crossorigin="" /> <script src="https://unpkg.com/leaflet@1.3.4/dist/leaflet.js" integrity="sha512-nMMmRyTVoLYqjP9hrbed9S+FzjZHW5gY1TWCHA5ckwXZBadntCNs8kEqAWdrb9O7rxbCaA4lKTIWjDXZxflOcA==" crossorigin=""></script> <link rel="stylesheet" type="text/css" href="css/MarkerCluster.css" /> <link rel="stylesheet" type="text/css" href="css/MarkerCluster.Default.css" /> <title>Vélo'V</title> </head> <body> <div> <div id="map" style="height:500px;"> </div> <div id="info"> <table id="info-station">Station sélectionné <tr> <th id="adresse-station"></th> </tr> <tr> <td id="place-libre"></td> </tr> <tr> <td id="velo-dispo"></td> </tr> <tr> <td id="etat-station"></td> </tr> </table> </div> </div> <!--script javaScrip--> <script src="js/ajax.js"></script> <script src="js/map.js"></script> <script src="js/leaflet.markercluster.js"></script> </body> </html>
mon fichier ajax.js
et le fichier map.js
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 function ajaxGet(url, callback) { var req = new XMLHttpRequest(); req.open("GET", url); req.addEventListener("load", function () { if (req.status >= 200 && req.status < 400) {// Le serveur a réussi à traiter la requête // Appelle la fonction callback en lui passant la réponse de la requête callback(req.responseText); } else { // Affichage des informations sur l'échec du traitement de la requête console.error(req.status + " " + req.statusText + " " + url); } }); req.addEventListener("error", function () { // La requête n'a pas réussi à atteindre le serveur console.error("Erreur réseau avec l'URL " + url); }); req.send(null); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 //intitalisation de la carte var map = { lat :'45.7604276', lng : '4.8335709', map : 'null', showMap : function() { map = L.map('map').setView([this.lat, this.lng], 13); //centre de la carte et zoom par defaut L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { //sources attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors' }).addTo(map); }, //definition des fonction des marqueurs et des popup marker : function(item){ this.lat = item.position.lat; this.lng = item.position.lng; }, createPopup : function(item) { this.name = item.name; return this.name; }, } map.showMap(); ajaxGet( "https://api.jcdecaux.com/vls/v1/stations?contract=Lyon&apiKey=***********", function (reponse) { var stations = JSON.parse(reponse); console.log(reponse); function callback(reponse) { reponse = JSON.parse(reponse); //parcours le tableau lyon.js reponse.forEach(function (info) { L.marker([info.position.lat, info.position.lng], { "jcdecauxInfo": info} // on stocke ici toutes les infos ) .on('click', onMarkerClick) // fonction d'appel au click .addTo(map) .bindPopup(info.name); }); }; } ); //initialisation des marqueurs function createPopup(arg) { // Récupération du marker concerné let marker = arg.target; // Récupération des infos var info = marker.options.jcdecauxInfo; var address = info.address; var bikeStands = info.bike_stands; var availableBikes = info.available_bikes; var statusStation = info.status; // Affichage du rendu document.getElementById("info-station").style.display = "block";// Apparition du bloc contenant les infos de la station sélectionnée document.getElementById("adresse-station").innerText = address; document.getElementById("place-libre").innerHTML = bikeStands; document.getElementById("velo-dispo").innerHTML = availableBikes; document.getElementById("etat-station").innerHTML = statusStation; }
Partager