[PHP] Quelle API pour utiliser les données de localisation ?

Quelle API pour utiliser les données de localisation ? [PHP] - PHP - Programmation

Marsh Posté le 16-03-2014 à 07:44:43    

Bonjour,
 
J'aimerais comprendre comment utiliser les données de localisation d'un visiteur (sur un PC ou un smartphone) pour calculer la distance entre lui et une adresse donnée. L'API Google Maps a l'air puissante mais je ne suis pas certain qu'elle fasse réellement ce que je cherche.  
 
Dans l'idéal, je devrais être capable d'entrer dans la BD une adresse, et qu'elle soit traduite (je suppose) en latitude et longitude ? Je pensais trouver ça rapidement mais bizaremment, je peine. L'inverse semble plus simple avec l'API Google Maps : http://fr.openclassrooms.com/infor [...] oogle-maps où on voit que selon une latitude et une longitude, l'adresse est trouvée.  
 
Et dans le même principe, sous quelle forme devrais-je stocker l'adresse dans la BD, y a-t-il une syntaxe précise et un ordre à respecter (pays - zip code - ville - rue - numéro ou autre) ?  
 
Last but not least, la géolocalisation d'une IP dynamique est-elle plus ou moins fiable ? J'ai l'impression que dans mon cas, ça me localise souvent dans ma région mais à 20-25km de distance quand même.
 
Merci pour vos infos !  
 
Bonne journée  [:dawa]


---------------
SHOOT ME AGAIN WEBZINE
Reply

Marsh Posté le 16-03-2014 à 07:44:43   

Reply

Marsh Posté le 19-03-2014 à 10:45:17    

[:moule_bite]

Reply

Marsh Posté le 19-03-2014 à 23:31:55    

Dawa a écrit :

Je pensais trouver ça rapidement mais bizaremment, je peine. L'inverse semble plus simple avec l'API Google Maps : http://fr.openclassrooms.com/infor [...] oogle-maps où on voit que selon une latitude et une longitude, l'adresse est trouvée. [:dawa]


 
Si tu veux utiliser l'API google maps, il vaut mieux consulter la documentation officielle qui liste toutes les fonctionnalités et options de l'API : https://developers.google.com/maps/ [...] ing/?hl=fr
(il y a notamment des options pour délimiter la recherche)
Ca marche plutôt bien pour les villes. Mais pour trouver une rue c'est comme sur Google maps, il vaut mieux avoir l'adresse complète et précise sans fautes d'orthographe, sachant que les villes ont pleins de noms de rue en commun.
 

Dawa a écrit :

Et dans le même principe, sous quelle forme devrais-je stocker l'adresse dans la BD, y a-t-il une syntaxe précise et un ordre à respecter (pays - zip code - ville - rue - numéro ou autre) ?


 
Ca dépend de ta/tes base(s) de donnée(s) : type de base données, priorité lecture ou écriture, degré de (dé)normalisation, arborescence etc.
Le principal c'est d'avoir toujours toutes les données d'origine à disposition. Si Google Maps ferme l'accès à son API, il ne faut pas en être dépendant.
 

Dawa a écrit :

Last but not least, la géolocalisation d'une IP dynamique est-elle plus ou moins fiable ? J'ai l'impression que dans mon cas, ça me localise souvent dans ma région mais à 20-25km de distance quand même.
 


 
Même une IP statique n'est pas géographiquement précise. La précision géographique d'une IP c'est le pays. La base qui contient les informations concernant les IP doit être régulièrement mise à jour, ces informations périment extrêmement vite.
Le seul truc à peu près fiable automatiquement récupérable, c'est la localisation géographique dans le navigateur d'un smartphone : http://www.w3schools.com/html/html5_geolocation.asp


Message édité par czh le 19-03-2014 à 23:45:02
Reply

Marsh Posté le 24-03-2014 à 13:00:54    

Cool je vais me pencher là-dessus !  
 
Merci ! :)

Reply

Marsh Posté le 30-03-2014 à 21:50:46    

Bonjour !
 
Question sans doute un peu naze mais bon :  
 
En rentrant l'adresse dans le truc json de l'API Google Maps, comme ceci :  
 
https://maps.googleapis.com/maps/ap [...] ey=API_KEY
 
On obtient ceci :  
 

Code :
  1. {
  2.   "status": "OK",
  3.   "results": [ {
  4.     "types": [ "locality", "political" ],
  5.     "formatted_address": "Winnetka, IL, USA",
  6.     "address_components": [ {
  7.       "long_name": "Winnetka",
  8.       "short_name": "Winnetka",
  9.       "types": [ "locality", "political" ]
  10.     }, {
  11.       "long_name": "Illinois",
  12.       "short_name": "IL",
  13.       "types": [ "administrative_area_level_1", "political" ]
  14.     }, {
  15.       "long_name": "United States",
  16.       "short_name": "US",
  17.       "types": [ "country", "political" ]
  18.     } ],
  19.     "geometry": {
  20.       "location": {
  21.         "lat": 42.1083080,
  22.         "lng": -87.7417070
  23.       },
  24.       "location_type": "APPROXIMATE",
  25.       "viewport": {
  26.         "southwest": {
  27.           "lat": 42.0917501,
  28.           "lng": -87.7737218
  29.         },
  30.         "northeast": {
  31.           "lat": 42.1248616,
  32.           "lng": -87.7096922
  33.         }
  34.       },
  35.       "bounds": {
  36.         "southwest": {
  37.           "lat": 42.0885320,
  38.           "lng": -87.7715480
  39.         },
  40.         "northeast": {
  41.           "lat": 42.1284090,
  42.           "lng": -87.7110160
  43.         }
  44.       }
  45.     }
  46.   } ]
  47. }


 
Mais comment puis-je en extraire seulement une ou deux valeurs, dans mon cas la latitude et longitude exacte ?  
 
Merci !


---------------
SHOOT ME AGAIN WEBZINE
Reply

Marsh Posté le 31-03-2014 à 13:00:57    

Je fais pas de PHP, mais a vue de nez c'est $obj = json_decode ( $json, true ) puis recuperer $obj->{'results'}[0]->{'geometry'}{'location'}{'lat'} et $obj->{'results'}[0]->{'geometry'}{'location'}{'lng'} ou un truc du genre (ma notation serait celle utilisée en Perl, alors en PHP ça ne doit guère être différent).
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 31-03-2014 à 13:10:33    

Ouiiii ok, le résultat est une sorte de tableau multidimensionnel en quelque sorte... je vais tenter de cette façon alors, merci beaucoup !  [:dawa]


---------------
SHOOT ME AGAIN WEBZINE
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed