IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Eviter de comptabiliser des données (d'un Geojson) en faisant une moyenne


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Responsable des études
    Inscrit en
    Septembre 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Septembre 2016
    Messages : 23
    Par défaut Eviter de comptabiliser des données (d'un Geojson) en faisant une moyenne
    Bonjour à tous!

    J'ai créé une fonction pour calculer la moyenne de production de plusieurs parcelles
    Il y a cependant une erreur: en effet pour chaque parcelle j'obtiens bien un cumul de production selon le calendrier que j'ai défini. Puis je fais la somme de ces cumuls et le divise par le nombre de parcelles concernées. Mais lorsqu'une parcelle n'a pas d'informations sur sa production (dans le geojson les paramètres de la courbe de production affichent NULL ou NaN), la fonction prend tout de même en compte cette parcelle: Pour 30 parcelles analysées, 28 produisent 200 tonnes de blé mais la moyenne divisent 200 tonnes par 30...ce qui n'est pas logique.
    Faut-il intégrer une fonction qui lit les lignes du GeoJson mais évite de récupérer les infos si c'est NULL? Si oui est-ce que cela évitera que la parcelle ne soit comptabilisée?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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(nbParcelles>0){
            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
            //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;
                        }
                        catch(err) {
                            console.log("Input is " + err );
                        }
            }
            return resCumulTotal / nbParcelles;  // cumul total des productions de toutes les parcelles/ nombre de parcelles concernées
        }
        else{
            return null;
        }

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 202
    Par défaut
    Bonjour,
    question de logique, quand tu écris return resCumulTotal / nbParcelles, tu ne tiens pas compte du fait que la parcelle soit prise ou non en compte.

    Le plus simple est de gérer un compteur de parcelles prises en compte, tu initialises une variable à 0 avant ta boucle
    à chaque prise en compte tu l'incrémentes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    resCumulTotal = resCumulTotal + cumulProdParcelle;
    nbrCount += 1;
    et tu t'en sert dans ton calcul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (nbrCount) {
        return resCumulTotal / nbrCount; // cumul total des productions de toutes les parcelles/ nombre de parcelles concernées
    }

  3. #3
    Membre averti
    Homme Profil pro
    Responsable des études
    Inscrit en
    Septembre 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Septembre 2016
    Messages : 23
    Par défaut
    Bonjour

    Merci NoSmoking!! Je me doutais qu'il manquait quelque chose mais je partais dans une logique inverse: j'essayais de limiter les parcelles concernées. Raisonnement bizarre je le concède.
    Le problème étant en deux parties, je mets la deuxième question dans une autre discussion.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Eviter la copie des données avec la mise en forme
    Par mandrake57 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2011, 18h56
  2. Réponses: 2
    Dernier message: 07/07/2010, 17h19
  3. Comptabiliser des données dans des intervalles
    Par ithurts dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/05/2010, 22h18
  4. Réponses: 9
    Dernier message: 03/11/2006, 10h30
  5. Réponses: 3
    Dernier message: 13/12/2004, 13h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo