Bonjour à tous,

Voilà je suis entrain de faire un store locator sur wordpress avec google map mais ma question ne porte ni sur wordpress ni sur google map. Smiley biggol

Dans la doc google ici présente =>
https://developers.google.com/maps/solutions/store-locator/clothing-store-locator

La formule de google pour calculer une distance en km est la suivante :

6371 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) 


Formule de bourrin certe mais si on sait à quoi correspondent les variables il suffit de remplacer....
1ère difficulté

Ceci est une formule Mysql et moi je suis en php

Donc en php le 'radians' devient 'deg2rad'
Est ce que déjà quelqu'un pourrait me confirmer que je ne délire pas car déjà là j'ai un méchant doute?

Seconde chose :

J'ai les coordonnées de mon point de la localisation de mon store

$Lat_store = 33.756 
$long_store = 2.589


Ce sont des chiffres au hasard !

J'ai les coordonnées du point à partir du quel je définis mon rayon de recherche

$Lat_origine = 56.741236
$lng_origine = 7.75963
$rayon = 30 //Exprimer en km


Dans la formule ci-dessus :
Est-ce que le 37 et le -122 sont des constantes qui ne changent jamais ?
Les variables "lat" et "lng" sont-elles les variables de mon store ou bien les variables de mon origine ?

Pour ma part j'ai fait la formule ci-dessous mais les distances trouvées sont complètement délirantes

6371 * acos( cos( deg2rad(37) ) * cos( deg2rad( $Lat_store ) ) * cos( deg2rad( $long_store ) - deg2rad(-122) ) + sin( deg2rad(37) ) * sin( deg2rad( $Lat_store ) ) )


Vu que je fais tout en php avec un query_post pour avoir mes données je ne peux pas reprendre bêtement cette formule je dois l'adapter.

Sans être le mec le plus mauvais en math j'avoue que là je suis dépassé.

Si un matheu ou qqun qui a déjà fait pouvait m'éclairer j'avoue que ça m'aiderai bien

PS : Je n'utilise pas de plugin car j'ai un custom post type super génial dans le template installé que je souhaite continuer à utiliser
Modifié par Soxy95 (29 Jan 2018 - 17:51)
Salut...
Alors je l'ai déjà fait ça Smiley lol Ca don eune distance approximative et à vol d'oiseau.
C'était y a 8 ans Smiley smile je sais plus trop comment le faire... j'ai oublié et surtout pourquoi se faire chier puisque l'api googleMap te donne la distance entre deux adresses par la route... qui est donc bien plus réaliste Smiley smile

donc voici l'url à appeler


 http://maps.google.com/maps/api/directions/xml?language=fr&origin=1%20champs%20elysees%20paris&destination=1%20avenue%20foch%20paris&sensor=false
 


ça te retourne un xml Smiley smile

ton résultat en mètres est là : route->leg->distance->value
Modérateur
a écrit :
Est-ce que le 37 et le -122 sont des constantes qui ne changent jamais ?

Je pense qu'ils sont relatifs au point d'origine.
Pour calculer une distance, il faut deux points, si tu n'en introduits qu'un seul, c'est que le second est dans la formule.

Tu as tenté avec lat1 <> 37 et long1 <> -122 ?

p.s. : pourquoi pas faire cela en SQL, que tu sembles aussi utiliser? Oo
pchlj a écrit :
Salut...
Alors je l'ai déjà fait ça Smiley lol Ca don eune distance approximative et à vol d'oiseau.
C'était y a 8 ans Smiley smile je sais plus trop comment le faire... j'ai oublié et surtout pourquoi se faire chier puisque l'api googleMap te donne la distance entre deux adresses par la route... qui est donc bien plus réaliste Smiley smile

donc voici l'url à appeler


 http://maps.google.com/maps/api/directions/xml?language=fr&amp;origin=1%20champs%20elysees%20paris&amp;destination=1%20avenue%20foch%20paris&amp;sensor=false
 


ça te retourne un xml Smiley smile

ton résultat en mètres est là : route-&gt;leg-&gt;distance-&gt;value


