Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 299 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

var map = null;
var ctaLayer = null;
var tableau_marqueurs = new Array();
var infowindow = new google.maps.InfoWindow();
var infos_observations = new Array();
var nb_observations_par_espece = {};
var nb_observations_par_annee = {};

var type_espece = '0';
var espece = '0';
var evenement = '0';
var annee = '0';
var mois = '0';
var jour = '0';
var departement = '0';
var region = '0';
var valeur_slider_defaut = '0';

/**
 *
 */
Date.prototype.getDOY = function() {
        var onejan = new Date(this.getFullYear(),0,1);
        return Math.ceil((this - onejan) / 86400000);
}

var tableau_couleurs = new Array(
                "#ff0000", "#733d00", "#f2ffbf", "#00ccff", "#2e1a33", "#00ff66", "#ffe1bf", "#ff8800",
                "#005266", "#be00cc", "#592d2d", "#ffcc00", "#336641", "#264599", "#80206c", "#bf7960",
                "#665c33", "#bf0000", "#80a2ff", "#ff80c4", "#806c60", "#ccff00", "#00ffcc", "#090040",
                "#bf004d", "#2a3326", "#668000", "#608079", "#3600cc", "#8c696e"
);

liste_mois = new Array("jan","fev","mar","avr","mai","jun","jui","aou","sep","oct","nov","dec");

evenements_debut_annee = new Array("")

var tableau_couleurs_en_cours = new Array();

var timerSlider = null;

function getUrlBaseJrest() {
        return urlBaseJrest;
}

function traiterParametresUrl() {

        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
        for(var i = 0; i < hashes.length; i++)
        {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }

        if(vars['type_espece'] != null) {
                type_espece = vars['type_espece'];
                $('#selecteur_liste_types_especes').val(type_espece);
        }

        if(vars['espece'] != null) {
                if(type_espece != '0') {
                        modifierTableauEspeces();
                }
                espece = vars['espece'];
                $('#selecteur_especes').val(espece);

        }

        if(vars['evenement'] != null) {
                if(espece != 0) {
                        modifierTableauEvenement()
                }
                evenement = vars['evenement'];
                $('#selecteur_evenements').val(evenement);
        }

        if(vars['annee'] != null) {
                annee = vars['annee'];
                $('#selecteur_liste_annees').val(annee);
        } else {
                date = new Date()
                annee = date.getFullYear();
                $('#selecteur_liste_annees').val(annee);
        }

        if(vars['mois'] != null) {
                mois = vars['mois'];
        } else {
                date = new Date();
                if(annee == date.getFullYear()) {
                        mois = date.getMonth();
                        valeur_slider_defaut = date.getDOY();
                } else {
                        mois = 11;
                        date.setYear(annee);
                        date.setMonth(mois);
                        date.setDate(31);
                        valeur_slider_defaut = date.getDOY();
                }
        }

        if(vars['departement'] != null) {
                departement = vars['departement'];
                $('#selecteur_liste_departement').val(annee);
        } else {
                if(vars['region'] != null) {
                        region = vars['region'];
                        $('#selecteur_liste_region').val(annee);
                }
        }

        if(vars['cacher_criteres'] != null && vars['cacher_criteres'] == '1') {
                $(".cacher_widget").hide();
        }
}

function obtenirCodeWidget() {

        var UrlBase = url_widget;
        UrlBase += '?';
        if(type_espece != '0') UrlBase += "type_espece="+type_espece;
        //TODO: décider si l'on peut garder l'espece et si le cas échéant on la cache
        if(espece != '0') UrlBase += "&espece="+espece;
        if(evenement != '0') UrlBase += "&evenement="+evenement;
        if(annee != '0') UrlBase += "&annee="+annee;
        if(departement != '0') UrlBase += "&departement="+departement;
        if(region != '0') UrlBase += "&region="+region;
        if(mois != '0') UrlBase += "&mois="+mois;
        UrlBase += "&cacher_criteres=1";

        UrlBase = UrlBase.replace('?&','?');

        code_widget = '<iframe src="'+UrlBase+'" width="735px" height="650px"><p>Votre navigateur ne supporte pas les iframes.</p></iframe>'

        return code_widget;
}

String.prototype.hashCode = function() {
  var hash = 0, i, chr;
  if (this.length === 0) return hash;
  for (i = 0; i < this.length; i++) {
    chr   = this.charCodeAt(i);
    hash  = ((hash << 5) - hash) + chr;
    hash |= 0; // Convert to 32bit integer
  }
  return hash;
};

function renverserTableauEtHashcoderIndex(trans) {
    var key, tmp_ar = {};

    for (key in trans)
    {
        if (trans.hasOwnProperty(key))
        {
            tmp_ar[trans[key].hashCode()] = key;
        }
    }

    return tmp_ar;
}

function trierTableau(tableau) {
        if(!tableau) {
                return;
        }

        var tableau_trie = tableau.slice(0);
        tableau_trie.sort(function(a,b){
    return a.localeCompare(b);
        });

        return tableau_trie;
}

$('#lien_cette_recherche').ready(function() {
        $('#lien_cette_recherche').click(function() {
                window.alert(obtenirCodeWidget());
                return false;
        });
});

function selectionnerParametresDynamiquesParDefaut() {
        if($('.conteneur_selecteur_liste_annees').is(':visible')) {
                var annee_courante = (new Date()).getFullYear();
                $('#annee_numero_'+annee_courante).attr( "checked", true );
        }
        premier_chargement = false;
}

var premier_chargement = true;
$(document).ready(function() {
        traiterParametresUrl();
});

/**
************************************************************************************************
************************************************************************************************

    Fonctions concernant les gestion des filtres sur la carte

************************************************************************************************
************************************************************************************************
**/

function setDateSlider() {
        numeroJour = $("#slider_date").slider("value");
        dateObs = new Date(annee,0,0);
        dateObs.setDate(dateObs.getDate()+numeroJour);

        mois = dateObs.getMonth();
        jour = dateObs.getDay();
        afficherObservations();
}

function initialiserSliderDates() {

        date_min = 1;
        date_max = 365;

        $("#slider_date").slider({
                                                                min: date_min,
                                                                max: date_max,
                                                                value: valeur_slider_defaut
                                                        });

        taille_criteres = Math.round($("#slider_date").width()/(liste_mois.length));

        valeurs_slider = '<table id="table_dates"><tbody><tr>';

        for (i in liste_mois) {
                valeurs_slider += '<td class="conteneur_date">'+liste_mois[i]+'</td>';
        }

        valeurs_slider += '</tr></tbody></table>';

        $("conteneur_date").css(".conteneur_date{ width:"+taille_criteres+"px;}");

        $("#valeurs_date").html(valeurs_slider);

        $("#slider_date").bind("slidestop", function(event, ui) {
                setDateSlider();
                return true;
        });

        $(window).bind("resize", resizeWindow);
        function resizeWindow( e ) {
                taille_criteres = Math.round($("#slider_date").width()/(liste_mois.length));
                $("#css_slider").html(".conteneur_date{ width:"+taille_criteres+"px;}");
        }
}

function initialiserListeRegion() {

        $('#selecteur_liste_region').change(function() {
                region = $('select#selecteur_liste_region option:selected').val();
                obtenirObservations();
        });
}

function initialiserListeDepartement() {

        $('#selecteur_liste_departement').change(function() {
                departement = $('select#selecteur_liste_departement option:selected').val();
                obtenirObservations();
        });
}


function initialiserListeTypesEspeces() {

        $('#selecteur_liste_types_especes').change(function() {
                type_espece = $('select#selecteur_liste_types_especes option:selected').val();
                modifierTableauEspeces();
                obtenirObservations();
        });
}

function incrementerValeurSlider() {
        var valeur_en_cours = $('#slider_date').slider("value");
        if($('#slider_date').slider("value") < $('#slider_date').slider("option", "max")) {
                valeur_en_cours++;
                $('#slider_date').slider("value",valeur_en_cours);
                setDateSlider();
        } else {
                clearInterval(timerSlider);
                $('#demarrer_slider').removeAttr('disabled');
        }
}

function initialiserBoutonsSlider() {

        $('#demarrer_slider').click(function() {

                if($('#slider_date').slider("value") == $('#slider_date').slider("option","max")) {
                        min_slider = $('#slider_date').slider("option","min");
                        $('#slider_date').slider("value",min_slider);
                }

                timerSlider = setInterval("incrementerValeurSlider()",150);
                $('#demarrer_slider').attr('disabled', 'disabled');
        });

        $('#arreter_slider').click(function() {
                if(timerSlider != null) {
                        clearInterval(timerSlider);
                        $('#demarrer_slider').removeAttr('disabled');
                }
        });

}

