Plugin GLS / Calcul de distance entre les points - possible inversion latitude / longitude

Salut @kaktusatomik,

Je reviens pour mes histoires de longitude, latitude et formule de haversine en documentant un peu plus.

point A : pointe du RAZ : 48,039784 / -4,741226
point B Hyères : 42,998002 / 6,211262

pour moi au format lat / long

je met ces coordonnées dans des équipements gls en point fixe.

L’équipement global me donne la distance entre les deux : 1341.83 (km)

Google map me donne (mesure de la dist, approx) : 1016,12 (km)

Si j’applique la formule :


Phi = lat et Lambda = Longitude (et en corrigeant le rayon de la terre à 6378,137 :wink: )

j’arrive à une distance : 1020,64925 km

en inversant lat et long ds ce calcul j’arrive à 1341,826533 km

dans /plugins/gsl/core/class/gsl.class.php, la fonction :

 public static function distance($_a, $_b) {
        $a = explode(',', $_a);
        $b = explode(',', $_b);
        $earth_radius = 6378.137;
        $rlo1 = deg2rad($a[0]);
        $rla1 = deg2rad($a[1]);
        $rlo2 = deg2rad($b[0]);
        $rla2 = deg2rad($b[1]);
        $dlo = ($rlo2 - $rlo1) / 2;
        $dla = ($rla2 - $rla1) / 2;
        $a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo));
        $d = 2 * atan2(sqrt($a), sqrt(1 - $a));
        return round(($earth_radius * $d), 2);
    }

qui à priori est bien la formule de haversine.

je ne sais pas comment elle est appelé, mais dans le plugin les coordonnées sont stockées par latitude, longitude

si je ne me trompe pas, l’inversion est dans :

 $rlo1 = deg2rad($a[0]);
 $rla1 = deg2rad($a[1]);

qui devrait être inversé selon mon interprétation, l’index ‹ 0 › de l’explode doit être la latitude si on injecte dans la fonction les coordonnées telles que données dans les commandes des équipements du plugin.
(question bête/naive de j’apprends tjrs , pkoi ne pas utiliser list($rla1, $rlo1) = explode(",", $_a); y’a un défaut avec cette fonction ?)

A ta dispo si je ne suis pas super clair.

Une supposition : cette syntaxe n’existait pas précédemment. À vérifier quelle version de Php min est nécessaire

Ah bah oui carrément, j’ai sorti ça d’un recherche relativement récente sur split qui est déprécié (comme quoi je fait souvent du php!).

Bien vu @Bben, je corrige ça.
En fait la latitude et la longitude est inversée sur les deux coordonnées.

Merci :slight_smile:

pas de pb, c’est totalement par hasard!

si j’avais vu que le global donnais les distances, j’aurai accepter sans broncher celle qu’il donne.
content que ça puisse aider!

me reste plus qu’à trouver comment tasker peut désactiver/activer le partage de position.
Merci pour le plugin en tout cas!

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.