Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 327 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
240 aurelien 1
var map = null;
277 aurelien 2
var ctaLayer = null;
240 aurelien 3
var tableau_marqueurs = new Array();
4
var infowindow = new google.maps.InfoWindow();
5
var infos_observations = new Array();
327 aurelien 6
var nb_observations_par_espece = {};
7
var nb_observations_par_annee = {};
240 aurelien 8
 
9
var type_espece = '0';
10
var espece = '0';
11
var evenement = '0';
12
var annee = '0';
13
var mois = '0';
14
var jour = '0';
15
var departement = '0';
264 gduche 16
var region = '0';
277 aurelien 17
var valeur_slider_defaut = '0';
240 aurelien 18
 
277 aurelien 19
/**
327 aurelien 20
 *
277 aurelien 21
 */
22
Date.prototype.getDOY = function() {
23
	var onejan = new Date(this.getFullYear(),0,1);
24
	return Math.ceil((this - onejan) / 86400000);
327 aurelien 25
}
277 aurelien 26
 
327 aurelien 27
var tableau_couleurs = new Array(
299 aurelien 28
		"#ff0000", "#733d00", "#f2ffbf", "#00ccff", "#2e1a33", "#00ff66", "#ffe1bf", "#ff8800",
29
		"#005266", "#be00cc", "#592d2d", "#ffcc00", "#336641", "#264599", "#80206c", "#bf7960",
30
		"#665c33", "#bf0000", "#80a2ff", "#ff80c4", "#806c60", "#ccff00", "#00ffcc", "#090040",
31
		"#bf004d", "#2a3326", "#668000", "#608079", "#3600cc", "#8c696e"
32
);
240 aurelien 33
 
34
liste_mois = new Array("jan","fev","mar","avr","mai","jun","jui","aou","sep","oct","nov","dec");
35
 
36
evenements_debut_annee = new Array("")
37
 
38
var tableau_couleurs_en_cours = new Array();
39
 
40
var timerSlider = null;
41
 
42
function getUrlBaseJrest() {
43
	return urlBaseJrest;
44
}
45
 
46
function traiterParametresUrl() {
47
 
48
	var vars = [], hash;
49
	var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
50
	for(var i = 0; i < hashes.length; i++)
51
	{
52
	    hash = hashes[i].split('=');
53
	    vars.push(hash[0]);
54
	    vars[hash[0]] = hash[1];
55
	}
327 aurelien 56
 
240 aurelien 57
	if(vars['type_espece'] != null) {
58
		type_espece = vars['type_espece'];
59
		$('#selecteur_liste_types_especes').val(type_espece);
60
	}
327 aurelien 61
 
240 aurelien 62
	if(vars['espece'] != null) {
63
		if(type_espece != '0') {
64
			modifierTableauEspeces();
65
		}
66
		espece = vars['espece'];
67
		$('#selecteur_especes').val(espece);
327 aurelien 68
 
240 aurelien 69
	}
327 aurelien 70
 
240 aurelien 71
	if(vars['evenement'] != null) {
72
		if(espece != 0) {
73
			modifierTableauEvenement()
74
		}
75
		evenement = vars['evenement'];
76
		$('#selecteur_evenements').val(evenement);
77
	}
327 aurelien 78
 
240 aurelien 79
	if(vars['annee'] != null) {
80
		annee = vars['annee'];
81
		$('#selecteur_liste_annees').val(annee);
82
	} else {
83
		date = new Date()
84
		annee = date.getFullYear();
85
		$('#selecteur_liste_annees').val(annee);
86
	}
327 aurelien 87
 
240 aurelien 88
	if(vars['mois'] != null) {
89
		mois = vars['mois'];
90
	} else {
277 aurelien 91
		date = new Date();
92
		if(annee == date.getFullYear()) {
93
			mois = date.getMonth();
94
			valeur_slider_defaut = date.getDOY();
95
		} else {
96
			mois = 11;
97
			date.setYear(annee);
98
			date.setMonth(mois);
99
			date.setDate(31);
100
			valeur_slider_defaut = date.getDOY();
101
		}
240 aurelien 102
	}
327 aurelien 103
 
240 aurelien 104
	if(vars['departement'] != null) {
105
		departement = vars['departement'];
277 aurelien 106
		$('#selecteur_liste_departement').val(annee);
267 gduche 107
	} else {
108
		if(vars['region'] != null) {
109
			region = vars['region'];
277 aurelien 110
			$('#selecteur_liste_region').val(annee);
267 gduche 111
		}
240 aurelien 112
	}
327 aurelien 113
 
240 aurelien 114
	if(vars['cacher_criteres'] != null && vars['cacher_criteres'] == '1') {
277 aurelien 115
		$(".cacher_widget").hide();
240 aurelien 116
	}
117
}
118
 
