Subversion Repositories eFlore/Applications.moissonnage

Rev

Rev 28 | Rev 37 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 28 Rev 31
Line 1... Line 1...
1
// Javascript Document
1
// Javascript Document
Line 2... Line 2...
2
 
2
 
3
 
3
 
4
// ==============================================================
4
// ===================================================================================
5
//  FONCTIONS ADDITIONNELLES POUR GERER LES URLS
5
//  FONCTIONS ADDITIONNELLES POUR GERER LES URLS ET L'OUVERTRURE DE NOUVELLE FENETRE
6
function convertirEnParametresUrl(objet) {
6
function convertirEnParametresUrl(objet) {
7
	var parametresUrl = '';
7
	var parametresUrl = '';
8
	for (attribut in objet) {
8
	for (attribut in objet) {
9
		if (typeof(objet[attribut]) == 'function' || typeof(objet[attribut]) == 'undefined' ||
9
		if (typeof(objet[attribut]) == 'function' || typeof(objet[attribut]) == 'undefined' ||
10
			objet[attribut] == null)
10
			objet[attribut] == null || objet[attribut] == '*' || objet[attribut] == 0)
11
			continue;
11
			continue;
12
		parametresUrl += (parametresUrl == '' ? '' : '&') + attribut + "=" + objet[attribut].toString();
12
		parametresUrl += (parametresUrl == '' ? '' : '&') + attribut + "=" + objet[attribut];
13
	}
13
	}
Line 14... Line 14...
14
	return parametresUrl;
14
	return parametresUrl;
-
 
15
};
-
 
16
 
15
};
17
function recupererParametreDansUrl(nomParametre, chaineRecherche) {
16
 
18
	var split = chaineRecherche.split('?');
17
function estParametreDansUrl(nomParametre) {
19
	chaineRecherche = split[split.length-1];
18
	var estDansUrl = false;
20
	var valeurParametre = null;
19
	var listeParametres = location.search.substring(1).split("&");
21
	var listeParametres = chaineRecherche.split("&");
20
	for (var index = 0; index < listeParametres.length; index ++) {
22
	for (var index = 0; index < listeParametres.length; index ++) {
-
 
23
		var split = listeParametres[index].split("=");
21
		var split = listeParametres[index].split("=");
24
		if (split[0] == nomParametre) {
22
		if (split[0] == nomParametre) {
25
			valeurParametre = split[1];
23
			estDansUrl = true;
26
			break;
24
		}
27
		}
Line -... Line 28...
-
 
28
	}
-
 
29
	return valeurParametre;
-
 
30
};
25
	}
31
 
-
 
32
function estValeurDansTableau(tableau, valeur) {
-
 
33
	var index;
-
 
34
	for (index = 0; index < tableau.length && tableau[index] != valeur; index ++);
-
 
35
	return (tableau.length > 0 && index != tableau.length);
-
 
36
}
-
 
37
 
-
 
38
function ouvrirNouvelleFenetre(element, event) {
-
 
39
	window.open(element.href);
-
 
40
	return arreter(event);
-
 
41
}
-
 
42
 
-
 
43
function arreter(event) {
-
 
44
	if (event.stopPropagation) {
-
 
45
		event.stopPropagation();
-
 
46
	} else if (window.event) {
-
 
47
		window.event.cancelBubble = true;
-
 
48
	}
-
 
49
	if (event.preventDefault) {
-
 
50
		event.preventDefault();
-
 
51
	}
Line -... Line 52...
-
 
52
	event.returnValue = false;
Line 26... Line 53...
26
	return estDansUrl;
53
	return false;
27
};
54
}
28
 
55
 
29
// =============================================================
56
 
30
 
57
 
31
 
58
// =============================================================
32
 
59
 
33
var map = null,
60
var map = null,
34
optionsCoucheOSM = {
61
optionsCoucheOSM = {
35
	attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors,'
62
	attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors,'
36
	+ ' <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
63
	+ ' <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
37
	maxZoom: 18
64
	maxZoom: 18
38
},
65
},
Line 49... Line 76...
49
optionsCarte = {
76
optionsCarte = {
50
	center : new L.LatLng(46, 2),
77
	center : new L.LatLng(46, 2),
51
	zoom : 6,
78
	zoom : 6,
52
	minZoom : 3,
79
	minZoom : 3,
53
	maxBounds : [[-85.051129, -180], [85.051129, 180]],
80
	maxBounds : [[-85.051129, -180], [85.051129, 180]],
54
	layers : [couchePlanGoogle]
81
	layers : [coucheOSM]
55
},
82
},
-
 
83
zoom = 6,
56
legende = null,
84
legende = null,
-
 
85
coucheDepartement = null,
57
infoBulle = null;
86
infoBulle = null;
Line 58... Line 87...
58
 
87
 
-
 
88
var coucheSites = new L.FeatureGroup(),
-
 
89
points = new Array(),
-
 
90
coucheSites = new L.FeatureGroup(),
-
 
91
sources = new Object(),
-
 
92
formeDonnees = '',
59
var coucheSites = new L.FeatureGroup(),
93
popupMaille = null;
Line 60... Line 94...
60
overlays = [];
94
overlays = [];
-
 
95
 
61
 
96
var requeteChargementPoints = null,
-
 
97
	chargementMaillesEnCours = false,
62
var requeteChargementPoints = null,
98
doitRafraichirCarte = true,
63
doitRafraichirCarte = true,
99
chargementCommunesEnCours = false,
Line 71... Line 107...
71
	initialiserWidget();
107
	initialiserWidget();
72
});
108
});
Line 73... Line 109...
73
 
109
 
74
function initialiserWidget() {
110
function initialiserWidget() {
75
	initialiserCarte();
111
	initialiserCarte();
76
	initialiserListeners();
112
	dimensionnerOverlay();
-
 
113
	initialiserPanneauControle();
-
 
114
	initialiserSources();
77
	initialiserPanneauControle();
115
	initialiserListeners();
78
	chargerLimitesCommunales();
-
 
79
	if (!estParametreDansUrl('source')) {
116
	chargerLimitesCommunales();
80
		initialiserSources();
-
 
81
	}
117
	chargerMaillesVides();
82
	programmerRafraichissementCarte();
118
	programmerRafraichissementCarte();
Line 83... Line 119...
83
}
119
}
84
 
120
 
85
$(window).resize(function() {
121
$(window).resize(function() {
86
	dimensionnerCarte();
122
	dimensionnerCarte();
87
	if (infoBulle != null) {
123
	if (infoBulle != null) {
88
		redimensionnerPopup();
124
		redimensionnerPopup();
Line -... Line 125...
-
 
125
	}
-
 
126
});
-
 
127
 
-
 
128
function dimensionnerOverlay() {
-
 
129
	var taille = '1.6';
-
 
130
	var tailleMaxIcones = 20;
-
 
131
	var padding_icones = 8;
-
 
132
	$("#zone-titre h1").css('font-size', (taille)+'em');
-
 
133
	$("#zone-titre").css('padding', padding_icones+"px "+padding_icones+"px "+Math.round(padding_icones/4)+"px");	
-
 
134
	$('#zone-titre').height(tailleMaxIcones*2);
-
 
135
	var left = ($(window).width()-$('#zone-titre').width())/2;
Line 89... Line 136...
89
	}
136
	$('#zone-titre').css('left',left);
90
});
137
}
91
 
138
 
92
 
139
 
Line 101... Line 148...
101
	coucheSites.addTo(map);
148
	coucheSites.addTo(map);
102
	coucheOSM.addTo(map);
149
	coucheOSM.addTo(map);
103
	couchePlanGoogle.addTo(map);
150
	couchePlanGoogle.addTo(map);
104
	coucheSatelliteGoogle.addTo(map);
151
	coucheSatelliteGoogle.addTo(map);
105
	var echelle = new L.Control.Scale({
152
	var echelle = new L.Control.Scale({
106
		maxWidth : 100,
153
		maxWidth : 32,
107
		metric : true,
154
		metric : true,
108
		imperial : false,
155
		imperial : false,
109
		updateWhenIdle : true
156
		updateWhenIdle : true
110
	});
157
	});
111
	map.addControl(echelle);
158
	map.addControl(echelle);
-
 
159
	zoom = map.getZoom();
112
}
160
}
-
 
161
 
113
function initialiserListeners() {
162
function initialiserListeners() {
114
	map.on('moveend', surChangementVueSurCarte);
163
	map.on('moveend', surChangementVueSurCarte);
115
	map.on('zoomend', surChangementVueSurCarte);
164
	map.on('zoomend', surChangementVueSurCarte);
116
	map.on('popupclose', function(e) {
165
	map.on('popupclose', function(e) {
117
		masquerInfoBulle();
166
		masquerInfoBulle();
Line 119... Line 168...
119
	});
168
	});
120
}
169
}
Line 121... Line 170...
121
 
170
 
122
function initialiserPanneauControle() {
171
function initialiserPanneauControle() {
123
	var baseMaps = {
172
	var baseMaps = {
124
		"OSM" : coucheOSM,
173
		"OpenStreetMap" : coucheOSM,
125
		"Plan" : couchePlanGoogle,
174
		"Plan" : couchePlanGoogle,
126
		"Satellite" : coucheSatelliteGoogle
175
		"Satellite" : coucheSatelliteGoogle
Line 127... Line 176...
127
	};
176
	};
128
 
-
 
129
	var overlayMaps = {};
177
 
-
 
178
	var overlayMaps = {};
130
	if (!estParametreDansUrl('source')) {
179
	for (var index = 0; index < listeSources.length; index ++) {
131
		for (var index = 0; index < nomSources.length; index ++) {
-
 
132
			overlayMaps[nomSources[index]] = new L.LayerGroup();
180
		sources[listeSources[index]] = estValeurDansTableau(source, listeSources[index]);
133
		}
181
		overlayMaps[listeSources[index]] = new L.LayerGroup();
134
	}
182
	}
135
	L.control.layers(baseMaps, overlayMaps).addTo(map);
183
	L.control.layers(baseMaps, overlayMaps).addTo(map);
136
	coucheOSM.bringToBack();
184
	coucheOSM.bringToFront();
Line 137... Line 185...
137
	couchePlanGoogle.bringToFront();
185
	couchePlanGoogle.bringToBack();
138
	coucheSatelliteGoogle.bringToBack();
186
	coucheSatelliteGoogle.bringToBack();
139
	
187
	
140
	// garder par defaut la couche plan google comme selectionnee dans le panel
188
	// garder par defaut la couche plan google comme selectionnee dans le panel
141
	var selecteursFonds = $('.leaflet-control-layers-base .leaflet-control-layers-selector');
189
	var selecteursFonds = $('.leaflet-control-layers-base .leaflet-control-layers-selector');
142
	selecteursFonds[0].checked = false;
190
	selecteursFonds[0].checked = true;
Line 143... Line 191...
143
	selecteursFonds[1].checked = true;
191
	selecteursFonds[1].checked = false;
-
 
192
	selecteursFonds[2].checked = false;
144
	selecteursFonds[2].checked = false;
193
}
145
}
-
 
146
 
-
 
147
function chargerLimitesCommunales() {
194
 
148
	if (urlsLimitesCommunales != null) {
-
 
149
		for (var index = 0; index < urlsLimitesCommunales.length; index ++) {
-
 
150
			var url = urlsLimitesCommunales[index];
-
 
151
			var coucheDepartement = new L.KML(url, {async: true});
-
 
152
			coucheDepartement.on("loaded", function(e) {
-
 
153
				map.fitBounds(e.target.getBounds());
195
function chargerLimitesCommunales() {
154
			});
196
	coucheDepartement = new L.KML(null, {async : true}).addTo(map);
Line 155... Line 197...
155
			map.addLayer(coucheDepartement);
197
	if (urlsLimitesCommunales != null) {
156
		}
198
		coucheDepartement.addKMLFiles(urlsLimitesCommunales);
157
	}
199
	}
158
}
200
}
159
 
201
 
160
function initialiserSources() {
202
function initialiserSources() {
161
	overlays = $('.leaflet-control-layers-overlays .leaflet-control-layers-selector');
203
	overlays = $('.leaflet-control-layers-overlays .leaflet-control-layers-selector');
162
	$.each(overlays, function (index, input) {
-
 
163
		input.value = sources[index];
204
	$.each(overlays, function (index, input) {
164
		input.id = 'overlay' + (index+1);
205
		input.value = listeSources[index];
165
		var lien = '<a href="' + liensVersSources[index] + '" target="_blank">' + nomSources[index] + '</a>';
-
 
166
		$('#overlay' + (index+1) + ' ~ span').html(lien);
206
		input.id = 'overlay' + (index+1);
167
		input.type = 'radio';
207
		var lien = '<a href="' + liensVersSources[index] + '" target="_blank">' + nomListeSources[index] + '</a>';
168
		input.checked = (sources[index] == source);
208
		$('#overlay' + (index+1) + ' ~ span').html(lien);
169
		input.onchange = function(event) {
209
		input.checked = sources[listeSources[index]];
Line -... Line 210...
-
 
210
		input.onclick = function(event) {
-
 
211
			changerSource(event.target.value);
-
 
212
		}
-
 
213
	});
-
 
214
}
-
 
215
 
-
 
216
function determinerSourcesSelectionnees() {
-
 
217
	var sourcesSelectionnees = new Array();
-
 
218
	for (source in sources) {
-
 
219
		if (sources[source] == true) {
170
			// evenement sur selection/deselection overlay dans sa checkbox
220
			sourcesSelectionnees.push(source);
171
			changerSource(event.target.value);
221
		}
172
		}
222
	}
173
	});
223
	return sourcesSelectionnees;
-
 
224
}
-
 
225
 
174
}
226
function surChangementVueSurCarte() {
175
 
227
	if (doitRafraichirCarte == false) {
176
function surChangementVueSurCarte() {
228
		doitRafraichirCarte = true;
Line 177... Line 229...
177
	if (doitRafraichirCarte == false) {
229
	} else {
-
 
230
		supprimerTousLayers();
178
		doitRafraichirCarte = true;
231
		zoom = map.getZoom();
179
	} else {
232
		chargerMaillesVides();
180
		programmerRafraichissementCarte();
233
	}
181
	}
234
}
182
}
235
 
