2011-12-26 2 views
23

Dans l'une de mes applications php, je dois trouver la latitude et la longitude de l'endroit de l'adresse.Obtenir la latitude et la longitude automatiquement en utilisant php, API

J'ai essayé ce code:

$json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); 
$json = json_decode($json); 

$lat = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lat'}; 
$long = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lng'}; 

Mais il montre l'erreur suivante:

Avertissement: file_get_contents (http://maps.google.com/maps/api/geocode/ json? address = technopark, Trivandrun, kerala, Inde & sensor = false & region = IND) [function.file-get-contents]: échec de l'ouverture du flux: requête HTTP échouée! HTTP/1.0 400 Mauvaise demande dans D: \ Projects \ lon.php sur la ligne 4

Aidez-moi à résoudre ce problème.

+3

S'il vous plaît [ne pas ajouter signatures ou slogans à vos messages] (http://stackoverflow.com/faq#signatures). – meagar

Répondre

39

Utilisation curl au lieu de file_get_contents:

$address = "India+Panchkula"; 
$url = "http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=India"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_PROXYPORT, 3128); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
$response = curl_exec($ch); 
curl_close($ch); 
$response_a = json_decode($response); 
echo $lat = $response_a->results[0]->geometry->location->lat; 
echo "<br />"; 
echo $long = $response_a->results[0]->geometry->location->lng; 
+1

Est-ce que quelqu'un connaît le but de spécifier CURLOPT_PROXYPORT 3128 ?? – sootsnoot

+0

Oups - dépassé la limite de 5 minutes sur l'édition de commentaires ... Je ne suis pas le moins du monde familier avec l'utilisation des proxies, mais de ma lecture sur le sujet, je m'attendrais à ce qu'il n'y ait pas de proxy * , alors le proxy * port * serait ignoré. Pourtant, la plupart des messages que je vois sur l'utilisation de curl pour accéder à Google Maps spécifie ce port sans serveur. S'agit-il simplement de copier-coller de la pollution ou y a-t-il un but? – sootsnoot

+0

Salut, je veux obtenir l'emplacement actuel en fonction de l'adresse IP. Y a-t-il un moyen d'obtenir ceci? – Tarzan

4

Deux idées:

  • sont Adresse et région URL Encoded? Peut-être que votre ordinateur exécutant le code n'autorise pas l'accès http. Essayez de charger une autre page (comme 'http://www.google.com') et voyez si cela fonctionne. Si cela ne fonctionne pas, il y a un problème avec les paramètres PHP.
8
 
//add urlencode to your address 
$address = urlencode("technopark, Trivandrun, kerala,India"); 
$region = "IND"; 
$json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); 

echo $json; 

$decoded = json_decode($json); 

print_r($decoded); 
+0

L'URL doit être 'http: //maps.google.com/maps/api/geocode/json?adresse= $ address & sensor = false & région = $ région' –

+0

@ThomasOrlita merci. Le problème était & reg changé à caractère différent, donc utilisé & région à la place –

+0

Oui, je voulais le réparer, mais vous avez rejeté l'édition ... –

37
$address = str_replace(" ", "+", $address); 

Utilisez le code ci-dessus avant la file_get_content. moyens, utilisez le code suivant

$address = str_replace(" ", "+", $address); 

$json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); 
$json = json_decode($json); 

$lat = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lat'}; 
$long = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lng'}; 

et cela fonctionnera sûrement. Comme l'adresse ne supporte pas les espaces, elle ne prend en charge que le signe + à la place de l'espace.

+5

Voir les fonctions intégrées de PHP: urlencode() et rawurlencode(); – ekerner

+0

Puis-je obtenir le code ** ZIP ** également à partir de ce code? – Manwal

+0

@Manwal Code postal de quoi ...? –

0

... et ne pas oublier "région $" pour que le code fonctionne:

$address = "Salzburg"; 
$address = str_replace(" ", "+", $address); 
$region = "Austria"; 

$json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); 
$json = json_decode($json); 

$lat = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lat'}; 
$long = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lng'}; 
echo $lat."</br>".$long; 
1
$address = str_replace(" ", "+", $address); 

$json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); 
$json = json_decode($json); 

$lat = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lat'}; 
$long = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lng'}; 
Questions connexes