119
function obtenirCodeWidget() {
327 aurelien 120
 
269 aurelien 121
	var UrlBase = url_widget;
240 aurelien 122
	UrlBase += '?';
123
	if(type_espece != '0') UrlBase += "type_espece="+type_espece;
277 aurelien 124
	//TODO: décider si l'on peut garder l'espece et si le cas échéant on la cache
240 aurelien 125
	if(espece != '0') UrlBase += "&espece="+espece;
126
	if(evenement != '0') UrlBase += "&evenement="+evenement;
127
	if(annee != '0') UrlBase += "&annee="+annee;
277 aurelien 128
	if(departement != '0') UrlBase += "&departement="+departement;
129
	if(region != '0') UrlBase += "&region="+region;
240 aurelien 130
	if(mois != '0') UrlBase += "&mois="+mois;
131
	UrlBase += "&cacher_criteres=1";
327 aurelien 132
 
269 aurelien 133
	UrlBase = UrlBase.replace('?&','?');
327 aurelien 134
 
277 aurelien 135
	code_widget = '<iframe src="'+UrlBase+'" width="735px" height="650px"><p>Votre navigateur ne supporte pas les iframes.</p></iframe>'
327 aurelien 136
 
240 aurelien 137
	return code_widget;
138
}
139
 
327 aurelien 140
String.prototype.hashCode = function() {
141
  var hash = 0, i, chr;
142
  if (this.length === 0) return hash;
143
  for (i = 0; i < this.length; i++) {
144
    chr   = this.charCodeAt(i);
145
    hash  = ((hash << 5) - hash) + chr;
146
    hash |= 0; // Convert to 32bit integer
147
  }
148
  return hash;
149
};
150
 
151
function renverserTableauEtHashcoderIndex(trans) {
152
    var key, tmp_ar = {};
153
 
154
    for (key in trans)
155
    {
156
        if (trans.hasOwnProperty(key))
157
        {
158
            tmp_ar[trans[key].hashCode()] = key;
159
        }
160
    }
161
 
162
    return tmp_ar;
163
}
164
 
165
function trierTableau(tableau) {
166
	if(!tableau) {
167
		return;
168
	}
169
 
170
	var tableau_trie = tableau.slice(0);
171
	tableau_trie.sort(function(a,b){
172
    return a.localeCompare(b);
173
	});
174
 
175
	return tableau_trie;
176
}
177
 
240 aurelien 178
$('#lien_cette_recherche').ready(function() {
179
	$('#lien_cette_recherche').click(function() {
180
		window.alert(obtenirCodeWidget());
181
		return false;
182
	});
183
});
184
 
327 aurelien 185
function selectionnerParametresDynamiquesParDefaut() {
186
	if($('.conteneur_selecteur_liste_annees').is(':visible')) {
187
		var annee_courante = (new Date()).getFullYear();
188
		$('#annee_numero_'+annee_courante).attr( "checked", true );
189
	}
190
	premier_chargement = false;
191
}
192
 
193
var premier_chargement = true;
240 aurelien 194
$(document).ready(function() {
195
	traiterParametresUrl();
196
});
197
 
327 aurelien 198
/**
240 aurelien 199
************************************************************************************************
200
************************************************************************************************
201
 
202
    Fonctions concernant les gestion des filtres sur la carte
203
 
204
************************************************************************************************
205
************************************************************************************************
327 aurelien 206
**/
240 aurelien 207
 
327 aurelien 208
function setDateSlider() {
240 aurelien 209
	numeroJour = $("#slider_date").slider("value");
210
	dateObs = new Date(annee,0,0);
211
	dateObs.setDate(dateObs.getDate()+numeroJour);
327 aurelien 212
 
240 aurelien 213
	mois = dateObs.getMonth();
214
	jour = dateObs.getDay();
327 aurelien 215
	afficherObservations();
240 aurelien 216
}
217
 
