Demande info pour le compte dédié

oui dans le widget on voit bien la distance mais tu n’as pas de commande info dispo pour la distance , tu ne peux entrer que les coordonnées dans commande info donc j’ai fais un code pour faire le calcul et le récupérer pour faire les scénarios :slight_smile: j’aurai bien aimé avoir cette commande dispo dans jeeloc :slight_smile:

Je veux bien une capture d’écran car je pense que l’on ne se comprend pas.
Dans les commandes de l’équipement Global tu as toutes les distances calculées.

voila ce que j’ai

Ok, normalement tu as un autre équipement qui est créé à l’installation du plugin qui s’appelle Global et qui lui a les distances entre tous les équipements

ah merde je l’ai supprimé car je pensais que ça foutait la merde ^^ comme je l’avais installé y’a un moment et que je l’avais mis de coté , je pensais que c’était moi qui l’avais créé, comment faire pour le retrouver ?

essaies de désactiver / activer le plugin ou le réinstaller :confused:

ok il est revenu mais je n’ai que le rafraîchir comme au tout début avant que l’équipement geoloc se crée tout seul

A la prochaine MAJ de coordonnées, les distances devraient se créer. Ou alors enregistre un des équipements

Salut,
je me permets puisque c’est parti sur les distance ds gls.

J’avais pas fait gaffe qu’il y avait les distances ds « globale » non plus, mais j’ai eu qu’un équipement pdt longtemps.

j’ai un calcul basé sur la la formule de haversine, à partir des longitudes et latitude, que je pousse ds un virtuel.
La distance calculée correspond a celle trouvé sur google map, mais ds le plugin c’est un peu au fraise.

Typiquement, mon calcul me donne à 7,32km entre les 2 points, google map me donne 7,31, mais ds le global la commande me retourne 10.04.

Pourtant qd je regarde le code de /plugins/gsl/core/class/gsl.class.php, la fonction function distance est bien la formule de haversine.

Du coup on sait comment est calculé cette distance, l’appel à la fonction?

Salut,

As tu un exemple avec 2 coordonnées ?
J’ai du mal à voir pourquoi le résultat serait différence avec la même formule ! :confused:

non toujours rien , quand j’affiche le global , il m’affiche la même carte que l’équipement qui s’est créé en revanche le faite que le global soit revenu le panel ne fait plus d’erreur, sinon tanpi avec mon bloc code ça fonctionne quand même :slight_smile:
j’ai récupéré le code sur le forum que j’ai a peine modifié

# Calcul de la distance entre 2 coordonnées GPS

# Recupère la chaine de caractère "lat,long" mettre l'id de la commande des coordonnées
$cmd = cmd::byId(3937);
$LocalisationGpsPhone = $cmd->execCmd();

# Recupère la chaine de caractère "lat,long" de la maison mettre l'id de la commande des coordonnées
$cmd = cmd::byId(1855);
$LocalisationGpsHome = $cmd->execCmd();

# Isole les Latitudes et longitude dans les chaines de caractères et récupère les valeures numériques
$PosCommaPhone = stripos ($LocalisationGpsPhone, ',');
$LatPhone = substr ($LocalisationGpsPhone,0,9);
$LongPhone = substr ($LocalisationGpsPhone,$PosCommaPhone+1,8);
$PosCommaHome = stripos ($LocalisationGpsHome, ',');
$LatHome = substr ($LocalisationGpsHome,0,9);
$LongHome = substr ($LocalisationGpsHome,$PosCommaHome+1,8);

$ValLongPhone = (float)$LongPhone;
$ValLatPhone = (float)$LatPhone;
$ValLongHome = (float)$LongHome;
$ValLatHome = (float)$LatHome;
$ValEarthRadius=6371000;

# calcule la distance entre les 2 coordonnées GPS
$DistY = $ValEarthRadius * pi() * ( $ValLatPhone - $ValLatHome ) / 180;
$DistX = $ValEarthRadius * cos($ValEarthRadius*pi()*($ValLatPhone+$ValLatHome)/(2*180)) * pi()*($ValLongPhone-$ValLongHome)/180;
$Dist = round (0.1 * sqrt ($DistX*$DistX + $DistY*$DistY)) * 0.01;

# Place dans la variable Jeedom la distance à la bonne place , créer un virtuel avec la commande info numerique
$cmdC = "#[Aucun][virt test distance][distance]#";
$cmd = cmd::byString($cmdC);
$cmd->event(((string)$Dist));

et voila une commande distance créé :slight_smile:

Ok, as tu créé un point fixe dans le plugin ?
Car si il n’y a qu’un seul équipement, il n’y aura pas de calcul de distances.

Je crois qu’il y a une inversion entre latitude et longitude. je vais faire une bonne vérif et ouvrir un autre sujet au besoin.

[note edit exemple illisible , je reviendrait avec mieux]

Nickel, Merci :slight_smile:

La différence avec ton exemple c’est le rayon de la terre 6378.137 pour le plugin et 6371 dans ton lien.

Oui, mais mineur (vu le coef multiplicateur), par contre en inversant longitude et latitude, je retombe sur la différence a peu de chose près.

Pour info, un correctif vient d’être fait sur le calcul des distances.

J’ai refait un code car j’avais un gros écart

// renvoi la distance en kilomètres entre salomé et la maison
   
  # Recupère la chaine de caractère "lat,long" de google salomé
$cmd = cmd::byId(3937);
$LocalisationGpsPhone = $cmd->execCmd();

# Recupère la chaine de caractère "lat,long" de la maison
$cmd = cmd::byId(1855);
$LocalisationGpsHome = $cmd->execCmd();

# Isole les Latitudes et longitude dans les chaines de caractères et récupère les valeurs numériques
$PosCommaPhone = stripos ($LocalisationGpsPhone, ',');
$LatPhone = substr ($LocalisationGpsPhone,0,9);
$LongPhone = substr ($LocalisationGpsPhone,$PosCommaPhone+1,8);
$PosCommaHome = stripos ($LocalisationGpsHome, ',');
$LatHome = substr ($LocalisationGpsHome,0,9);
$LongHome = substr ($LocalisationGpsHome,$PosCommaHome+1,8);

$lng1 = (float)$LongPhone;
$lat1 = (float)$LatPhone;
$lng2 = (float)$LongHome;
$lat2 = (float)$LatHome;

  
      $earth_radius = 6378137;   // Terre = sphère de 6378km de rayon
      $rlo1 = deg2rad($lng1);
      $rla1 = deg2rad($lat1);
      $rlo2 = deg2rad($lng2);
      $rla2 = deg2rad($lat2);
      $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));
      $dist = ($earth_radius * $d)/1000;
    
  $scenario->setData('distance_S',$dist);

ce coup ci je l’envoie dans une variable mais après on peut aussi l’envoyer direct dans un virtuel comme dans le premier code