Problème de calcul depuis un Array contenant des nombres

Pour toutes les discussions javascript, jQuery et autres frameworks
Répondre
Jpe54
Messages : 60
Enregistré le : 10 mars 2017, 14:11

Problème de calcul depuis un Array contenant des nombres

Message par Jpe54 » 06 sept. 2021, 18:11

Bonjour,

Je cherche à calculer le centre d'une série de coordonnées Gps Latitude / Longitude.

La routine de calcul me semble hors de cause...

Pourtant :
En partant d'un tableau existant (Liste_Archive) le calcul est correct.
En enrichissant un tableau vide (Archive) malgré un console.log identique du contenu, le calcul est faux !
Convertir en nombre chaque valeur lat, lng en ajoutant parseFloat() ne change rien.
De plus aucune visibilité dans console.log sur l'origine de ce dysfonctionnement...

Calcul du Centre d'un Array contenant des coordonnées GPS Latitude / longitude
Centre OK
Lecture Liste_Archive : 49.46999,6.23,48.9548,4.3615,44.59834,-1.20748
Resultat Liste_Archive : 47.71909124744269,2.9993119425042214
Centre NOK
Lecture Archive Dynamique : 49.46999,6.23,48.9548,4.3615,44.59834,-1.20748
Result Archive Dynamique : 4.002835368548708,7.000304779886219

J'avoue ne pas comprendre où ce trouve ma bévue :

Merci par avance de vos remarques ...

Amicalement,

Voici le code simplifié :

Code : Tout sélectionner

<!DOCTYPE html>
<html>
    <head>
        <title>Centre d'un array contenant des coordonnées GPS Latitude / longitude</title>
        <script>
            Liste_Archive = [
                [49.46999, 6.23],
                [48.9548, 4.3615],
                [44.59834, -1.20748],
            ];

            Archive = [];
/*
            lat1 = "49.469990";
            lng1 = "6.230000";
            lat2 = "48.954800";
            lng2 = "4.361500";
            lat3 = "44.598340";
            lng3 = "-1.207480";
*/
            lat1 = 49.46999;
            lng1 = 6.23;
            lat2 = 48.9548;
            lng2 = 4.3615;
            lat3 = 44.59834;
            lng3 = -1.20748;
          
            // Collecte via ce type de boucle for :
            Archive[0] = lat1 + "," + lng1;
            Archive[1] = lat2 + "," + lng2;
            Archive[2] = lat3 + "," + lng3;
			
			// =====================================================================================================================
            // Multiples routines "d'exemple" présentent ici dans différents language dont ce code javascript :
            // https://qastack.fr/programming/6671183/calculate-the-center-point-of-multiple-latitude-longitude-coordinate-pairs
			// =====================================================================================================================
            function GetCenterFromDegrees(data) {
                if (!(data.length > 0)) {
                    return false;
                }

                var num_coords = data.length;

                var X = 0.0;
                var Y = 0.0;
                var Z = 0.0;

                for (i = 0; i < data.length; i++) {
                    var lat = (data[i][0] * Math.PI) / 180;
                    var lon = (data[i][1] * Math.PI) / 180;

                    var a = Math.cos(lat) * Math.cos(lon);
                    var b = Math.cos(lat) * Math.sin(lon);
                    var c = Math.sin(lat);

                    X += a;
                    Y += b;
                    Z += c;
                }

                X /= num_coords;
                Y /= num_coords;
                Z /= num_coords;

                var lon = Math.atan2(Y, X);
                var hyp = Math.sqrt(X * X + Y * Y);
                var lat = Math.atan2(Z, hyp);

                var newX = (lat * 180) / Math.PI;
                var newY = (lon * 180) / Math.PI;

                return new Array(newX, newY);
            }
        </script>
    </head>
    <body>
        Calcul du Centre d'un Array contenant des coordonnées GPS Latitude / longitude
        <div>Centre OK</div>
        <div id="E1"></div>
        <div id="E2"></div>
        <div>Centre NOK</div>
        <div id="E3"></div>
        <div id="E4"></div>
        <script>
            document.getElementById("E1").innerHTML = "Lecture Liste_Archive       : " + Liste_Archive;
            document.getElementById("E2").innerHTML = "Resultat Liste_Archive     : " + GetCenterFromDegrees(Liste_Archive);
            document.getElementById("E3").innerHTML = "Lecture Archive Dynamique : " + Archive;
            document.getElementById("E4").innerHTML = "Result Archive Dynamique : " + GetCenterFromDegrees(Archive);
        </script>
    </body>
</html>

Avatar du membre
webmaster
Administrateur du site
Messages : 563
Enregistré le : 28 févr. 2017, 15:19

Re: Problème de calcul depuis un Array contenant des nombres

Message par webmaster » 06 sept. 2021, 21:45

Bonjour

A première vue les tableaux n'ont pas la même structure

Code : Tout sélectionner

Archive[0] = lat1 + "," + lng1
devrait plutot être un tableau :

Code : Tout sélectionner

Archive[0] = [lat1, lng1]
TJS : 25 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

Jpe54
Messages : 60
Enregistré le : 10 mars 2017, 14:11

Re: Problème de calcul depuis un Array contenant des nombres

Message par Jpe54 » 07 sept. 2021, 14:59

Bonjour,

Encore une fois un grand merci pour cette remarque. La technique des 4 yeux est plus prolifique !

Je suis resté focalisé sur le console.log...

Répondre