1,35 → 1,62 |
// Javascript Document |
|
|
// ============================================================== |
// FONCTIONS ADDITIONNELLES POUR GERER LES URLS |
// =================================================================================== |
// FONCTIONS ADDITIONNELLES POUR GERER LES URLS ET L'OUVERTRURE DE NOUVELLE FENETRE |
function convertirEnParametresUrl(objet) { |
var parametresUrl = ''; |
for (attribut in objet) { |
if (typeof(objet[attribut]) == 'function' || typeof(objet[attribut]) == 'undefined' || |
objet[attribut] == null) |
objet[attribut] == null || objet[attribut] == '*' || objet[attribut] == 0) |
continue; |
parametresUrl += (parametresUrl == '' ? '' : '&') + attribut + "=" + objet[attribut].toString(); |
parametresUrl += (parametresUrl == '' ? '' : '&') + attribut + "=" + objet[attribut]; |
} |
return parametresUrl; |
}; |
|
function estParametreDansUrl(nomParametre) { |
var estDansUrl = false; |
var listeParametres = location.search.substring(1).split("&"); |
function recupererParametreDansUrl(nomParametre, chaineRecherche) { |
var split = chaineRecherche.split('?'); |
chaineRecherche = split[split.length-1]; |
var valeurParametre = null; |
var listeParametres = chaineRecherche.split("&"); |
for (var index = 0; index < listeParametres.length; index ++) { |
var split = listeParametres[index].split("="); |
if (split[0] == nomParametre) { |
estDansUrl = true; |
valeurParametre = split[1]; |
break; |
} |
} |
return estDansUrl; |
return valeurParametre; |
}; |
|
// ============================================================= |
function estValeurDansTableau(tableau, valeur) { |
var index; |
for (index = 0; index < tableau.length && tableau[index] != valeur; index ++); |
return (tableau.length > 0 && index != tableau.length); |
} |
|
function ouvrirNouvelleFenetre(element, event) { |
window.open(element.href); |
return arreter(event); |
} |
|
function arreter(event) { |
if (event.stopPropagation) { |
event.stopPropagation(); |
} else if (window.event) { |
window.event.cancelBubble = true; |
} |
if (event.preventDefault) { |
event.preventDefault(); |
} |
event.returnValue = false; |
return false; |
} |
|
|
|
// ============================================================= |
|
var map = null, |
optionsCoucheOSM = { |
attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors,' |
51,16 → 78,25 |
zoom : 6, |
minZoom : 3, |
maxBounds : [[-85.051129, -180], [85.051129, 180]], |
layers : [couchePlanGoogle] |
layers : [coucheOSM] |
}, |
zoom = 6, |
legende = null, |
coucheDepartement = null, |
infoBulle = null; |
|
var coucheSites = new L.FeatureGroup(), |
points = new Array(), |
coucheSites = new L.FeatureGroup(), |
sources = new Object(), |
formeDonnees = '', |
popupMaille = null; |
overlays = []; |
|
var requeteChargementPoints = null, |
chargementMaillesEnCours = false, |
doitRafraichirCarte = true, |
chargementCommunesEnCours = false, |
timer = null, |
url = ''; |
|
73,12 → 109,12 |
|
function initialiserWidget() { |
initialiserCarte(); |
dimensionnerOverlay(); |
initialiserPanneauControle(); |
initialiserSources(); |
initialiserListeners(); |
initialiserPanneauControle(); |
chargerLimitesCommunales(); |
if (!estParametreDansUrl('source')) { |
initialiserSources(); |
} |
chargerMaillesVides(); |
programmerRafraichissementCarte(); |
} |
|
89,7 → 125,18 |
} |
}); |
|
function dimensionnerOverlay() { |
var taille = '1.6'; |
var tailleMaxIcones = 20; |
var padding_icones = 8; |
$("#zone-titre h1").css('font-size', (taille)+'em'); |
$("#zone-titre").css('padding', padding_icones+"px "+padding_icones+"px "+Math.round(padding_icones/4)+"px"); |
$('#zone-titre').height(tailleMaxIcones*2); |
var left = ($(window).width()-$('#zone-titre').width())/2; |
$('#zone-titre').css('left',left); |
} |
|
|
function dimensionnerCarte() { |
$('#map').height($(window).height()); |
$('#map').width($(window).width()); |
103,13 → 150,15 |
couchePlanGoogle.addTo(map); |
coucheSatelliteGoogle.addTo(map); |
var echelle = new L.Control.Scale({ |
maxWidth : 100, |
maxWidth : 32, |
metric : true, |
imperial : false, |
updateWhenIdle : true |
}); |
map.addControl(echelle); |
zoom = map.getZoom(); |
} |
|
function initialiserListeners() { |
map.on('moveend', surChangementVueSurCarte); |
map.on('zoomend', surChangementVueSurCarte); |
121,108 → 170,199 |
|
function initialiserPanneauControle() { |
var baseMaps = { |
"OSM" : coucheOSM, |
"OpenStreetMap" : coucheOSM, |
"Plan" : couchePlanGoogle, |
"Satellite" : coucheSatelliteGoogle |
}; |
|
var overlayMaps = {}; |
if (!estParametreDansUrl('source')) { |
for (var index = 0; index < nomSources.length; index ++) { |
overlayMaps[nomSources[index]] = new L.LayerGroup(); |
for (var index = 0; index < listeSources.length; index ++) { |
sources[listeSources[index]] = estValeurDansTableau(source, listeSources[index]); |
overlayMaps[listeSources[index]] = new L.LayerGroup(); |
} |
} |
L.control.layers(baseMaps, overlayMaps).addTo(map); |
coucheOSM.bringToBack(); |
couchePlanGoogle.bringToFront(); |
coucheOSM.bringToFront(); |
couchePlanGoogle.bringToBack(); |
coucheSatelliteGoogle.bringToBack(); |
|
// garder par defaut la couche plan google comme selectionnee dans le panel |
var selecteursFonds = $('.leaflet-control-layers-base .leaflet-control-layers-selector'); |
selecteursFonds[0].checked = false; |
selecteursFonds[1].checked = true; |
selecteursFonds[0].checked = true; |
selecteursFonds[1].checked = false; |
selecteursFonds[2].checked = false; |
} |
|
function chargerLimitesCommunales() { |
coucheDepartement = new L.KML(null, {async : true}).addTo(map); |
if (urlsLimitesCommunales != null) { |
for (var index = 0; index < urlsLimitesCommunales.length; index ++) { |
var url = urlsLimitesCommunales[index]; |
var coucheDepartement = new L.KML(url, {async: true}); |
coucheDepartement.on("loaded", function(e) { |
map.fitBounds(e.target.getBounds()); |
}); |
map.addLayer(coucheDepartement); |
coucheDepartement.addKMLFiles(urlsLimitesCommunales); |
} |
} |
} |
|
function initialiserSources() { |
overlays = $('.leaflet-control-layers-overlays .leaflet-control-layers-selector'); |
$.each(overlays, function (index, input) { |
input.value = sources[index]; |
input.value = listeSources[index]; |
input.id = 'overlay' + (index+1); |
var lien = '<a href="' + liensVersSources[index] + '" target="_blank">' + nomSources[index] + '</a>'; |
var lien = '<a href="' + liensVersSources[index] + '" target="_blank">' + nomListeSources[index] + '</a>'; |
$('#overlay' + (index+1) + ' ~ span').html(lien); |
input.type = 'radio'; |
input.checked = (sources[index] == source); |
input.onchange = function(event) { |
// evenement sur selection/deselection overlay dans sa checkbox |
input.checked = sources[listeSources[index]]; |
input.onclick = function(event) { |
changerSource(event.target.value); |
} |
}); |
} |
|
function determinerSourcesSelectionnees() { |
var sourcesSelectionnees = new Array(); |
for (source in sources) { |
if (sources[source] == true) { |
sourcesSelectionnees.push(source); |
} |
} |
return sourcesSelectionnees; |
} |
|
function surChangementVueSurCarte() { |
if (doitRafraichirCarte == false) { |
doitRafraichirCarte = true; |
} else { |
programmerRafraichissementCarte(); |
supprimerTousLayers(); |
zoom = map.getZoom(); |
chargerMaillesVides(); |
} |
} |
|
function programmerRafraichissementCarte() { |
function chargerMaillesVides() { |
chargementMaillesEnCours = true; |
if(timer != null) { |
window.clearTimeout(timer); |
} |
if(requeteChargementPoints != null) { |
stopperRequeteAjax(); |
} |
timer = window.setTimeout(function() { |
var coordonneesBordure = calculerCoordonneesBordure(); |
var parametres = { |
"source" : "floradata", |
"bbox" : coordonneesBordure, |
"zoom" : map.getZoom() |
}; |
url = urlBase + "mailles?" + convertirEnParametresUrl(parametres); |
fonctionCallback = traiterDonneesStations; |
executerAJAX(); |
}, 400); |
} |
|
function programmerRafraichissementCarte(source) { |
source = (source == null || source == 'null') ? null : source; |
if (!chargementMaillesEnCours) { |
if (timer != null) { |
window.clearTimeout(timer); |
} |
if (requeteChargementPoints != null) { |
if (source == null) { |
stopperRequeteAjax(); |
} |
} |
timer = window.setTimeout("rafraichirDonnnees('"+source+"')", 250); |
} else { |
window.setTimeout("programmerRafraichissementCarte('"+source+"')", 400); |
} |
} |
|
function stopperRequeteAjax() { |
requeteChargementPoints.abort(); |
requeteChargementPoints = null; |
} |
timer = window.setTimeout(function() { |
|
function rafraichirDonnnees(source) { |
source = (source == null || source == 'null') ? null : source; |
if (coucheDepartement == null || coucheDepartement.getStatus() == KML_READY) { |
if (source != null) { |
chargerLocalisations(source); |
} else { |
supprimerLocalisations(); |
afficherMessageChargement('stations'); |
chargerLocalisations(); |
}, 400); |
for (source in sources) { |
if (sources[source] == true) { |
chargerLocalisations(source); |
} |
} |
} |
} else { |
window.setTimeout("rafraichirDonnnees('"+source+"')", 800); |
} |
} |
|
|
function supprimerLocalisations() { |
function supprimerTousLayers() { |
coucheSites.clearLayers(); |
points = []; |
formeDonnees = ''; |
} |
|
function supprimerLocalisations(source) { |
source = (typeof(source) == 'undefined') ? null : source; |
if (source != null) { |
var sourceUrl = recupererParametreDansUrl('source', url); |
if (requeteChargementPoints != null && sourceUrl == source && source != null) { |
stopperRequeteAjax(); |
} |
coucheSites.eachLayer(function(layer) { |
supprimerLayer(layer, source); |
}); |
if (source != null) { |
supprimerPointsListe(source); |
} |
var sourcesSelectionnees = determinerSourcesSelectionnees(); |
if (sourcesSelectionnees.length == 1 && determinerNombreMarqueurs(sourcesSelectionnees[0]) > 0) { |
transformerMaillesEnPoints(sourcesSelectionnees[0]); |
} |
var sontPointsAffiches = (points.length>0 && determinerNombreMailles(false)==0); |
formeDonnees = sontPointsAffiches ? 'point' : 'maille'; |
} |
} |
|
function estLayerUtilisePourSource(layer, source) { |
return ( |
(layer.typeSite == 'MAILLE' && typeof(layer.nombrePoints[source]) != 'undefined') || |
(layer.typeSite != 'MAILLE' && layer.source == source) |
); |
} |
|
function supprimerLayer(layer, source) { |
if (estLayerUtilisePourSource(layer, source)) { |
if (layer.typeSite == 'MAILLE') { |
supprimerSourceDansMaille(layer, source); |
} else { |
coucheSites.removeLayer(layer); |
} |
} |
} |
|
|
function changerSource(projetClique) { |
// deselctionner les autres boutons des controles d'overlays dans le panel |
var indexProjetClique; |
for (var index = 0; index < overlays.length; index ++) { |
if (overlays[index].value != projetClique) { |
overlays[index].checked = false; |
if (overlays[index].value == projetClique) { |
indexProjetClique = index; |
} |
} |
// afficher les sites dans la carte pour le projet selectionne |
if (infoBulle != null) { |
masquerInfoBulle(); |
sources[projetClique] = overlays[indexProjetClique].checked; |
if (sources[projetClique] == true) { |
programmerRafraichissementCarte(projetClique); |
} else { |
supprimerLocalisations(projetClique); |
} |
source = projetClique; |
programmerRafraichissementCarte(); |
} |
|
|
function afficherMessageChargement(element) { |
if ($("#zone-chargement").css('display') == 'none') { |
var divTmplElement = 'tpl-chargement-' + element; |
$("#zone-chargement").append($("#" + divTmplElement).text()); |
$("#zone-chargement").css('display', 'block'); |
} |
} |
|
function masquerMessageChargement() { |
$("#zone-chargement").css('display', 'none'); |
245,37 → 385,43 |
return (requeteChargementPoints != null && requeteChargementPoints.readyState != 4); |
} |
|
function retourRequeteOK() { |
function estStatutRequeteOK() { |
return ((requeteChargementPoints.status == 200 || requeteChargementPoints.status == 304) |
|| requeteChargementPoints.status == 0); |
} |
|
|
|
function chargerLocalisations() { |
function chargerLocalisations(source) { |
if (requeteEnCours()) { |
window.setTimeout("chargerLocalisations('"+source+"')", 400); |
} else { |
afficherMessageChargement('stations'); |
// generer l'URL du script a interroger sur le serveur |
var coordonneesBordure = calculerCoordonneesBordure(); |
var parametres = { |
"source" : source, |
"num_taxon" : num_taxon, |
"num_taxon" : numTaxon, |
"referentiel" : referentiel, |
"dept" : dept, |
"nn" : nn, |
"auteur" : auteur, |
"date_debut" : dateDebut, |
"date_fin" : dateFin, |
"bbox" : coordonneesBordure, |
"nb_jours" : nbJours, |
"zoom" : map.getZoom() |
}; |
url = urlBase + "stations?" + convertirEnParametresUrl(parametres); |
|
fonctionCallback = traiterDonneesStations; |
executerAJAX(); |
} |
} |
|
function calculerCoordonneesBordure() { |
var bordure = map.getBounds(); |
var ouest = bordure.getSouthWest().lng, |
sud = Math.max(bordure.getSouthWest().lat, -85.051129), |
est = bordure.getNorthEast().lng, |
nord = Math.min(bordure.getNorthEast().lat, 85.051129); |
var ouest = bordure.getSouthWest().lng.toFixed(6), |
sud = Math.max(bordure.getSouthWest().lat, -85.051129).toFixed(6), |
est = bordure.getNorthEast().lng.toFixed(6), |
nord = Math.min(bordure.getNorthEast().lat, 85.051129).toFixed(6); |
// appliquer les limites possibles de la projection actuellement utilisee aux coordonnees |
// longitudes ouest et est de la bbox (permettra d'eviter de renvoyer des messages d'erreur) |
if (ouest < -180) { |
293,104 → 439,178 |
|
function traiterDonneesStations() { |
masquerMessageChargement(); |
|
var texte = requeteChargementPoints.responseText; |
if (!retourRequeteOK()) { |
if (!estStatutRequeteOK()) { |
alert(texte); |
} else { |
var donneesJSON = eval("(function(){return " + texte + ";})()"); |
if (typeof(donneesJSON) != 'undefined' && typeof(donneesJSON.features) != 'undefined') { |
ajouterObjets(donneesJSON); |
if (donneesJSON != null && typeof(donneesJSON.features) != 'undefined') { |
ajouterStationsSurCarte(donneesJSON); |
} |
} |
} |
|
|
function ajouterObjets(data) { |
coucheSites.clearLayers(); |
var contientMailles = (data.features[0].properties.typeSite == 'MAILLE'); |
function ajouterStationsSurCarte(data) { |
if (doitTransformerEnMaille(data.stats)) { |
if (points.length > 0 && data.stats.source != '') { |
combinerMaillesEtPoints(); |
} |
formeDonnees = 'maille'; |
} else { |
formeDonnees = data.stats.formeDonnees; |
} |
var sourceDonnees = data.stats.source; |
for (var index = 0; index < data.features.length; index ++) { |
switch (data.features[index].properties.typeSite) { |
case 'MAILLE' : ajouterMaille(data.features[index]); |
break; |
case 'COMMUNE' : |
case 'STATION' : ajouterPoint(data.features[index]); |
break; |
ajouterStation(data.features[index]); |
} |
} |
if (contientMailles && legende == null) { |
if (formeDonnees == 'maille' && data.stats.sites > 0) { |
afficherLegende(); |
} else if (legende != null) { |
regenererInfobulleMailles(); |
} else { |
masquerLegende(); |
} |
if (chargementMaillesEnCours) { |
chargementMaillesEnCours = false; |
programmerRafraichissementCarte(); |
} |
} |
|
function ajouterMaille(feature) { |
var coordonnees = []; |
for (var i = 0; i < feature.geometry.coordinates.length; i++) { |
var sommet = new L.LatLng(feature.geometry.coordinates[i][0], feature.geometry.coordinates[i][1]); |
coordonnees.push(sommet); |
function ajouterStation(feature) { |
if (feature.properties.typeSite == 'MAILLE') { |
traiterMaille(feature); |
} else { |
ajouterPoint(feature); |
} |
} |
|
var objet = new L.Polygon(coordonnees, { |
function doitTransformerEnMaille(statsFeatures) { |
var condition1 = (formeDonnees == 'point' && statsFeatures.formeDonnees =='maille'); |
var condition2 = (formeDonnees == 'maille' && statsFeatures.formeDonnees =='point' |
&& determinerNombreMailles(false) > 0); |
var condition3 = (statsFeatures.formeDonnees == 'point' && map.getZoom() <= ZOOM_MAXIMUM_MAILLAGE |
&& (points.length+statsFeatures.sites) > SEUIL_MAILLAGE); |
return (condition1 || condition2 || condition3); |
} |
|
|
|
// ==================================================================== |
// Gestion des mailles |
|
var optionsMaille = { |
color: '#FFFFFF', |
opacity : 0.7, |
weight: 1, |
fillColor : getColor(feature.properties.nombrePoints), |
fillOpacity : 0.6 |
}; |
|
function determinerNombreMailles(prendToutesMailles) { |
var nombreMailles = 0; |
coucheSites.eachLayer(function(layer) { |
if ('typeSite' in layer && layer.typeSite == 'MAILLE') { |
var nombrePoints = 0; |
for (var source in layer.nombrePoints) { |
nombrePoints = layer.nombrePoints[source]; |
} |
if (prendToutesMailles || nombrePoints>0) { |
nombreMailles ++; |
} |
} |
}); |
objet.typeSite = feature.properties.typeSite; |
objet.nombrePoints = feature.properties.nombrePoints; |
objet.on('click', clicSurMaille); |
coucheSites.addLayer(objet); |
// afficher le nombre de points inclus dans la maille |
afficherNombreStationsDansMaille(objet); |
return nombreMailles; |
} |
|
function afficherNombreStationsDansMaille(maille) { |
// comme la div qui contiendra la valeur du nombre de stations va se placer dans la page |
// au centre de la maille (et qui va servir de point d'ancrage pour le bord gauche par defaut) |
// il est necessaire de creer un decalage vers la gauche en fonction du nombre de chiffres |
var decalage = calculerDecalagePositionnementNombre(maille.nombrePoints); |
var sudMaille = maille._originalPoints[0].y, |
ouestMaille = maille._originalPoints[0].x, |
nordMaille = maille._originalPoints[2].y, |
estMaille = maille._originalPoints[2].x, |
centreMaille = new L.Point((ouestMaille+estMaille)/2 - decalage, (sudMaille+nordMaille)/2); |
var divIcon = new L.divIcon({ |
className : "nombre-sites", |
html : maille.nombrePoints |
function traiterMaille(feature) { |
var coordonnees = []; |
for (var i = 0; i < feature.geometry.coordinates.length; i++) { |
var sommet = new L.LatLng(feature.geometry.coordinates[i][0], feature.geometry.coordinates[i][1]); |
coordonnees.push(sommet); |
} |
var maille = rechercherMailleExistante(coordonnees); |
if (maille) { |
mettreAJourMaille(maille, feature); |
} else if (feature.properties.nombrePoints > 0) { |
ajouterMaille(feature); |
} |
} |
|
function rechercherMailleExistante(coordonnees) { |
var mailleTrouvee = null; |
coucheSites.eachLayer(function(layer) { |
if ('typeSite' in layer && layer.typeSite == 'MAILLE') { |
if (sontMaillesIdentiques(coordonnees, layer._latlngs)) { |
mailleTrouvee = layer; |
return; |
} |
} |
}); |
var marqueurDiv = new L.Marker(map.layerPointToLatLng(centreMaille), { |
icon : divIcon, |
maille : maille.getBounds() |
}); |
marqueurDiv.on('click', clicSurMaille); |
coucheSites.addLayer(marqueurDiv); |
return mailleTrouvee; |
} |
|
function calculerDecalagePositionnementNombre(nombrePoints) { |
var recul = 0; |
if (nombrePoints >= 10000) { |
recul = 14; |
} else if (nombrePoints >= 1000) { |
recul = 9; |
} else if (nombrePoints >= 100) { |
recul = 5; |
function sontMaillesIdentiques(coordonnees1, coordonnees2) { |
return ( |
coordonnees1[0].lat == coordonnees2[0].lat && |
coordonnees1[0].lng == coordonnees2[0].lng && |
coordonnees1[2].lat == coordonnees2[2].lat && |
coordonnees1[2].lng == coordonnees2[2].lng |
); |
} |
return recul; |
|
function ajouterMaille(feature) { |
var coordonnees = []; |
for (var i = 0; i < feature.geometry.coordinates.length; i++) { |
var sommet = new L.LatLng(feature.geometry.coordinates[i][0], feature.geometry.coordinates[i][1]); |
coordonnees.push(sommet); |
} |
var maille = new L.Polygon(coordonnees); |
maille.setStyle(optionsMaille); |
maille.typeSite = feature.properties.typeSite; |
maille.nombrePoints = new Object(); |
var nombreAAjouter = feature.properties.nombrePoints == null ? 0 : parseInt(feature.properties.nombrePoints); |
maille.nombrePoints[feature.properties.source] = nombreAAjouter; |
coucheSites.addLayer(maille); |
colorerMaille(maille); |
} |
|
function clicSurMaille(event) { |
if (event.target._zIndex != null) { |
map.fitBounds(event.target.options.maille) |
function mettreAJourMaille(maille, feature) { |
var nombreAAjouter = feature.properties.nombrePoints == null ? 0 : parseInt(feature.properties.nombrePoints); |
/*if (typeof(maille.nombrePoints[feature.properties.source]) == 'undefined') { |
maille.nombrePoints[feature.properties.source] = nombreAAjouter; |
} else { |
map.fitBounds(event.target.getBounds()); |
maille.nombrePoints[feature.properties.source] += nombreAAjouter; |
}*/ |
maille.nombrePoints[feature.properties.source] = nombreAAjouter; |
colorerMaille(maille); |
} |
|
function regenererInfobulleMailles() { |
$('.leaflet-clickable').addClass('tooltip'); |
coucheSites.eachLayer(function(layer) { |
if (layer.typeSite == 'MAILLE') { |
genererInfobulle(layer); |
} |
}); |
} |
|
// generer la couleur a afficher pour les mailles |
function getColor(nombrePoints) { |
function colorerMaille(maille) { |
var nombrePoints = 0; |
for (sourceMaille in maille.nombrePoints) { |
nombrePoints += maille.nombrePoints[sourceMaille]; |
} |
if (nombrePoints > 0) { |
maille.on('click', surClicMaille); |
maille.setStyle({fillColor : genererCouleur(nombrePoints), fillOpacity: 0.45, opacity: 0.7}); |
} else { |
maille.setStyle({fillOpacity: 0, opacity: 0}); |
maille.off('click', surClicMaille); |
} |
} |
|
function surClicMaille(event) { |
map.fitBounds(event.layer.getBounds()); |
} |
|
function genererCouleur(nombrePoints) { |
var couleur = {'bleu': 231, 'vert': 224, 'rouge': 64}, |
seuils = [1, 10, 50 ,100, 500, 1000, 2500], |
pas = 26, |
400,41 → 620,10 |
} |
couleur.vert -= position*pas; |
return 'rgb('+couleur.bleu+','+couleur.vert+','+couleur.rouge+')'; |
|
/*var codeHexa = 'rgb(231,224,64)'; |
if (nombrePoints >= 2500) { |
codeHexa = 'rgb(231,68,64)'; |
} else if (nombrePoints >= 1000) { |
codeHexa = 'rgb(231,94,64)'; |
} else if (nombrePoints >= 500) { |
codeHexa = 'rgb(231,120,64)'; |
} else if (nombrePoints >= 100) { |
codeHexa = 'rgb(231,146,64)'; |
} else if (nombrePoints >= 50) { |
codeHexa = 'rgb(231,172,64)'; |
} else if (nombrePoints >= 10) { |
codeHexa = 'rgb(231,198,64)'; |
} |
return codeHexa;*/ |
} |
|
|
function ajouterPoint(feature) { |
var iconePoint = new L.Icon({ iconUrl : pointImageUrl, iconSize : [16, 16] }), |
iconeCommune = new L.Icon({ iconUrl : communeImageUrl, iconSize : [24, 32] }), |
icone = (feature.properties.typeSite == 'STATION') ? iconePoint : iconeCommune, |
point = new L.LatLng(feature.geometry.coordinates[0], feature.geometry.coordinates[1]), |
marker = new L.Marker(point, { |
icon : icone, |
type : feature.properties.typeSite, |
title : feature.properties.nom |
}).addTo(map); |
marker.on('click', surClicMarqueur); |
coucheSites.addLayer(marker); |
} |
|
|
function afficherLegende() { |
if (legende == null) { |
legende = new L.Control({position : 'bottomright'}); |
legende.onAdd = function(map) { |
return construireContenuHtmlLegende(); |
441,6 → 630,7 |
}; |
map.addControl(legende); |
} |
} |
|
function construireContenuHtmlLegende() { |
var div = L.DomUtil.create('div', 'info'); |
450,7 → 640,7 |
for (var i = 0; i < seuils.length; i ++) { |
div.innerHTML += |
'<div class="legend">'+ |
'<span style="background:' + getColor(seuils[i] + 1) + '"></span>'+ |
'<span style="background:' + genererCouleur(seuils[i] + 1) + '"></span>'+ |
seuils[i]+ (i + 1 < seuils.length ? '–' + seuils[i + 1] : '+')+ |
'</div>'; |
} |
458,12 → 648,156 |
} |
|
function masquerLegende() { |
if (legende != null) { |
map.removeControl(legende); |
legende = null; |
} |
} |
|
function supprimerSourceDansMaille(maille, sourceSuppression) { |
if (typeof(maille.nombrePoints[sourceSuppression]) != 'undefined') { |
maille.nombrePoints[sourceSuppression] = 0; |
colorerMaille(maille); |
genererInfobulle(maille); |
} |
} |
|
function genererInfobulle(maille) { |
var nombrePoints = 0, |
nombreSources = 0; |
contenuTexte = ''; |
for (sourceMaille in maille.nombrePoints) { |
nombrePoints = maille.nombrePoints[sourceMaille]; |
if (nombrePoints > 0) { |
contenuTexte += (contenuTexte.length==0 ?'' : '\n')+ |
sourceMaille+' : '+maille.nombrePoints[sourceMaille]; |
} |
nombreSources ++; |
} |
if (nombreSources > 0) { |
$(maille._path).addClass('tooltip'); |
$(maille._path).attr('title',contenuTexte); |
} |
} |
|
|
|
|
// ==================================================================== |
// Gestion des marqueurs |
|
function ajouterPoint(feature) { |
var iconePoint = new L.Icon({ iconUrl : pointImageUrl, iconSize : [16, 16] }), |
iconeCommune = new L.Icon({ iconUrl : communeImageUrl, iconSize : [24, 32] }), |
icone = (feature.properties.typeSite == 'STATION') ? iconePoint : iconeCommune, |
point = new L.LatLng(feature.geometry.coordinates[0], feature.geometry.coordinates[1]), |
marker = new L.Marker(point, { |
icon : icone, |
title : feature.properties.nom |
}) |
marker.typeSite = feature.properties.typeSite; |
marker.source = feature.properties.source; |
marker.on('click', surClicMarqueur); |
points.push(marker); |
if (formeDonnees != 'maille') { |
coucheSites.addLayer(marker); |
} else { |
ajouterPointDansMaille(marker); |
} |
} |
|
function ajouterPointDansMaille(point) { |
var maille = null; |
coucheSites.eachLayer(function(layer) { |
if (layer.typeSite == 'MAILLE' && layer.getBounds().contains(point.getLatLng())) { |
maille = layer; |
return; |
} |
}); |
if (typeof(maille.nombrePoints[point.source]) == 'undefined') { |
maille.nombrePoints[point.source] = 1; |
} else { |
maille.nombrePoints[point.source] += 1; |
} |
colorerMaille(maille); |
} |
|
function combinerMaillesEtPoints() { |
enleverMarqueursCarte(); |
coucheSites.eachLayer(function(layer) { |
if (layer.typeSite == 'MAILLE') { |
var nombrePoints = compterNombrePointsDansMaille(layer); |
ajouterNombrePointsDansMaille(layer, nombrePoints); |
} |
}); |
} |
|
function determinerNombreMarqueurs(source) { |
var nombrePoints = 0; |
for (var index = 0; index < points.length; index ++) { |
if (points[index].source == source) { |
nombrePoints += 1; |
} |
} |
return nombrePoints; |
} |
|
function enleverMarqueursCarte() { |
coucheSites.eachLayer(function(layer) { |
if (layer.typeSite != 'MAILLE') { |
coucheSites.removeLayer(layer); |
} |
}); |
} |
|
function compterNombrePointsDansMaille(maille) { |
var nombrePoints = {}; |
for (var index = 0; index < points.length; index ++) { |
if (maille.getBounds().contains(points[index].getLatLng())) { |
var source = points[index].source; |
if (typeof(nombrePoints[source]) == 'undefined') { |
nombrePoints[source] = 1; |
} else { |
nombrePoints[source] += 1; |
} |
} |
} |
return nombrePoints; |
} |
|
function ajouterNombrePointsDansMaille(maille, nombrePoints) { |
for (sourceDonnees in nombrePoints) { |
if (typeof(maille.nombrePoints[sourceDonnees]) == 'undefined') { |
maille.nombrePoints[sourceDonnees] = nombrePoints[sourceDonnees]; |
} else { |
maille.nombrePoints[sourceDonnees] += nombrePoints[sourceDonnees]; |
} |
} |
colorerMaille(maille); |
} |
|
function supprimerPointsListe(sourceDonnees) { |
var index = 0; |
while (index < points.length) { |
if (points[index].source == sourceDonnees) { |
points.splice(index, 1); |
} else { |
index ++; |
} |
} |
} |
|
function transformerMaillesEnPoints(sourceDonnees) { |
coucheSites.eachLayer(function(layer) { |
if (layer.typeSite == 'MAILLE' && typeof(layer.nombrePoints[sourceDonnees]) != 'undefined') { |
supprimerSourceDansMaille(layer, sourceDonnees); |
} |
}); |
for (var index = 0; index < points.length; index ++) { |
coucheSites.addLayer(points[index]); |
} |
} |
|
function surClicMarqueur(event) { |
var latitude = event.target.getLatLng().lat; |
var longitude = event.target.getLatLng().lng; |
470,12 → 804,17 |
pointClique = event.target; |
afficherMessageChargement('observations'); |
var parametres = { |
"source" : source, |
"num_taxon" : num_taxon, |
"source" : pointClique.source, |
"num_taxon" : numTaxon, |
"referentiel" : referentiel, |
"auteur" : auteur, |
"nn" : nn, |
"type_site" : pointClique.typeSite, |
"date_debut" : dateDebut, |
"date_fin" : dateFin, |
"longitude" : longitude, |
"latitude" : latitude |
"latitude" : latitude, |
"nb_jours" : nbJours |
}; |
url = urlBase + "observations?" + convertirEnParametresUrl(parametres); |
fonctionCallback = traiterDonneesObservations; |
485,11 → 824,11 |
function traiterDonneesObservations() { |
masquerMessageChargement(); |
var texte = requeteChargementPoints.responseText; |
if (!retourRequeteOK()) { |
if (!estStatutRequeteOK()) { |
alert(texte); |
} else { |
|
obsJSON = eval("(function(){return " + texte + ";})()"); |
if (obsJSON != null) { |
viderListeObservations(); |
if (obsJSON.total > 0) { |
doitRafraichirCarte = false; |
500,6 → 839,7 |
} |
} |
} |
} |
|
function viderListeObservations() { |
obsStation = new Array(); |
506,6 → 846,8 |
} |
|
|
|
|
// ==================================================================== |
// Gestion de l'infobulle |
|
550,7 → 892,7 |
} |
|
function masquerInfoBulle() { |
if (map.hasLayer(infoBulle) && infoBulle != null) { |
if (infoBulle != null && map.hasLayer(infoBulle)) { |
map.removeLayer(infoBulle); |
} |
infoBulle = null; |
581,7 → 923,6 |
obsStation.push(obsJSON.observations[index]); |
} |
} |
// ajouter les observations dans le code HTML |
var obsPage = []; |
for (var index = 0; index < obsStation.length; index ++) { |
obsPage.push(obsStation[index]); |
619,12 → 960,10 |
} |
|
function ajouterTableauTriable(element) { |
// add parser through the tablesorter addParser method |
$.tablesorter.addParser({ |
// Définition d'un id unique pour ce parsseur |
id: 'date_cel', |
is: function(s) { |
// doit retourner false si le parsseur n'est pas autodétecté |
// doit retourner false si le parseur n'est pas autodétecté |
return /^\s*\d{2}[\/-]\d{2}[\/-]\d{4}\s*$/.test(s); |
}, |
format: function(date) { |
633,7 → 972,6 |
// Remplace la date par un nombre de millisecondes pour trier numériquement |
return $.tablesorter.formatFloat(new Date(date).getTime()); |
}, |
// set type, either numeric or text |
type: 'numeric' |
}); |
$(element).tablesorter({ |
652,6 → 990,6 |
function afficherTexteStationId() { |
var latitude = pointClique.getLatLng().lat; |
var longitude = pointClique.getLatLng().lng; |
var texteStationId = pointClique.options.type + ':' + latitude + '|' + longitude; |
var texteStationId = pointClique.typeSite+':'+latitude+'|'+longitude+', SOURCE:'+pointClique.source; |
$('#obs-station-id').text(texteStationId); |
} |