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>