218
function initialiserSliderDates() {
327 aurelien 219
 
240 aurelien 220
	date_min = 1;
221
	date_max = 365;
327 aurelien 222
 
240 aurelien 223
	$("#slider_date").slider({
224
								min: date_min,
225
								max: date_max,
277 aurelien 226
								value: valeur_slider_defaut
240 aurelien 227
							});
327 aurelien 228
 
240 aurelien 229
	taille_criteres = Math.round($("#slider_date").width()/(liste_mois.length));
327 aurelien 230
 
240 aurelien 231
	valeurs_slider = '<table id="table_dates"><tbody><tr>';
327 aurelien 232
 
240 aurelien 233
	for (i in liste_mois) {
234
		valeurs_slider += '<td class="conteneur_date">'+liste_mois[i]+'</td>';
235
	}
327 aurelien 236
 
240 aurelien 237
	valeurs_slider += '</tr></tbody></table>';
327 aurelien 238
 
240 aurelien 239
	$("conteneur_date").css(".conteneur_date{ width:"+taille_criteres+"px;}");
327 aurelien 240
 
240 aurelien 241
	$("#valeurs_date").html(valeurs_slider);
327 aurelien 242
 
240 aurelien 243
	$("#slider_date").bind("slidestop", function(event, ui) {
244
		setDateSlider();
245
		return true;
246
	});
327 aurelien 247
 
240 aurelien 248
	$(window).bind("resize", resizeWindow);
249
	function resizeWindow( e ) {
250
		taille_criteres = Math.round($("#slider_date").width()/(liste_mois.length));
251
		$("#css_slider").html(".conteneur_date{ width:"+taille_criteres+"px;}");
252
	}
253
}
254
 
264 gduche 255
function initialiserListeRegion() {
327 aurelien 256
 
264 gduche 257
	$('#selecteur_liste_region').change(function() {
258
		region = $('select#selecteur_liste_region option:selected').val();
327 aurelien 259
		obtenirObservations();
264 gduche 260
	});
261
}
262
 
263
function initialiserListeDepartement() {
327 aurelien 264
 
264 gduche 265
	$('#selecteur_liste_departement').change(function() {
266
		departement = $('select#selecteur_liste_departement option:selected').val();
327 aurelien 267
		obtenirObservations();
264 gduche 268
	});
269
}
270
 
271
 
240 aurelien 272
function initialiserListeTypesEspeces() {
327 aurelien 273
 
240 aurelien 274
	$('#selecteur_liste_types_especes').change(function() {
275
		type_espece = $('select#selecteur_liste_types_especes option:selected').val();
276
		modifierTableauEspeces();
327 aurelien 277
		obtenirObservations();
240 aurelien 278
	});
279
}
280
 
281
function incrementerValeurSlider() {
282
	var valeur_en_cours = $('#slider_date').slider("value");
283
	if($('#slider_date').slider("value") < $('#slider_date').slider("option", "max")) {
284
		valeur_en_cours++;
285
		$('#slider_date').slider("value",valeur_en_cours);
286
		setDateSlider();
287
	} else {
288
		clearInterval(timerSlider);
289
		$('#demarrer_slider').removeAttr('disabled');
290
	}
291
}
292
 
293
function initialiserBoutonsSlider() {
327 aurelien 294
 
240 aurelien 295
	$('#demarrer_slider').click(function() {
327 aurelien 296
 
240 aurelien 297
		if($('#slider_date').slider("value") == $('#slider_date').slider("option","max")) {
298
			min_slider = $('#slider_date').slider("option","min");
299
			$('#slider_date').slider("value",min_slider);
300
		}
327 aurelien 301
 
240 aurelien 302
		timerSlider = setInterval("incrementerValeurSlider()",150);
303
		$('#demarrer_slider').attr('disabled', 'disabled');
304
	});
327 aurelien 305
 
240 aurelien 306
	$('#arreter_slider').click(function() {
307
		if(timerSlider != null) {
308
			clearInterval(timerSlider);
309
			$('#demarrer_slider').removeAttr('disabled');
310
		}
311
	});
327 aurelien 312
 
240 aurelien 313
}
314
 