function initialiserValeursParDefaut() {
        type_espece = 0;
        $('select#selecteur_liste_types_especes').val("0");
        modifierTableauEspeces();
        obtenirObservations();
}

$('#slider_date').ready(function() {
        initialiserSliderDates();
        initialiserBoutonsSlider();
        initialiserListeTypesEspeces();
        initialiserListeEspeces();
        initialiserListeEvenements();
        initialiserListeAnnees();
        initialiserValeursParDefaut();
        initialiserListeRegion();
        initialiserListeDepartement()
});


/**
        ************************************************************************************************
        ************************************************************************************************

            Fonctions concernant la carte permettant de pointer d'afficher l'emplacement des observation

        ************************************************************************************************
        ************************************************************************************************
**/
function initialiserCarte() {

        if($('#map_canvas').length == 0) {
                return;
        }

        var latlng = new google.maps.LatLng(47.0504, 2.2347);
        var myOptions = {
                zoom: 5,
                center:latlng,
                mapTypeId: google.maps.MapTypeId.ROADMAP,
                mapTypeControlOptions: {
                        mapTypeIds: ['OSM',
                                     google.maps.MapTypeId.ROADMAP,
                                     google.maps.MapTypeId.HYBRID,
                                     google.maps.MapTypeId.SATELLITE,
                                     google.maps.MapTypeId.TERRAIN]
                }
        };

        var osmMapType = new google.maps.ImageMapType({
                getTileUrl: function(coord, zoom) {
                        return "http://tile.openstreetmap.org/" +
                        zoom + "/" + coord.x + "/" + coord.y + ".png";
                },
                tileSize: new google.maps.Size(256, 256),
                isPng: true,
                alt: "OpenStreetMap",
                name: "OSM",
                maxZoom: 19
        });

        map = new google.maps.Map(document.getElementById("map_canvas"),
        myOptions);
        // Ajout de la couche OSM à la carte
        map.mapTypes.set('OSM', osmMapType);

        marker = new google.maps.Marker({
              position: latlng,
              title:""
        });

        chargerLimitesCommunales();

        $('.lien_vers_profil').live('click', function(event) {
                event.preventDefault();
                window.open($(this).attr('href'));
                return false;
        });
}

function chargerLimitesCommunales() {
        if (urlsLimitesCommunales != null) {
                for (urlId in urlsLimitesCommunales) {
                        var url = urlsLimitesCommunales[urlId];
                        ctaLayer = new google.maps.KmlLayer(url, {preserveViewport: false});
                        ctaLayer.setMap(map);
                }
        }
}

var obs_xhr = null;
function obtenirObservations() {

        if(obs_xhr != null) {
                viderMarqueurs();
                console.log('annulation de la xhr');
                obs_xhr.abort();
        }

        annee = getAnneeSelectionnee();
        requete = '?annee='+annee;

        if(type_espece != '0') {
                requete += '&type_espece='+type_espece;
        }

        var espece = getEspeceSelectionnee();
        if(espece != '0') {
                requete += '&espece='+espece;
        }

        if(evenement != '0') {
                requete += '&evenement='+evenement;
        }

        if(departement != '0') {
                requete += '&departement='+departement;
        }

        if(region != '0') {
                requete += '&region='+region;
        }

        $.get(getUrlBaseJrest()+'OdsExport/ExportObservationJson/'+requete, function(data) {

                obs_xhr = null;

                infos_observations = data;

                nb_observations_par_espece = {};
                nb_observations_par_annee = {};

                if(tableau_marqueurs.length > 0) {
                        viderMarqueurs();
                }

                for(i in infos_observations) {
                        creerEtAjouterMarqueur(i, infos_observations[i]);
                }

                afficherObservations();
        });
}

