Obtenha latitude e longitude usando automaticamente php, API

Em uma das minhas aplicações php, tenho que descobrir a latitude e a longitude do local a partir do endereço.

Eu tentei este código:

$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'}; 

Mas está mostrando o seguinte erro:

Aviso: file_get_contents (http://maps.google.com/maps/api/geocode/json?address=technopark, Trivandrun, kerala, India & sensor = false & region = IND) [function.file-get-contents]: falha ao abrir stream : Falha na solicitação HTTP HTTP / 1.0 400 Pedido ruim em D: \ Projects \ lon.php na linha 4

Por favor, me ajude a resolver essa questão.

Use curl vez 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 "
"; echo $long = $response_a->results[0]->geometry->location->lng;
 $address = str_replace(" ", "+", $address); 

Use o código acima antes do file_get_content. significa usar o seguinte código

 $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'}; 

e isso irá certamente funcionar. Como o endereço não suporta espaços, ele aceita apenas + assinar no lugar do espaço.

 // adicione urlencode ao seu endereço
 $ address = urlencode ("technopark, Trivandrun, Kerala, Índia");
 $ 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 ($ decodificado);

Duas idéias:

  • O endereço eo URL da região são codificados ?
  • Talvez o seu computador que esteja executando o código não permita o access http. Tente carregar outra página (como ‘ http://www.google.com ‘) e veja se isso funciona. Se isso também não funcionar, então há algo errado nas configurações do PHP.
 $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'}; 

… e não esqueça “$ region” para que o código funcione:

 $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."".$long;