183
 
-
 
184
function programmerRafraichissementCarte() {
236
function chargerMaillesVides() {
185
	if(timer != null) {
237
	chargementMaillesEnCours = true;
-
 
238
	if (timer != null) {
-
 
239
        window.clearTimeout(timer);
-
 
240
    }	
-
 
241
	if (requeteChargementPoints != null) {
186
        window.clearTimeout(timer);
242
		stopperRequeteAjax();
-
 
243
	}
-
 
244
	timer = window.setTimeout(function() {
187
    }
245
		var coordonneesBordure = calculerCoordonneesBordure();
188
	if(requeteChargementPoints != null) {
246
		var parametres = {
189
		requeteChargementPoints.abort();
247
				"source" : "floradata",
-
 
248
				"bbox" : coordonneesBordure,
-
 
249
				"zoom" : map.getZoom()
-
 
250
			};
-
 
251
			url = urlBase + "mailles?" + convertirEnParametresUrl(parametres);
-
 
252
			fonctionCallback = traiterDonneesStations;
-
 
253
			executerAJAX();
-
 
254
	}, 400);
-
 
255
}
-
 
256
 
-
 
257
function programmerRafraichissementCarte(source) {
-
 
258
	source = (source == null || source == 'null') ? null : source;
-
 
259
	if (!chargementMaillesEnCours) {
-
 
260
		if (timer != null) {
-
 
261
			window.clearTimeout(timer);
-
 
262
		}
-
 
263
		if (requeteChargementPoints != null) {
-
 
264
			if (source == null) {
190
		requeteChargementPoints = null;
265
				stopperRequeteAjax();
Line -... Line 266...
-
 
266
			}
-
 
267
		}
-
 
268
		timer = window.setTimeout("rafraichirDonnnees('"+source+"')", 250);
-
 
269
    } else {
-
 
270
    	window.setTimeout("programmerRafraichissementCarte('"+source+"')", 400);
-
 
271
    }
-
 
272
}
-
 
273
 
-
 
274
function stopperRequeteAjax() {
-
 
275
	requeteChargementPoints.abort();
-
 
276
	requeteChargementPoints = null;
-
 
277
}
-
 
278
 
-
 
279
function rafraichirDonnnees(source) {
-
 
280
	source = (source == null || source == 'null') ? null : source;
-
 
281
	if (coucheDepartement == null || coucheDepartement.getStatus() == KML_READY) {
-
 
282
		if (source != null) {
-
 
283
			chargerLocalisations(source);
-
 
284
		} else {
-
 
285
			supprimerLocalisations();
-
 
286
			for (source in sources) {
-
 
287
				if (sources[source] == true) {
Line 191... Line 288...
191
	}
288
					chargerLocalisations(source);
192
	timer = window.setTimeout(function() {
289
				}
-
 
290
			}
-
 
291
		}
-
 
292
	} else {
-
 
293
		window.setTimeout("rafraichirDonnnees('"+source+"')", 800);
-
 
294
	}
-
 
295
}
-
 
296
 
-
 
297
function supprimerTousLayers() {
-
 
298
	coucheSites.clearLayers();
-
 
299
	points = [];
-
 
300
	formeDonnees = '';
-
 
301
}
-
 
302
 
-
 
303
function supprimerLocalisations(source) {
-
 
304
	source = (typeof(source) == 'undefined') ? null : source;
-
 
305
	if (source != null) {
-
 
306
		var sourceUrl = recupererParametreDansUrl('source', url);
-
 
307
		if (requeteChargementPoints != null && sourceUrl == source && source != null) {
-
 
308
			stopperRequeteAjax();
-
 
309
		}
-
 
310
		coucheSites.eachLayer(function(layer) {
-
 
311
			supprimerLayer(layer, source);
-
 
312
		});
-
 
313
		if (source != null) {
-
 
314
			supprimerPointsListe(source);
-
 
315
		}
-
 
316
		var sourcesSelectionnees = determinerSourcesSelectionnees();
-
 
317
		if (sourcesSelectionnees.length == 1 && determinerNombreMarqueurs(sourcesSelectionnees[0]) > 0) {
-
 
318
			transformerMaillesEnPoints(sourcesSelectionnees[0]);
-
 
319
		}
-
 
320
		var sontPointsAffiches = (points.length>0 && determinerNombreMailles(false)==0);
-
 
321
		formeDonnees = sontPointsAffiches ? 'point' : 'maille';
-
 
322
	}
-
 
323
}
-
 
324
 
-
 
325
function estLayerUtilisePourSource(layer, source) {
-
 
326
	return (
-
 
327
		(layer.typeSite == 'MAILLE' && typeof(layer.nombrePoints[source]) != 'undefined') ||
-
 
328
		(layer.typeSite != 'MAILLE' && layer.source == source)
-
 
329
	);
-
 
330
}
193
		supprimerLocalisations();
331
 
Line 194... Line 332...
194
		afficherMessageChargement('stations');
332
function supprimerLayer(layer, source) {
195
		chargerLocalisations();
333
	if (estLayerUtilisePourSource(layer, source)) {
196
    }, 400);
334
		if (layer.typeSite == 'MAILLE') {
197
}
335
			supprimerSourceDansMaille(layer, source);
198
 
336
		} else {
199
 
337
			coucheSites.removeLayer(layer);
200
function supprimerLocalisations() {
338
		}
-
 
339
	}
201
	coucheSites.clearLayers();
340
}
202
}
341
 
-
 
342
 
-
 