function creerEtAjouterMarqueur(id_marqueur, infos_obs) {

        latlng = new google.maps.LatLng(infos_obs['latitude'],infos_obs['longitude']);

        var chaine_couleur = '';

        for(i in infos_obs.obs) {
                var observation = infos_obs.obs[i];

                if(typeof(tableau_couleurs_en_cours[observation.id_espece]) != 'undefined') {
                        chaine_couleur += tableau_couleurs_en_cours[observation.id_espece]+",";
                }

                if(!nb_observations_par_espece[observation.id_espece]) {
                        nb_observations_par_espece[observation.id_espece] = 0;
                }
                nb_observations_par_espece[observation.id_espece]++;

                var annee_obs = observation.date.split('/')[2];
                if(!nb_observations_par_annee[annee_obs]) {
                        nb_observations_par_annee[annee_obs] = 0;
                }
                nb_observations_par_annee[annee_obs]++;
        }

        chaine_couleur = chaine_couleur.slice(0,chaine_couleur.length - 1);
  var image = obtenirImagePourChaineCouleur(chaine_couleur);

        tableau_marqueurs[id_marqueur] = new google.maps.Marker({
              position: latlng,
              title:infos_obs.evenenement,
              icon:image,
              optimized: false
        });

        google.maps.event.addListener(tableau_marqueurs[id_marqueur], 'click', function() {
                contenu_fenetre = formaterContenuFenetre(infos_obs.obs);
                infowindow.close();
                infowindow.setContent(contenu_fenetre);
                infowindow.open(map,this);
        });

        tableau_marqueurs[id_marqueur].setDraggable(false);
        tableau_marqueurs[id_marqueur].setClickable(true);

        tableau_marqueurs[id_marqueur].setMap(map);

}

function viderMarqueurs() {

        infowindow.close();
        for(i in tableau_marqueurs) {
                tableau_marqueurs[i].setMap(null);
        }

        tableau_marqueurs = new Array();
}


function obtenirImagePourChaineCouleur(chaine_couleur) {

        chaine_couleur = encodeURIComponent(chaine_couleur);
        var image = getUrlBaseJrest()+"OdsMarqueur/point?couleurs="+chaine_couleur;

    return image;
}

function convertirDateObsVersJs(chaine_date) {

        tableau_date = chaine_date.split('/');
        date_obs = new Date();

        date_obs.setDate(tableau_date[0]);
        date_obs.setMonth(tableau_date[1]);
        date_obs.setFullYear(tableau_date[2]);

        return date_obs;
}

function dateEstDansIntervalle(t_obs) {

        date_obs = convertirDateObsVersJs(t_obs);

        dans_intervalle = false;

        var dateDebutAnnee = new Date();
        dateDebutAnnee.setDate(1);
        dateDebutAnnee.setMonth(1);
        dateDebutAnnee.setFullYear(date_obs.getFullYear());
        var quantieme = (date_obs.getTime() - dateDebutAnnee.getTime()) / (24 * 3600 * 1000)+1;

        if($('#slider_date').slider("value") >= quantieme) {
                dans_intervalle = true;
        }

        return dans_intervalle;
}

function comparerDates(date_1, date_2){
        diff = date_1.getTime()-date_2.getTime();
        return (diff==0?diff:diff/Math.abs(diff));
}

function obtenirMarqueurPourStade(stade) {

        iconeStade = '../images/marqueur_'+stade+'.png';

        return iconeStade;
}

function formaterContenuFenetre(infos_obs) {

        contenu_fenetre = '';
        date_courante = new Date(annee,mois,jour);

        for(i in infos_obs) {

                t_obs = infos_obs[i].date;

                if(dateEstDansIntervalle(t_obs)) {
                        nom_stade ='';
                        if(infos_obs[i].code_bbch != '') {
                                nom_stade = ' stade '+infos_obs[i].code_bbch;
                        }

                        contenu_fenetre += '<div class="fenetre_infos">';
                        contenu_fenetre += '<div class="nom_sci">'+infos_obs[i].nom_scientifique+'</div>';
                        contenu_fenetre += '<div class="nom_sci">'+infos_obs[i].evenenement+nom_stade+'</div>';
                        contenu_fenetre += '<div class="date_obs"> Observ&eacute; le : '+infos_obs[i].date+' </div>';
                        contenu_fenetre += construireUrlProfilParticipant(infos_obs[i].participant);
                        contenu_fenetre += '</div><br />';
                }
        }

        return contenu_fenetre;
}

function construireUrlProfilParticipant(id) {
        return '<a class="lien_vers_profil" href="http://obs-saisons.fr/user/'+id+'"> Voir l\'auteur </a>';
}


$('#map_canvas').ready(function() {
        initialiserCarte();
});