Je ne suis ZE expert en performance web (je ne sais même pas si c'est le bon terme Smiley lol ) mais dans quelques temps je pense que la liste des stores risque d'être importante est-ce que cela ne va pas ralentir ?
Je m'explique : Là j'ai un superbe array sorti de ma bdd avec la lat et la long qui sont créés au moment ou l'internaute enregistre sont store, je ne fais donc que deux appels un pour trouver les coordonnées de mon point d'origine et un autre pour afficher la carte.
Mais en effet tu as raison ce serait d'une précision chirurgicale.

kustolovic a écrit :

Je pense qu'ils sont relatifs au point d'origine.
Pour calculer une distance, il faut deux points, si tu n'en introduits qu'un seul, c'est que le second est dans la formule.

Tu as tenté avec lat1 <> 37 et long1 <> -122 ?

Je crois que j'avais déjà essayer mais bon je vais retenter ça ne me coûtera pas plus cher.
Mais j'ai toujours un gros doute pour le 'deg2rad' à la place de 'radians'.
kustolovic a écrit :

p.s. : pourquoi pas faire cela en SQL, que tu sembles aussi utiliser? Oo

Comme dit au début de mon message c'est un wordpress, et je préfère utiliser les fonctions de wordpress déjà par soucis de simplicité pis je pense (là c'est pure supposition de ma part je te l'accorde) dans un soucis de performance.
Re Smiley smile
pour la performance, utiliser wordpress c'est déjà très mauvais Smiley lol même si très pratique il est connu que wordpress est ultra lent Smiley smile par rapport à du code dédié Smiley cligne
Si tu as peur de la perf tu peux, et c'est ce que j'ai fait, enregistrer tes distances au fur et à mesure de leur connaissance...
J'explique le principe.

1 tu a un store dont tu connais l'adresse.
2 tu a un client dont tu ne connais pas l'adresse.

3 il te faut une table en bdd avec l'adresse client, l'adresse du store, la distance récupérée.
cette table tu la nourris au fur et à mesure des recherches, mais avant de lancer la recherche tu vérifie dans la table si la distance n'est pas déjà calculée Smiley cligne
Niveau perf c'est efficace Smiley cligne

Pour l'intégration dans wordpress en revanche :s

Variante : tu peux peut être te contenter d'une distance ville à ville ? si tu es en dehors de la ville du store Smiley cligne ça limite le nombre d'adresses clients Smiley cligne
OK pour pour l'api google tu m'a convaincu on se penchera sur les perf un peu plus tard

Je récupère bien mon XML avec tout ce que je veux dedans... Par contre pour récupérer la valeur v'la la galère.

Voici les codes que j'ai tenté mais rien à faire

$central_point = $_GET["central"];
	$address_arrivee = 'marseille';
	$xml_way = 'http://maps.google.com/maps/api/directions/xml?language=fr&amp;origin='.$central_point.'&destination='.$address_arrivee.'&sensor=false';
	$xml_to_display =new SimpleXMLElement($xml_way);
	echo $xml_to_display->route[0]->leg[0]->distance[0]->value;

Ou bien

$central_point = $_GET["central"];
	$address_arrivee = 'marseille';
	$xml_way = 'http://maps.google.com/maps/api/directions/xml?language=fr&amp;origin='.$central_point.'&destination='.$address_arrivee.'&sensor=false';
	$xml_to_display =simplexml_load_string($xml_way);
	echo $xml_to_display->route[0]->leg[0]->distance[0]->value;


Si vous pouviez me donner un tit coup de main ce serait super parce que là je m'arrache les quelques cheveux qu'il me reste....
:)

pas de soucis comme tu as bien travaillé dans ton coin c'est avec plaisir que je te copie mon code qui fonctionne Smiley cligne


$url='http://maps.google.com/maps/api/directions/xml?language=fr&amp;origin='.$central_point.'&destination='.$address_arrivee.'&sensor=false';
	$root = simplexml_load_file($url);
	if(is_object($root)){
		if($root->status == "OK"){
			if((int)$root->route->leg->distance->value == 0){
				$distance = 1;
			}else{
				$distance=$root->route->leg->distance->value;
			}
		}else{
                  /// pose ici une exception de non réponse valide [cligne]
                }
       }else{
          /// pose ici une exception sur la réponse de l'api google
      }


tout les objets sont accessible directement pas besoin du [0]
Bon courage pour le reste
Je suis ridicule sur ce coup... Pourquoi ?

Dans l'adresse de l'api google je n'avais mis "&" mais "&amp;"

Je suis mon pire ennemi ça m'rend dingue l'laut' fois c'était l'oubli d'un foutu ";" apres ob_start() qui m'avait fait perdre une journée.

En tout cas un grand merci à toi