343
function changerSource(projetClique) {
203
 
344
	var indexProjetClique;
204
 
345
	for (var index = 0; index < overlays.length; index ++) {
205
function changerSource(projetClique) {
-
 
206
	// deselctionner les autres boutons des controles d'overlays dans le panel
-
 
207
	for (var index = 0; index < overlays.length; index ++) {
346
		if (overlays[index].value == projetClique) {
Line 208... Line -...
208
		if (overlays[index].value != projetClique) {
-
 
209
			overlays[index].checked = false;
347
			indexProjetClique = index;
-
 
348
		}
210
		}
349
	}
211
	}
350
	masquerInfoBulle();
212
	// afficher les sites dans la carte pour le projet selectionne
351
	sources[projetClique] = overlays[indexProjetClique].checked;
-
 
352
	if (sources[projetClique] == true) {
213
	if (infoBulle != null) {
353
		programmerRafraichissementCarte(projetClique);
Line 214... Line 354...
214
		masquerInfoBulle();
354
	} else {
215
	}
355
		supprimerLocalisations(projetClique);
216
	source = projetClique;
356
	}
Line 243... Line 383...
243
 
383
 
244
function requeteEnCours() {
384
function requeteEnCours() {
245
	return (requeteChargementPoints != null && requeteChargementPoints.readyState != 4);
385
	return (requeteChargementPoints != null && requeteChargementPoints.readyState != 4);
Line 246... Line 386...
246
}
386
}
247
 
387
 
248
function retourRequeteOK() {
388
function estStatutRequeteOK() {
249
	return ((requeteChargementPoints.status == 200 || requeteChargementPoints.status == 304)
389
	return ((requeteChargementPoints.status == 200 || requeteChargementPoints.status == 304)
Line 250... Line -...
250
		|| requeteChargementPoints.status == 0);
-
 
251
}
-
 
252
 
390
		|| requeteChargementPoints.status == 0);
-
 
391
}
-
 
392
 
-
 
393
function chargerLocalisations(source) {
-
 
394
	if (requeteEnCours()) {
253
 
395
		window.setTimeout("chargerLocalisations('"+source+"')", 400);
254
 
396
	} else {
255
function chargerLocalisations() {
397
		afficherMessageChargement('stations');
256
	// generer l'URL du script a interroger sur le serveur
398
		// generer l'URL du script a interroger sur le serveur
257
	var coordonneesBordure = calculerCoordonneesBordure();
399
		var coordonneesBordure = calculerCoordonneesBordure();
258
	var parametres = {
400
		var parametres = {
259
		"source" : source,
401
			"source" : source,
-
 
402
			"num_taxon" : numTaxon,
260
		"num_taxon" : num_taxon,
403
			"referentiel" : referentiel,
-
 
404
			"dept" : dept,
-
 
405
			"nn" : nn,
261
		"referentiel" : referentiel,
406
			"auteur" : auteur,
-
 
407
			"date_debut" : dateDebut,
262
		"dept" : dept,
408
			"date_fin" : dateFin,
263
		"auteur" : auteur,
409
			"bbox" : coordonneesBordure,
264
		"bbox" : coordonneesBordure,
410
			"nb_jours" : nbJours,
265
		"zoom" : map.getZoom()
-
 
266
	};
411
			"zoom" : map.getZoom()
267
	url = urlBase + "stations?" + convertirEnParametresUrl(parametres);
412
		};
-
 
413
		url = urlBase + "stations?" + convertirEnParametresUrl(parametres);
268
	
414
		fonctionCallback = traiterDonneesStations;
Line 269... Line 415...
269
	fonctionCallback = traiterDonneesStations;
415
		executerAJAX();
270
	executerAJAX();
416
	}
271
}
417
}
272
 
418
 
273
function calculerCoordonneesBordure() {
419
function calculerCoordonneesBordure() {
274
	var bordure = map.getBounds();
420
	var bordure = map.getBounds();
275
	var ouest = bordure.getSouthWest().lng,
421
	var ouest = bordure.getSouthWest().lng.toFixed(6),
276
		sud = Math.max(bordure.getSouthWest().lat, -85.051129),
422
		sud = Math.max(bordure.getSouthWest().lat, -85.051129).toFixed(6),
277
		est = bordure.getNorthEast().lng,
423
		est = bordure.getNorthEast().lng.toFixed(6),
278
		nord = Math.min(bordure.getNorthEast().lat, 85.051129);
424
		nord = Math.min(bordure.getNorthEast().lat, 85.051129).toFixed(6);
279
	// appliquer les limites possibles de la projection actuellement utilisee aux coordonnees
425
	// appliquer les limites possibles de la projection actuellement utilisee aux coordonnees
Line 291... Line 437...
291
	return [ouest, sud, est, nord].join(',');
437
	return [ouest, sud, est, nord].join(',');
292
}
438
}
Line 293... Line 439...
293
 
439
 
294
function traiterDonneesStations() {
440
function traiterDonneesStations() {
295
	masquerMessageChargement();
-
 
296
	
441
	masquerMessageChargement();
297
	var texte = requeteChargementPoints.responseText;
442
	var texte = requeteChargementPoints.responseText;
298
	if (!retourRequeteOK()) {
443
	if (!estStatutRequeteOK()) {
299
		alert(texte);
444
		alert(texte);
300
	} else {
445
	} else {
301
		var donneesJSON = eval("(function(){return " + texte + ";})()");
446
		var donneesJSON = eval("(function(){return " + texte + ";})()");
302
		if (typeof(donneesJSON) != 'undefined' && typeof(donneesJSON.features) != 'undefined') {
447
		if (donneesJSON != null && typeof(donneesJSON.features) != 'undefined') {
303
			ajouterObjets(donneesJSON);
448
			ajouterStationsSurCarte(donneesJSON);
304
		}
449
		}
305
	}
450
	}
Line 306... Line -...
306
}
-
 
307
 
451
}
308
 
-
 
309
function ajouterObjets(data) {
-
 
310
	coucheSites.clearLayers();
-
 
311
	var contientMailles = (data.features[0].properties.typeSite == 'MAILLE');
452
 
312
	for (var index = 0; index < data.features.length; index ++) {
453
function ajouterStationsSurCarte(data) {
313
		switch (data.features[index].properties.typeSite) {
-
 
314
			case 'MAILLE'  : ajouterMaille(data.features[index]);
454
	if (doitTransformerEnMaille(data.stats)) {
315
				break;
-
 
316
			case 'COMMUNE' :
-
 
317
			case 'STATION' : ajouterPoint(data.features[index]);
455
		if (points.length > 0 && data.stats.source != '') {
-
 
456
			combinerMaillesEtPoints();
-
 
457
		}
-
 
458
		formeDonnees = 'maille';
-
 
459
	} else {
-
 
460
		formeDonnees = data.stats.formeDonnees;
-
 
461
	}
-
 
462
	var sourceDonnees = data.stats.source;
318
				break;
463
	for (var index = 0; index < data.features.length; index ++) {
319
		}
464
		ajouterStation(data.features[index]);
320
	}
465
	}
321
	if (contientMailles && legende == null) {
466
	if (formeDonnees == 'maille' && data.stats.sites > 0) {
-
 
467
		afficherLegende();
322
		afficherLegende();
468
		regenererInfobulleMailles();
323
	} else if (legende != null) {
469
	} else {
-
 
470
		masquerLegende();
-
 
471
	}
-
 
472
	if (chargementMaillesEnCours) {
-
 
473
		chargementMaillesEnCours = false;
-
 
474
		programmerRafraichissementCarte();
-
 
475
	}
-
 
476
}
-
 
477
 
-
 
478
function ajouterStation(feature) {
-
 
479
	if (feature.properties.typeSite == 'MAILLE') {
-
 
480
		traiterMaille(feature);
-
 
481
	} else {
-
 
482
		ajouterPoint(feature);
-
 
483
	}
-
 
484
}
-
 
485
 
-
 
486
function doitTransformerEnMaille(statsFeatures) {
-
 
487
	var condition1 = (formeDonnees == 'point' && statsFeatures.formeDonnees =='maille');
-
 
488
	var condition2 = (formeDonnees == 'maille' && statsFeatures.formeDonnees =='point'
-
 
489
		&& determinerNombreMailles(false) > 0);
-
 
490
	var condition3 = (statsFeatures.formeDonnees == 'point' && map.getZoom() <= ZOOM_MAXIMUM_MAILLAGE
-
 
491
		&& (points.length+statsFeatures.sites) > SEUIL_MAILLAGE);
-
 
492
	return (condition1 || condition2 || condition3);
-
 
493
}
-
 
494
 
-
 
495
 
-
 
496
 
-
 
497
// ====================================================================
-
 
498
// Gestion des mailles
-
 
499
 
-
 
500
var optionsMaille = {
-
 
501
	color: '#FFFFFF',
-
 
502
	opacity : 0.7,
-
 
503
	weight: 1,
-
 
504
	fillOpacity : 0.6
-
 
505
};
-
 
506
 
-
 
507
function determinerNombreMailles(prendToutesMailles) {
-
 
508
	var nombreMailles = 0;
-
 
509
	coucheSites.eachLayer(function(layer) {
-
 
510
		if ('typeSite' in layer && layer.typeSite == 'MAILLE') {
-
 
511
			var nombrePoints = 0;
-
 
512
			for (var source in layer.nombrePoints) {
-
 
513
				nombrePoints = layer.nombrePoints[source];
-
 
514
			}
-
 
515
			if (prendToutesMailles || nombrePoints>0) {
-
 
516
				nombreMailles ++;
-
 
517
			}
-
 
518
		}
-
 
519
	});
-
 
520
	return nombreMailles;
-
 
521
}
-
 
522
 
-
 
523
function traiterMaille(feature) {
-
 
524
	var coordonnees = [];
-
 
525
	for (var i = 0; i < feature.geometry.coordinates.length; i++) {
-
 
526
		var sommet = new L.LatLng(feature.geometry.coordinates[i][0], feature.geometry.coordinates[i][1]);
-
 
527
		coordonnees.push(sommet);
-
 
528
	}
-
 
529
	var maille = rechercherMailleExistante(coordonnees);
-
 
530
	if (maille) {
-
 
531
		mettreAJourMaille(maille, feature);
-
 
532
	} else if (feature.properties.nombrePoints > 0) {
-
 
533
		ajouterMaille(feature);
-
 
534
	}
-
 
535
}
-
 
536
 
-
 
537
function rechercherMailleExistante(coordonnees) {
-
 
538
	var mailleTrouvee = null;
-
 
539
	coucheSites.eachLayer(function(layer) {
-
 
540
		if ('typeSite' in layer && layer.typeSite == 'MAILLE') {
-
 
541
			if (sontMaillesIdentiques(coordonnees, layer._latlngs)) {
-
 
542
				mailleTrouvee = layer;
-
 
543
				return;
-
 
544
			}
-
 
545
		}
-
 
546
	});
-
 
547
	return mailleTrouvee;
-
 
548
}
-
 
549
 
-
 
550
function sontMaillesIdentiques(coordonnees1, coordonnees2) {
-
 
551
	return (
-
 
552
		coordonnees1[0].lat == coordonnees2[0].lat &&
-
 
553
		coordonnees1[0].lng == coordonnees2[0].lng &&
-
 
554
		coordonnees1[2].lat == coordonnees2[2].lat &&
324
		masquerLegende();
555
		coordonnees1[2].lng == coordonnees2[2].lng
Line 325... Line 556...
325
	}
556
	);
326
}
557
}
327
 
558
 
328
function ajouterMaille(feature) {
559
function ajouterMaille(feature) {
329
	var coordonnees = [];
560
	var coordonnees = [];
330
	for (var i = 0; i < feature.geometry.coordinates.length; i++) {
561
	for (var i = 0; i < feature.geometry.coordinates.length; i++) {
331
		var sommet = new L.LatLng(feature.geometry.coordinates[i][0], feature.geometry.coordinates[i][1]);
-
 
332
		coordonnees.push(sommet);
562
		var sommet = new L.LatLng(feature.geometry.coordinates[i][0], feature.geometry.coordinates[i][1]);
333
	}
563
		coordonnees.push(sommet);
334
	
-
 
335
	var objet = new L.Polygon(coordonnees, {
-
 
336
		color: '#FFFFFF',
564
	}
337
		opacity : 0.7,
565
	var maille = new L.Polygon(coordonnees);
338
		weight: 1,
-
 
339
		fillColor : getColor(feature.properties.nombrePoints),
566
	maille.setStyle(optionsMaille);
340
		fillOpacity : 0.6
567
	maille.typeSite = feature.properties.typeSite;
341
	});
-
 
342
	objet.typeSite = feature.properties.typeSite;
568
	maille.nombrePoints = new Object();
343
	objet.nombrePoints = feature.properties.nombrePoints;
-
 
344
	objet.on('click', clicSurMaille);
569
	var nombreAAjouter = feature.properties.nombrePoints == null ? 0 : parseInt(feature.properties.nombrePoints);
345
	coucheSites.addLayer(objet);
570
	maille.nombrePoints[feature.properties.source] = nombreAAjouter;
346
	// afficher le nombre de points inclus dans la maille
571
	coucheSites.addLayer(maille);
347
	afficherNombreStationsDansMaille(objet);
572
	colorerMaille(maille);
348
}
573
}
349
 
574
 
350
function afficherNombreStationsDansMaille(maille) {
-
 
351
	// comme la div qui contiendra la valeur du nombre de stations va se placer dans la page
575
function mettreAJourMaille(maille, feature) {
352
	// au centre de la maille (et qui va servir de point d'ancrage pour le bord gauche par defaut)
-
 
353
	// il est necessaire de creer un decalage vers la gauche en fonction du nombre de chiffres
-
 
354
	var decalage = calculerDecalagePositionnementNombre(maille.nombrePoints);
-
 
355
	var sudMaille    = maille._originalPoints[0].y,
-
 
356
		ouestMaille  = maille._originalPoints[0].x,
-
 
357
		nordMaille   = maille._originalPoints[2].y,
-
 
358
		estMaille    = maille._originalPoints[2].x,
-
 
359
		centreMaille = new L.Point((ouestMaille+estMaille)/2 - decalage, (sudMaille+nordMaille)/2);	
-
 
360
	var divIcon = new L.divIcon({
576
	var nombreAAjouter = feature.properties.nombrePoints == null ? 0 : parseInt(feature.properties.nombrePoints);
361
		className : "nombre-sites",
577
	/*if (typeof(maille.nombrePoints[feature.properties.source]) == 'undefined') {
362
		html : maille.nombrePoints
-
 
363
	});
-
 
364
	var marqueurDiv = new L.Marker(map.layerPointToLatLng(centreMaille), {
578
		maille.nombrePoints[feature.properties.source] = nombreAAjouter;
365
		icon : divIcon,
579
	} else {
366
		maille : maille.getBounds()
580
		maille.nombrePoints[feature.properties.source] += nombreAAjouter;
367
	});
581
	}*/
368
	marqueurDiv.on('click', clicSurMaille);
582
	maille.nombrePoints[feature.properties.source] = nombreAAjouter;
369
	coucheSites.addLayer(marqueurDiv);
583
	colorerMaille(maille);
370
}
-
 
371
 
584
}
372
function calculerDecalagePositionnementNombre(nombrePoints) {
-
 
373
	var recul = 0;
585
 
374
	if (nombrePoints >= 10000) {
-
 
375
		recul = 14;
586
function regenererInfobulleMailles() {
376
	} else if (nombrePoints >= 1000) {
587
	$('.leaflet-clickable').addClass('tooltip');
377
		recul = 9;
588
	coucheSites.eachLayer(function(layer) {
378
	} else if (nombrePoints >= 100) {
589
		if (layer.typeSite == 'MAILLE') {
379
		recul = 5;
590
			genererInfobulle(layer);
380
	}
591
		}
381
	return recul;
592
	});
-
 
593
}
-
 
594
 
-
 
595
function colorerMaille(maille) {
-
 
596
	var nombrePoints = 0;
382
}
597
	for (sourceMaille in maille.nombrePoints) {
383
 
598
		nombrePoints += maille.nombrePoints[sourceMaille];
-
 
599
	}
384
function clicSurMaille(event) {
600
	if (nombrePoints > 0) {
385
	if (event.target._zIndex != null) {
601
		maille.on('click', surClicMaille);
-
 
602
		maille.setStyle({fillColor : genererCouleur(nombrePoints), fillOpacity: 0.45, opacity: 0.7});
386
		map.fitBounds(event.target.options.maille)
603
	} else {
387
	} else {
604
		maille.setStyle({fillOpacity: 0, opacity: 0});
Line -... Line 605...
-
 
605
		maille.off('click', surClicMaille);
388
		map.fitBounds(event.target.getBounds());
606
	}
-
 
607
}
-
 
608
 
389
	}
609
function surClicMaille(event) {
390
}
610
	map.fitBounds(event.layer.getBounds());
391
 
611
}
392
// generer la couleur a afficher pour les mailles
612
 
393
function getColor(nombrePoints) {
613
function genererCouleur(nombrePoints) {
394
	var couleur = {'bleu': 231, 'vert': 224, 'rouge': 64},
614
	var couleur = {'bleu': 231, 'vert': 224, 'rouge': 64},
395
		seuils = [1, 10, 50 ,100, 500, 1000, 2500],
615
		seuils = [1, 10, 50 ,100, 500, 1000, 2500],
396
		pas = 26,
616
		pas = 26,
397
		position = 0;
617
		position = 0;
398
	for (var index = 1; index < seuils.length-1 && nombrePoints >= seuils[index]; index ++) {
618
	for (var index = 1; index < seuils.length-1 && nombrePoints >= seuils[index]; index ++) {
399
		position ++;
-
 
400
	}
-
 
401
	couleur.vert -= position*pas;
-
 
402
	return 'rgb('+couleur.bleu+','+couleur.vert+','+couleur.rouge+')';
-
 
403
	
-
 
404
	/*var codeHexa = 'rgb(231,224,64)';
-
 
405
	if (nombrePoints >= 2500) {
-
 
406
		codeHexa =  'rgb(231,68,64)';
-
 
407
	} else if (nombrePoints >= 1000) {
-
 
408
		codeHexa =  'rgb(231,94,64)';
-
 
409
	} else if (nombrePoints >= 500) {
-
 
410
		codeHexa =  'rgb(231,120,64)';
-
 
411
	} else if (nombrePoints >= 100) {
-
 
412
		codeHexa =  'rgb(231,146,64)';
-
 
413
	} else if (nombrePoints >= 50) {
-
 
414
		codeHexa =  'rgb(231,172,64)';
-
 
415
	} else if (nombrePoints >= 10) {
-
 
416
		codeHexa =  'rgb(231,198,64)';
-
 
417
	}
-
 
418
	return codeHexa;*/
-
 
419
}
-
 
420
 
-
 
421
 
-
 
422
function ajouterPoint(feature) {
-
 
423
	var iconePoint = new L.Icon({ iconUrl : pointImageUrl,   iconSize : [16, 16] }),
-
 
424
		iconeCommune   = new L.Icon({ iconUrl : communeImageUrl, iconSize : [24, 32] }),
-
 
425
		icone = (feature.properties.typeSite == 'STATION') ? iconePoint : iconeCommune,
-
 
426
		point = new L.LatLng(feature.geometry.coordinates[0], feature.geometry.coordinates[1]),
-
 
427
		marker = new L.Marker(point, {
-
 
428
			icon : icone,
-
 
429
			type : feature.properties.typeSite,
-
 
430
			title : feature.properties.nom
619
		position ++;
Line 431... Line -...
431
		}).addTo(map);
-
 
432
	marker.on('click', surClicMarqueur);
620
	}
-
 
621
	couleur.vert -= position*pas;
433
	coucheSites.addLayer(marker);
622
	return 'rgb('+couleur.bleu+','+couleur.vert+','+couleur.rouge+')';
434
}
623
}
435
 
624
 
436
 
625
function afficherLegende() {
437
function afficherLegende() {
626
	if (legende == null) {
-
 
627
		legende = new L.Control({position : 'bottomright'});
438
	legende = new L.Control({position : 'bottomright'});
628
		legende.onAdd = function(map) {
Line 439... Line 629...
439
	legende.onAdd = function(map) {
629
			return construireContenuHtmlLegende();
440
		return construireContenuHtmlLegende();
630
		};
441
	};
631
		map.addControl(legende);
442
	map.addControl(legende);
632
	}
443
}
633
}
444
 
634
 
445
function construireContenuHtmlLegende() {
635
function construireContenuHtmlLegende() {
446
	var div = L.DomUtil.create('div', 'info');
636
	var div = L.DomUtil.create('div', 'info');
447
	div.innerHTML = '<h4>' + titreLegende + '</h4>';
637
	div.innerHTML = '<h4>' + titreLegende + '</h4>';
448
	var seuils = [1, 10, 50 ,100, 500, 1000, 2500];
638
	var seuils = [1, 10, 50 ,100, 500, 1000, 2500];
449
	var labels = [];
639
	var labels = [];
450
	for (var i = 0; i < seuils.length; i ++) {
640
	for (var i = 0; i < seuils.length; i ++) {
451
		div.innerHTML += 
641
		div.innerHTML += 
452
			'<div class="legend">'+
642
			'<div class="legend">'+
Line 453... Line 643...
453
				'<span style="background:' + getColor(seuils[i] + 1) + '"></span>'+
643
				'<span style="background:' + genererCouleur(seuils[i] + 1) + '"></span>'+
-
 
644
				seuils[i]+ (i + 1 < seuils.length ? '&ndash;' + seuils[i + 1] : '+')+
454
				seuils[i]+ (i + 1 < seuils.length ? '&ndash;' + seuils[i + 1] : '+')+
645
			'</div>';
455
			'</div>';
646
	}
-
 
647
	return div;
-
 
648
}
-
 
649
 
-
 
650
function masquerLegende() {
-
 
651
	if (legende != null) {
-
 
652
		map.removeControl(legende);
-
 
653
		legende = null;
-
 
654
	}
-
 
655
}
-
 
656
 
-
 
657
function supprimerSourceDansMaille(maille, sourceSuppression) {
-
 
658
	if (typeof(maille.nombrePoints[sourceSuppression]) != 'undefined') {
-
 
659
		maille.nombrePoints[sourceSuppression] = 0;
-
 
660
		colorerMaille(maille);
-
 
661
		genererInfobulle(maille);
-
 
662
	}
-
 
663
}
-
 
664
 
-
 
665
function genererInfobulle(maille) {
-
 
666
	var nombrePoints = 0,
-
 
667
		nombreSources = 0;
-
 
668
		contenuTexte = '';
-
 
669
	for (sourceMaille in maille.nombrePoints) {
-
 
670
		nombrePoints = maille.nombrePoints[sourceMaille];
-
 
671
		if (nombrePoints > 0) {
-
 
672
			contenuTexte += (contenuTexte.length==0 ?'' : '\n')+
-
 
673
				sourceMaille+' : '+maille.nombrePoints[sourceMaille];
-
 
674
		}
-
 
675
		nombreSources ++;
-
 
676
	}
-
 
677
	if (nombreSources > 0) {
-
 
678
		$(maille._path).addClass('tooltip');
-
 
679
		$(maille._path).attr('title',contenuTexte);
-
 
680
	}
-
 
681
}
-
 
682
 
-
 
683
 
-
 
684
 
-
 
685
 
-
 
686
// ====================================================================
-
 
687
// Gestion des marqueurs
-
 
688
 
-
 
689
function ajouterPoint(feature) {
-
 
690
	var iconePoint = new L.Icon({ iconUrl : pointImageUrl,   iconSize : [16, 16] }),
-
 
691
		iconeCommune   = new L.Icon({ iconUrl : communeImageUrl, iconSize : [24, 32] }),
-
 
692
		icone = (feature.properties.typeSite == 'STATION') ? iconePoint : iconeCommune,
-
 
693
		point = new L.LatLng(feature.geometry.coordinates[0], feature.geometry.coordinates[1]),
-
 
694
		marker = new L.Marker(point, {
-
 
695
			icon  : icone,
-
 
696
			title : feature.properties.nom
-
 
697
		})
-
 
698
	marker.typeSite = feature.properties.typeSite;
-
 
699
	marker.source = feature.properties.source;
-
 
700
	marker.on('click', surClicMarqueur);
-
 
701
	points.push(marker);
-
 
702
	if (formeDonnees != 'maille') {
-
 
703
		coucheSites.addLayer(marker);
-
 
704
	} else {
-
 
705
		ajouterPointDansMaille(marker);
-
 
706
	}
-
 
707
}
-
 
708
 
-
 
709
function ajouterPointDansMaille(point) {
-
 
710
	var maille = null;
-
 
711
	coucheSites.eachLayer(function(layer) {
-
 
712
		if (layer.typeSite == 'MAILLE' && layer.getBounds().contains(point.getLatLng())) {
-
 
713
			maille = layer;
-
 
714
			return;
-
 
715
		}
-
 
716
	});
-
 
717
	if (typeof(maille.nombrePoints[point.source]) == 'undefined') {
-
 
718
		maille.nombrePoints[point.source] = 1;
-
 
719
	} else {
-
 
720
		maille.nombrePoints[point.source] += 1;
-
 
721
	}
-
 
722
	colorerMaille(maille);
-
 
723
}
-
 
724
 
-
 
725
function combinerMaillesEtPoints() {
-
 
726
	enleverMarqueursCarte();
-
 
727
	coucheSites.eachLayer(function(layer) {
-
 
728
		if (layer.typeSite == 'MAILLE') {
-
 
729
			var nombrePoints = compterNombrePointsDansMaille(layer);
-
 
730
			ajouterNombrePointsDansMaille(layer, nombrePoints);
-
 
731
		}
-
 
732
	});
-
 
733
}
-
 
734
 
-
 
735
function determinerNombreMarqueurs(source) {
-
 
736
	var nombrePoints = 0;
-
 
737
	for (var index = 0; index < points.length; index ++) {
-
 
738
		if (points[index].source == source) {
-
 
739
			nombrePoints += 1;
-
 
740
		}
-
 
741
	}
-
 
742
	return nombrePoints;
-
 
743
}
-
 
744
 
-
 
745
function enleverMarqueursCarte() {
-
 
746
	coucheSites.eachLayer(function(layer) {
-
 
747
		if (layer.typeSite != 'MAILLE') {
-
 
748
			coucheSites.removeLayer(layer);
-
 
749
		}
-
 
750
	});
-
 
751
}
-
 
752
 
-
 
753
function compterNombrePointsDansMaille(maille) {
-
 
754
	var nombrePoints = {};
-
 
755
	for (var index = 0; index < points.length; index ++) {
-
 
756
		if (maille.getBounds().contains(points[index].getLatLng())) {
-
 
757
			var source = points[index].source;
-
 
758
			if (typeof(nombrePoints[source]) == 'undefined') {
-
 
759
				nombrePoints[source] = 1;
-
 
760
			} else {
-
 
761
				nombrePoints[source] += 1;
-
 
762
			}
-
 
763
		}
-
 
764
	}
-
 
765
	return nombrePoints;
-
 
766
}
-
 
767
 
-
 
768
function ajouterNombrePointsDansMaille(maille, nombrePoints) {
-
 
769
	for (sourceDonnees in nombrePoints) {
456
	}
770
		if (typeof(maille.nombrePoints[sourceDonnees]) == 'undefined') {
Line -... Line 771...
-
 
771
			maille.nombrePoints[sourceDonnees] = nombrePoints[sourceDonnees];
-
 
772
		} else {
-
 
773
			maille.nombrePoints[sourceDonnees] += nombrePoints[sourceDonnees];
-
 
774
		}
-
 
775
	}
-
 
776
	colorerMaille(maille);
-
 
777
}
-
 
778
 
-
 
779
function supprimerPointsListe(sourceDonnees) {
-
 
780
	var index = 0;
Line -... Line 781...
-
 
781
	while (index < points.length) {
-
 
782
		if (points[index].source == sourceDonnees) {
-
 
783
			points.splice(index, 1);
-
 
784
		} else {
-
 
785
			index ++;
-
 
786
		}
-
 
787
	}
-
 
788
}
-
 
789
 
-
 
790
function transformerMaillesEnPoints(sourceDonnees) {
Line 457... Line 791...
457
	return div;
791
	coucheSites.eachLayer(function(layer) {
458
}
792
		if (layer.typeSite == 'MAILLE' && typeof(layer.nombrePoints[sourceDonnees]) != 'undefined') {
459
 
793
			supprimerSourceDansMaille(layer, sourceDonnees);
460
function masquerLegende() {
794
		}
461
	map.removeControl(legende);
795
	});
462
	legende = null;
796
	for (var index = 0; index < points.length; index ++) {
463
}
797
		coucheSites.addLayer(points[index]);
464
 
798
	}
465
 
799
}
466
 
800
 
-
 
801
function surClicMarqueur(event) {
-
 
802
	var latitude = event.target.getLatLng().lat;
-
 
803
	var longitude = event.target.getLatLng().lng;
-
 
804
	pointClique = event.target;
467
function surClicMarqueur(event) {
805
	afficherMessageChargement('observations');
468
	var latitude = event.target.getLatLng().lat;
806
	var parametres = {
-
 
807
		"source" : pointClique.source,
469
	var longitude = event.target.getLatLng().lng;
808
		"num_taxon" : numTaxon,
470
	pointClique = event.target;
809
		"referentiel" : referentiel,
471
	afficherMessageChargement('observations');
810
		"auteur" : auteur,
472
	var parametres = {
811
		"nn" : nn,
473
		"source" : source,
812
		"type_site" : pointClique.typeSite,
Line 474... Line 813...
474
		"num_taxon" : num_taxon,
813
		"date_debut" : dateDebut,
475
		"referentiel" : referentiel,
814
		"date_fin" : dateFin,
476
		"auteur" : auteur,
815
		"longitude" : longitude,
477
		"longitude" : longitude,
816
		"latitude" : latitude,
478
		"latitude" : latitude
817
		"nb_jours" : nbJours
479
	};
818
	};
480
	url = urlBase + "observations?" + convertirEnParametresUrl(parametres);
-
 
481
	fonctionCallback = traiterDonneesObservations;
819
	url = urlBase + "observations?" + convertirEnParametresUrl(parametres);
-
 
820
	fonctionCallback = traiterDonneesObservations;
482
	executerAJAX();
821
	executerAJAX();
483
}
822
}
484
 
823
 
485
function traiterDonneesObservations() {
824
function traiterDonneesObservations() {
486
	masquerMessageChargement();
825
	masquerMessageChargement();
487
	var texte = requeteChargementPoints.responseText;
826
	var texte = requeteChargementPoints.responseText;
488
	if (!retourRequeteOK()) {
827
	if (!estStatutRequeteOK()) {
-
 
828
		alert(texte);
489
		alert(texte);
829
	} else {
490
	} else {
830
		obsJSON = eval("(function(){return " + texte + ";})()");
491
		
831
		if (obsJSON != null) {
Line 492... Line 832...
492
		obsJSON = eval("(function(){return " + texte + ";})()");
832
			viderListeObservations();
493
		viderListeObservations();
833
			if (obsJSON.total > 0) {
494
		if (obsJSON.total > 0) {
834
				doitRafraichirCarte = false;
Line -... Line 835...
-
 
835
				map.setView(new L.LatLng(pointClique.getLatLng().lat, pointClique.getLatLng().lng), map.getZoom());
-
 
836
				afficherInfoBulle();
495
			doitRafraichirCarte = false;
837
			} else if (infoBulle != null)  {
496
			map.setView(new L.LatLng(pointClique.getLatLng().lat, pointClique.getLatLng().lng), map.getZoom());
838
				masquerInfoBulle();
Line 497... Line 839...
497
			afficherInfoBulle();
839
			}
498
		} else if (infoBulle != null)  {
840
		}
499
			masquerInfoBulle();
841
	}
500
		}
842
}
Line 548... Line 890...
548
	afficherOnglets();
890
	afficherOnglets();
549
	afficherTexteStationId();
891
	afficherTexteStationId();
550
}
892
}
Line 551... Line 893...
551
 
893
 
552
function masquerInfoBulle() {
894
function masquerInfoBulle() {
553
	if (map.hasLayer(infoBulle) && infoBulle != null) {
895
	if (infoBulle != null && map.hasLayer(infoBulle)) {
554
		map.removeLayer(infoBulle);
896
		map.removeLayer(infoBulle);
555
	}
897
	}
556
	infoBulle = null;
898
	infoBulle = null;
Line 579... Line 921...
579
		// premiere execution de la fonction : faire une copie des objets JSON decrivant les observations 
921
		// premiere execution de la fonction : faire une copie des objets JSON decrivant les observations 
580
		for (var index = 0; index < obsJSON.observations.length; index ++) {
922
		for (var index = 0; index < obsJSON.observations.length; index ++) {
581
			obsStation.push(obsJSON.observations[index]);
923
			obsStation.push(obsJSON.observations[index]);
582
		}
924
		}
583
	}
925
	}
584
	// ajouter les observations dans le code HTML
-
 
585
	var obsPage = [];
926
	var obsPage = [];
586
	for (var index = 0; index < obsStation.length; index ++) {
927
	for (var index = 0; index < obsStation.length; index ++) {
587
		obsPage.push(obsStation[index]);
928
		obsPage.push(obsStation[index]);
588
	}
929
	}
589
	$("#tpl-obs-"+typeAffichage).tmpl(obsPage).appendTo("#obs-"+typeAffichage+"-lignes");
930
	$("#tpl-obs-"+typeAffichage).tmpl(obsPage).appendTo("#obs-"+typeAffichage+"-lignes");
Line 617... Line 958...
617
	selectionnerOnglet();
958
	selectionnerOnglet();
618
	ajouterObservationsDansHTML();
959
	ajouterObservationsDansHTML();
619
}
960
}
Line 620... Line 961...
620
 
961
 
621
function ajouterTableauTriable(element) {
-
 
622
	// add parser through the tablesorter addParser method 
962
function ajouterTableauTriable(element) {
623
	$.tablesorter.addParser({ 
-
 
624
		// Définition d'un id unique pour ce parsseur 
963
	$.tablesorter.addParser({ 
625
		id: 'date_cel', 
964
		id: 'date_cel', 
626
		is: function(s) { 
965
		is: function(s) { 
627
			// doit retourner false si le parsseur n'est pas autodétecté
966
			// doit retourner false si le parseur n'est pas autodétecté
628
			return /^\s*\d{2}[\/-]\d{2}[\/-]\d{4}\s*$/.test(s);
967
			return /^\s*\d{2}[\/-]\d{2}[\/-]\d{4}\s*$/.test(s);
629
		}, 
968
		}, 
630
		format: function(date) { 
969
		format: function(date) { 
631
			// Transformation date jj/mm/aaaa en aaaa/mm/jj
970
			// Transformation date jj/mm/aaaa en aaaa/mm/jj
632
			date = date.replace(/^\s*(\d{2})[\/-](\d{2})[\/-](\d{4})\s*$/, "$3/$2/$1");
971
			date = date.replace(/^\s*(\d{2})[\/-](\d{2})[\/-](\d{4})\s*$/, "$3/$2/$1");
633
			// Remplace la date par un nombre de millisecondes pour trier numériquement
972
			// Remplace la date par un nombre de millisecondes pour trier numériquement
634
			return $.tablesorter.formatFloat(new Date(date).getTime());
973
			return $.tablesorter.formatFloat(new Date(date).getTime());
635
		}, 
-
 
636
		// set type, either numeric or text 
974
		}, 
637
		type: 'numeric' 
975
		type: 'numeric' 
638
	});
976
	});
639
	$(element).tablesorter({ 
977
	$(element).tablesorter({ 
640
        headers: { 
978
        headers: { 
641
			1: { 
979
			1: { 
642
            	sorter:'date_cel' 
980
            	sorter:'date_cel' 
643
        	} 
981
        	} 
644
    	} 
982
    	}
645
	});
983
	});
Line 646... Line 984...
646
}
984
}
647
 
985
 
648
function mettreAJourTableauTriable(element) {
986
function mettreAJourTableauTriable(element) {
Line 649... Line 987...
649
	$(element).trigger('update');
987
	$(element).trigger('update');
650
}
988
}
651
 
989
 
652
function afficherTexteStationId() {
990
function afficherTexteStationId() {
653
	var latitude = pointClique.getLatLng().lat;
991
	var latitude = pointClique.getLatLng().lat;
654
	var longitude = pointClique.getLatLng().lng;
992
	var longitude = pointClique.getLatLng().lng;