-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
172 lines (154 loc) · 5.38 KB
/
script.js
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
//La majeure partie de ce code est une version adapté au projet Dataviz du tutoriel Interactive Choropleth Map du site leafletjs.com de Volodymyr Agafonkin que vous pouvez trouver ici : https://leafletjs.com/examples/choropleth/
//La base de données Geojson a été quant à elle tirée de ce site https://geojson-maps.ash.ms/ créé par @ashkyd qui permet de générer des fichiers geojson avec les coordonnées des pays sélectionnés
const mapEurope = 'custom.geo.json';
let geojsoncouche = null;
var geojson;
// Initialisation du pays choisi (pas encore choisi)
var layer = null;
function coloreCarte(){
geojsoncouche.eachLayer(function(layer){
layer.setStyle(styleupdate(layer.feature))
});
};
document.querySelector("#fader").addEventListener("change", ()=> {
rangeSlide(document.querySelector("#fader").value)
coloreCarte();
});
//fonction pour le curseur
function rangeSlide(value) {
document.getElementById('rangeValue').innerHTML = value;
if(layer != null){
// Mise à jour du texte affiché en fonction du pays choisi
afficheTexte(layer.feature);
};
}
function afficheTexte(feature){
let valeurCurseur = document.querySelector("#fader").value;
valeurCurseur = testAfficheText(valeurCurseur,feature);
if(valeurCurseur >= 1912){
document.querySelector("#explication p").innerHTML = "<strong>Depuis " + valeurCurseur + "</strong><br>" + feature.properties["d"+valeurCurseur].texte;
}
else{
document.querySelector("#explication p").innerHTML = "Cliquez sur un pays coloré pour obtenir plus d'informations.";
}
}
function testAfficheText(valeurCurseur,feature){
while (valeurCurseur >= 1912){
if(feature.properties["d"+valeurCurseur]!=undefined){
return valeurCurseur;
} else {
valeurCurseur= valeurCurseur-1;
}
}
}
function styleupdate(features){
let valueCurseur = document.querySelector("#fader").value;
while (valueCurseur>=1913){
if(features.properties["d"+valueCurseur]!=undefined){
let lesdates = features.properties["d"+valueCurseur];
return {fillColor: ColorLevel(lesdates.niveau)}
} else {
valueCurseur= valueCurseur-1
}
}
return {fillColor: ColorLevel(0)}
}
//attribut une couleur en fonction du niveau de l'indicateur
function ColorLevel(niveau) {
if(niveau<=4){
const tabColor = ["#b0b0b0","#E32932","#BE95C4","#F6AA1C","#5A90D6"];
return tabColor[niveau];
} else if (niveau>4){
console.log("t'as fumer quoi? y'a 4 niveau patate")
}
else {
return "#b0b0b0";
}
};
//ajoute la couleur au pays
function style(niveau) {
return {
fillColor: ColorLevel(niveau),
weight: 2,
opacity: 1,
color: 'white',
dashArray: '3',
fillOpacity: 0.7
};
}
//stylise les bordures lors du passage du hover
function hoverstyle(niveau) {
return{
fillColor: ColorLevel(niveau),
weight: 2,
opacity: 1,
color: 'white',
dashArray: '3',
fillOpacity: 0
}
}
function nostyle(){
return {
fillColor: 'rgba(255, 255, 255, 0)',
weight: 0,
opacity: 0,
color: 'rgba(255, 255, 255, 0)',
dashArray: '',
fillOpacity: 0
};
}
//affiche la carte
const legend = L.control({position: 'bottomleft'});
$.getJSON(mapEurope,function(data){
var map = L.map('map').setView([58, 20], 3);
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png',{
maxZoom: 19,
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
console.log(data)
geojsoncouche = L.geoJson(data, {clickable: false, style: style}).addTo(map);
legend.addTo(map);
geojson = L.geoJson(data, {style: hoverstyle, onEachFeature: onEachFeature}).addTo(map);
// Initialiser à l'année 2022
document.querySelector("#fader").value = 2022;
// Simuler le clic sur l'outil de choix de date
document.querySelector("#fader").dispatchEvent(new Event("change"));
})
//affiche la légende
legend.onAdd = function (map) {
var div = L.DomUtil.create('div', 'info legend'),
level = [0, 1, 2, 3, 4];
text = ["Pas de données","Illégal","Illégal sauf conditions (danger, viol, inceste)","Légal sous conditions (santé, économie, statut social)","Légal sans conditions (en fonction des délais)"];
for (var i = 0; i < level.length; i++) {
div.innerHTML +=
'<i style="background:' + ColorLevel(level[i]) + '"></i> ' + text[i] + "</br>";
}
return div;
}
function highlightFeature(e) {
var layer = e.target;
layer.setStyle({
weight: 5,
color: '#666',
dashArray: '',
fillOpacity: 0
});
layer.bringToFront();
/* info.update(layer.feature.properties); */
}
function resetHighlight(e) {
geojson.resetStyle(e.target);
/* info.update(); */
}
function zoomToFeature(e) {
layer = e.target;
/* console.log(layer.feature) */
afficheTexte(layer.feature)
}
function onEachFeature(features, layer) {
layer.on({
mouseover: highlightFeature,
mouseout: resetHighlight,
click: zoomToFeature
});
}