Lier fonction moyenne et fonction représentant cette moyenne
Bonjour à tous,
Voici la fin de mon problème (voir ma précédente discussion) avec ma fonction moyenne de production de parcelles.
La production d'une parcelle par rapport à la moyenne de parcelles doit apparaître d'une couleur différente selon son résultat:
si parcelle 1 a sa production < à la moyenne des productions, elle est en rouge,
si parcelle 1 a sa production > à la moyenne des productions, elle est en vert.
Le tout doit fonctionner quand je clique sur une parcelle. Donc après les 2 fonctions, je les appelle dans la fonction reagirAuClic:
Code:
1 2 3
| function reagirAuClic(evt) {
moyProd();
styleFunction(feature, resolution);} |
Un problème de variable non déclarée? Ou manque t-il une variable?
code de ma fonction
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| function moyProd(){
var calendrier...//ici j'ai créé un calendrier
if(nbrCount){
var listeValeurProd = new Array(calendrier.length);//valeur Y pour chaque jour
for(var p = 0; p<nbParcelles;p++)
{
var idParcelle = geojson_OGRGeoJSON.features[p]["properties"]["id"]; //info id de la parcelle
var courbeProd = new Array(listeNomParametre.length); //tableau des param sigmo
var cumulProdParcelle =-1; //variable Total production pour une parcelle
var nbrCount = 0;
//Get Valeurs de la courbe depuis GeoJson
for(var nomDuParametre=0; nomDuParametre < listeNomParametre.length; nomDuParametre++){
var Param = [listeNomParametre[nomDuParametre];
var testVal =geojson_OGRGeoJSON.features[p]["properties"][preParam];
if(testVal!= null || isNaN(testVal)!=false){
courbeProd[listeNomParametre[nomDuParametre]]=parseFloat(testVal);
}
}
listeValeurProd =courbe(calendrier, courbeProd); //il ne faut pas que la prod soit NaN
cumulProdParcelle = SommeValeurs(listeValeurProd,calendrier); //cumul de la production pour une parcelle
try {
var x = cumulProdParcelle;
if(x == "") throw "empty";
if(isNaN(x)) throw "not a number";
x = Number(x);
resCumulTotal = resCumulTotal + cumulProdParcelle;
nbrCount += 1;
}
catch(err) {
console.log("Input is " + err );
}
}
return resCumulTotal / nbrCount; // cumul total des productions de toutes les parcelles/ nombre de parcelles concernées
}
else{
return null;
}
} |
le code affichage couleur parcelles
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| // style par defaut
var defaultStyle = new ol.style.Style({
fill: new ol.style.Fill({
color: [250,250,250,1]
}),
stroke: new ol.style.Stroke({
color: [220,220,220,1],
width: 1
})
});
// permet de mettre les styles en cache pour améliorer le temps d'affichage
var styleCache = {};
var cumulProdParcellefaible= cumulProdParcelle<(resCumulTotal / nbrCount);
var cumulProdParcellefort= cumulProdParcelle>(resCumulTotal / nbrCount);
/* fonction qui va gérer les couleurs de chaque parcelle en fonction du rapport production de la parcelle et moyenne production de toutes les parcelles*/
function styleFunction(feature, resolution) {
// recupere l'info du polygone
var id = feature.get('s.id');
var couleurMoyCumul='#39F600'; // couleur pour la moyenne du cumul
if(id== cumulParcelleGaifaible){
couleurMoyCumul='#00DDF6'; // couleur si cumul Prod parcelle supérieur à la moyenne production de toutes les parcelles
}
if(id== cumulProdParcellefort){ // couleur si GAI parcelle inférieur à la moyenne production de toutes les parcelles
couleurMoyCumul='#F600DD';
}
console.log(id== cumulProdParcellefaible);
// si le style n'est pas encore en cache dans le tableau styleCache
if (!styleCache[id]) {
//on cree le style
styleCache[id] = new ol.style.Style({
fill: new ol.style.Fill({
color: couleurMoyCumul // on lui met la couleur correspondante dans le tableau
}),
stroke: new ol.style.Stroke({
color: [120,120,120,1],
width: 2
})
});
}
// a ce stade le style de la couche courante est en cache
// so return it (comme un tableau!)
return [styleCache[id]];
} |