315
function initialiserValeursParDefaut() {
327 aurelien 316
	type_espece = 0;
317
	$('select#selecteur_liste_types_especes').val("0");
240 aurelien 318
	modifierTableauEspeces();
319
	obtenirObservations();
320
}
321
 
322
$('#slider_date').ready(function() {
323
	initialiserSliderDates();
324
	initialiserBoutonsSlider();
325
	initialiserListeTypesEspeces();
326
	initialiserListeEspeces();
327
	initialiserListeEvenements();
328
	initialiserListeAnnees();
329
	initialiserValeursParDefaut();
264 gduche 330
	initialiserListeRegion();
331
	initialiserListeDepartement()
240 aurelien 332
});
333
 
334
 
327 aurelien 335
/**
240 aurelien 336
	************************************************************************************************
337
	************************************************************************************************
327 aurelien 338
 
240 aurelien 339
	    Fonctions concernant la carte permettant de pointer d'afficher l'emplacement des observation
327 aurelien 340
 
240 aurelien 341
	************************************************************************************************
342
	************************************************************************************************
327 aurelien 343
**/
240 aurelien 344
function initialiserCarte() {
345
 
346
	if($('#map_canvas').length == 0) {
347
		return;
348
	}
327 aurelien 349
 
240 aurelien 350
	var latlng = new google.maps.LatLng(47.0504, 2.2347);
351
	var myOptions = {
352
		zoom: 5,
277 aurelien 353
		center:latlng,
327 aurelien 354
		mapTypeId: google.maps.MapTypeId.ROADMAP,
277 aurelien 355
		mapTypeControlOptions: {
327 aurelien 356
			mapTypeIds: ['OSM',
357
			             google.maps.MapTypeId.ROADMAP,
358
			             google.maps.MapTypeId.HYBRID,
359
			             google.maps.MapTypeId.SATELLITE,
277 aurelien 360
			             google.maps.MapTypeId.TERRAIN]
361
		}
240 aurelien 362
	};
327 aurelien 363
 
277 aurelien 364
	var osmMapType = new google.maps.ImageMapType({
365
		getTileUrl: function(coord, zoom) {
366
			return "http://tile.openstreetmap.org/" +
367
			zoom + "/" + coord.x + "/" + coord.y + ".png";
368
		},
369
		tileSize: new google.maps.Size(256, 256),
370
		isPng: true,
371
		alt: "OpenStreetMap",
372
		name: "OSM",
373
		maxZoom: 19
374
	});
240 aurelien 375
 
376
	map = new google.maps.Map(document.getElementById("map_canvas"),
377
    	myOptions);
277 aurelien 378
	// Ajout de la couche OSM à la carte
379
	map.mapTypes.set('OSM', osmMapType);
327 aurelien 380
 
240 aurelien 381
	marker = new google.maps.Marker({
382
	      position: latlng,
383
	      title:""
384
	});
327 aurelien 385
 
277 aurelien 386
	chargerLimitesCommunales();
327 aurelien 387
 
240 aurelien 388
	$('.lien_vers_profil').live('click', function(event) {
389
		event.preventDefault();
390
		window.open($(this).attr('href'));
391
		return false;
392
	});
393
}
394
 
277 aurelien 395
function chargerLimitesCommunales() {
396
	if (urlsLimitesCommunales != null) {
327 aurelien 397
		for (urlId in urlsLimitesCommunales) {
277 aurelien 398
			var url = urlsLimitesCommunales[urlId];
399
			ctaLayer = new google.maps.KmlLayer(url, {preserveViewport: false});
400
			ctaLayer.setMap(map);
401
		}
402
	}
403
}
404
 
