Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal,
Segui as dicas do seguinte link
Estou usando o Wamp para simular mas retorna em branco:
Meu codigo está como segue:
gmaps.php
<?php
error_reporting(E_ALL);
/**
* gMaps Class
*
* Pega as informações de latitude, longitude e zoom de um endereço usando a API do Google Maps
*
* @author Thiago Belem <contato@thiagobelem.net>
*/
class gMaps {
// Host do GoogleMaps
private $mapsHost = 'maps.google.com';
// Sua Google Maps API Key
public $mapsKey = 'AIzaSyCF7ppX72WajD4fBQ1JN9MsSa5f6lf_J-k';
function __construct($key = null) {
if (!is_null($key)) {
$this->mapsKey = $key;
}
}
function carregaUrl($url) {
if (function_exists('curl_init')) {
$cURL = curl_init($url);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, true);
$resultado = curl_exec($cURL);
curl_close($cURL);
} else {
$resultado = file_get_contents($url);
}
if (!$resultado) {
return false;
//trigger_error('Não foi possível carregar o endereço: <strong>' . $url . '</strong>');
} else {
return $resultado;
}
}
function geoLocal($endereco) {
$url = 'http://'. $this->mapsHost .'/maps/geo?output=csv&key='. $this->mapsKey .'&q='. urlencode($endereco);
$dados = $this->carregaUrl($url);
list($status, $zoom, $latitude, $longitude) = explode(',', $dados);
if ($status != 200) {
return false;
//trigger_error('Não foi possível carregar o endereço <strong>"'.$endereco.'"</strong>, código de resposta: ' . $status);
}
return array('lat' => $latitude, 'lon' => $longitude, 'zoom' => $zoom, 'endereco' => $endereco);
}
}
?>
index.php
<?php
error_reporting(E_ALL);
// Instancia a classe
include 'gmaps.php';
$gmaps = new gMaps('AIzaSyCF7ppX72WajD4fBQ1JN9MsSa5f6lf_J-k');
// Pega os dados (latitude, longitude e zoom) do endereço:
$endereco = 'Av Brasil 1453 Rio de Janeiro RJ';
$dados = $gmaps->geolocal($endereco);
// Exibe os dados encontrados:
print_r($dados);
?>Amiguinho utiliza a documentação oficial do Google Maps (JavaScript):
https://developers.google.com/maps/documentation/javascript/
Pra pegar sua lat/lng de acordo com o endereço informado, tenho um exemplo aqui, bem clean:
<?php
//Faz consulta no WebService do Google
// Rua Cláudio Soares, 72 - 1302 - Pinheiros, São Paulo - SP
$logr_end = 'Rua Cláudio Soares';
$logr_nr = '78';
$logr_cidade = 'São Paulo - SP';
$local = "{$logr_end},{$logr_nr} {$logr_cidade}";
$url="http://maps.googleapis.com/maps/api/geocode/json?address=".urlencode($local)."&sensor=false";
$json = file_get_contents($url);
$data = json_decode($json, TRUE);
$lat = $data['results'][0]['geometry']['location']['lat'];
$lng = $data['results'][0]['geometry']['location']['lng'];
echo $lat . ',' . $lng;
// -23.5683817,-46.69341
//Pra testar se está correto -> google.com/maps
//E cola diretamente que ele te leva para a lat,lng
//No caso veio aqui: https://www.google.com.br/maps/place/23%C2%B034'06.2%22S+46%C2%B041'36.3%22W/@-23.5683768,-46.6955987,17z/data=!3m1!4b1!4m5!3m4!1s0x0:0x0!8m2!3d-23.5683817!4d-46.69341?hl=pt-BRBoa tarde Gabriel,
Copiei o codigo exatamente como você deixou e veja o erro que ocorreu:
O engraçado é que se eu pegar o código da url e colar no google, tenho o retorno do condeúdo:
Grato pela ajuda!
Acredito que a função está desabilitada.
Uma alternativa seria utilizar o CURL como explicado nesse stack:
http://stackoverflow.com/questions/8540800/php-how-can-use-curl-instead-file-get-contents
Veja como ficaria adaptado>
<?php
/*
Função alternativa de fopen(ings)...
*/
function file_get_contents_curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
//Faz consulta no WebService do Google
// Rua Cláudio Soares, 72 - 1302 - Pinheiros, São Paulo - SP
$logr_end = 'Rua Cláudio Soares';
$logr_nr = '78';
$logr_cidade = 'São Paulo - SP';
$local = "{$logr_end},{$logr_nr} {$logr_cidade}";
$url="http://maps.googleapis.com/maps/api/geocode/json?address=".urlencode($local)."&sensor=false";
$json = file_get_contents_curl($url);
$data = json_decode($json, TRUE);
$lat = $data['results'][0]['geometry']['location']['lat'];
$lng = $data['results'][0]['geometry']['location']['lng'];
echo $lat . ',' . $lng;
// -23.5683817,-46.69341
//Pra testar se está correto -> google.com/maps
//E cola diretamente que ele te leva para a lat,lng
//No caso veio aqui: https://www.google.com.br/maps/place/23%C2%B034'06.2%22S+46%C2%B041'36.3%22W/@-23.5683768,-46.6955987,17z/data=!3m1!4b1!4m5!3m4!1s0x0:0x0!8m2!3d-23.5683817!4d-46.69341?hl=pt-BRBom dia a todos,
Consegui resolver a situação e o problema estava aparentemente no endereço do servidor api que me foi informado no link que usei como base.
Segue como ficou o código (note o endereço do servidor api informado):
<?php
error_reporting(E_ALL);
$address = 'Av. São Paulo 3500 Rio de Janeiro RJ';
$end_comum = $address;
$address = str_replace(' ','+',$address);
$url = 'http://maps.google.com/maps/api/geocode/json?address=' .utf8_encode($address).'&sensor=false';
$maps_json = file_get_contents($url);
$maps_array = json_decode($maps_json);
$lat = $maps_array->results[0]->geometry->location->lat;
$lng = $maps_array->results[0]->geometry->location->lng;
print_r(''.$end_comum.'<br>'.$lat.', '.$lng.'');
?>
Um outro detalhe, é que não consegui rodar este código no Wamp. Tive que faze-lo em um servidor Linux nativo com apache rodando:
Obrigado a todos!!!
Bem-vindo ao fórum! :)
Recomendo que leia as regras e orientações de participação
Habilite todas as exibições de erro, como mostrado neste tópico, na Orientação No. 3 e teste novamente
Explique o que acontece, descreva o problema. Se aparecer mensagem de erro, cole-a aqui