327 aurelien 405
var obs_xhr = null;
240 aurelien 406
function obtenirObservations() {
327 aurelien 407
 
408
	if(obs_xhr != null) {
409
		viderMarqueurs();
410
		console.log('annulation de la xhr');
411
		obs_xhr.abort();
412
	}
413
 
414
	annee = getAnneeSelectionnee();
240 aurelien 415
	requete = '?annee='+annee;
327 aurelien 416
 
417
	if(type_espece != '0') {
418
		requete += '&type_espece='+type_espece;
240 aurelien 419
	}
327 aurelien 420
 
421
	var espece = getEspeceSelectionnee();
422
	if(espece != '0') {
423
		requete += '&espece='+espece;
240 aurelien 424
	}
327 aurelien 425
 
426
	if(evenement != '0') {
240 aurelien 427
		requete += '&evenement='+evenement;
428
	}
327 aurelien 429
 
430
	if(departement != '0') {
240 aurelien 431
		requete += '&departement='+departement;
432
	}
327 aurelien 433
 
434
	if(region != '0') {
264 gduche 435
		requete += '&region='+region;
436
	}
327 aurelien 437
 
438
	$.get(getUrlBaseJrest()+'OdsExport/ExportObservationJson/'+requete, function(data) {
439
 
440
		obs_xhr = null;
441
 
262 gduche 442
		infos_observations = data;
327 aurelien 443
 
444
		nb_observations_par_espece = {};
445
		nb_observations_par_annee = {};
446
 
240 aurelien 447
		if(tableau_marqueurs.length > 0) {
448
			viderMarqueurs();
449
		}
327 aurelien 450
 
240 aurelien 451
		for(i in infos_observations) {
452
			creerEtAjouterMarqueur(i, infos_observations[i]);
453
		}
327 aurelien 454
 
240 aurelien 455
		afficherObservations();
456
	});
457
}
458
 
459
function creerEtAjouterMarqueur(id_marqueur, infos_obs) {
327 aurelien 460
 
240 aurelien 461
	latlng = new google.maps.LatLng(infos_obs['latitude'],infos_obs['longitude']);
327 aurelien 462
 
240 aurelien 463
	var chaine_couleur = '';
327 aurelien 464
 
240 aurelien 465
	for(i in infos_obs.obs) {
466
		var observation = infos_obs.obs[i];
327 aurelien 467
 
468
		if(typeof(tableau_couleurs_en_cours[observation.id_espece]) != 'undefined') {
240 aurelien 469
			chaine_couleur += tableau_couleurs_en_cours[observation.id_espece]+",";
470
		}
327 aurelien 471
 
472
		if(!nb_observations_par_espece[observation.id_espece]) {
473
			nb_observations_par_espece[observation.id_espece] = 0;
474
		}
475
		nb_observations_par_espece[observation.id_espece]++;
476
 
477
		var annee_obs = observation.date.split('/')[2];
478
		if(!nb_observations_par_annee[annee_obs]) {
479
			nb_observations_par_annee[annee_obs] = 0;
480
		}
481
		nb_observations_par_annee[annee_obs]++;
240 aurelien 482
	}
327 aurelien 483
 
240 aurelien 484
	chaine_couleur = chaine_couleur.slice(0,chaine_couleur.length - 1);
327 aurelien 485
  var image = obtenirImagePourChaineCouleur(chaine_couleur);
486
 
240 aurelien 487
 	tableau_marqueurs[id_marqueur] = new google.maps.Marker({
488
	      position: latlng,
489
	      title:infos_obs.evenenement,
490
	      icon:image,
491
	      optimized: false
492
	});
493
 
494
	google.maps.event.addListener(tableau_marqueurs[id_marqueur], 'click', function() {
495
		contenu_fenetre = formaterContenuFenetre(infos_obs.obs);
496
		infowindow.close();
283 aurelien 497
		infowindow.setContent(contenu_fenetre);
240 aurelien 498
		infowindow.open(map,this);
499
	});
327 aurelien 500
 
240 aurelien 501
	tableau_marqueurs[id_marqueur].setDraggable(false);
502
	tableau_marqueurs[id_marqueur].setClickable(true);
503
 
327 aurelien 504
	tableau_marqueurs[id_marqueur].setMap(map);
505
 
240 aurelien 506
}
507
 
508
function viderMarqueurs() {
327 aurelien 509
 
240 aurelien 510
	infowindow.close();
511
	for(i in tableau_marqueurs) {
512
		tableau_marqueurs[i].setMap(null);
513
	}
327 aurelien 514
 
240 aurelien 515
	tableau_marqueurs = new Array();
516
}
517
 
518
 
519
function obtenirImagePourChaineCouleur(chaine_couleur) {
327 aurelien 520
 
240 aurelien 521
	chaine_couleur = encodeURIComponent(chaine_couleur);
522
	var image = getUrlBaseJrest()+"OdsMarqueur/point?couleurs="+chaine_couleur;
327 aurelien 523
 
240 aurelien 524
    return image;
525
}
526
 
527
function convertirDateObsVersJs(chaine_date) {
327 aurelien 528
 
240 aurelien 529
	tableau_date = chaine_date.split('/');
530
	date_obs = new Date();
327 aurelien 531
 
240 aurelien 532
	date_obs.setDate(tableau_date[0]);
533
	date_obs.setMonth(tableau_date[1]);
534
	date_obs.setFullYear(tableau_date[2]);
327 aurelien 535
 
240 aurelien 536
	return date_obs;
537
}
538
 
539
function dateEstDansIntervalle(t_obs) {
327 aurelien 540
 
240 aurelien 541
	date_obs = convertirDateObsVersJs(t_obs);
327 aurelien 542
 
240 aurelien 543
	dans_intervalle = false;
327 aurelien 544
 
240 aurelien 545
	var dateDebutAnnee = new Date();
546
	dateDebutAnnee.setDate(1);
547
	dateDebutAnnee.setMonth(1);
548
	dateDebutAnnee.setFullYear(date_obs.getFullYear());
549
	var quantieme = (date_obs.getTime() - dateDebutAnnee.getTime()) / (24 * 3600 * 1000)+1;
327 aurelien 550
 
240 aurelien 551
	if($('#slider_date').slider("value") >= quantieme) {
552
		dans_intervalle = true;
553
	}
327 aurelien 554
 
240 aurelien 555
	return dans_intervalle;
556
}
327 aurelien 557
 
240 aurelien 558
function comparerDates(date_1, date_2){
559
	diff = date_1.getTime()-date_2.getTime();
560
	return (diff==0?diff:diff/Math.abs(diff));
561
}
562
 
563
function obtenirMarqueurPourStade(stade) {
327 aurelien 564
 
240 aurelien 565
	iconeStade = '../images/marqueur_'+stade+'.png';
566
 
567
	return iconeStade;
568
}
569
 
570
function formaterContenuFenetre(infos_obs) {
327 aurelien 571
 
240 aurelien 572
	contenu_fenetre = '';
573
	date_courante = new Date(annee,mois,jour);
327 aurelien 574
 
240 aurelien 575
	for(i in infos_obs) {
327 aurelien 576
 
240 aurelien 577
		t_obs = infos_obs[i].date;
327 aurelien 578
 
240 aurelien 579
		if(dateEstDansIntervalle(t_obs)) {
580
			nom_stade ='';
581
			if(infos_obs[i].code_bbch != '') {
582
				nom_stade = ' stade '+infos_obs[i].code_bbch;
583
			}
327 aurelien 584
 
240 aurelien 585
			contenu_fenetre += '<div class="fenetre_infos">';
586
			contenu_fenetre += '<div class="nom_sci">'+infos_obs[i].nom_scientifique+'</div>';
587
			contenu_fenetre += '<div class="nom_sci">'+infos_obs[i].evenenement+nom_stade+'</div>';
588
			contenu_fenetre += '<div class="date_obs"> Observ&eacute; le : '+infos_obs[i].date+' </div>';
589
			contenu_fenetre += construireUrlProfilParticipant(infos_obs[i].participant);
590
			contenu_fenetre += '</div><br />';
591
		}
592
	}
327 aurelien 593
 
240 aurelien 594
	return contenu_fenetre;
595
}
596
 
597
function construireUrlProfilParticipant(id) {
598
	return '<a class="lien_vers_profil" href="http://obs-saisons.fr/user/'+id+'"> Voir l\'auteur </a>';
599
}
600
 
329 aurelien 601
function getCouleurAleatoire() {
602
  var letters = '0123456789ABCDEF';
603
  var color = '#';
604
  for (var i = 0; i < 6; i++) {
605
    color += letters[Math.floor(Math.random() * 16)];
606
  }
607
  return color;
608
}
327 aurelien 609
 
240 aurelien 610
$('#map_canvas').ready(function() {
611
	initialiserCarte();
327 aurelien 612
});