Pegar Latitude e Longitude json, através do Endereço e Salvar no MySql.

Srs Boa Noite;

Após infinita buscas por um código que atende-se a minha necessidade de capturar a Latitude e a Longitude (Coordenadas) sem sucesso, resolvi Estudar a API GEOCOD do Google e desenvolvi esse código que agora compartilho com vocês o código esta funcionando 100%, + pode ser melhorado fiquem a vontade, mas enfim está aqui para quem quiser e estiver a procura de como capturar essas coordenadas, bom proveito.

ps; somente deixe os crédito ok…rsrsrsrsrsr

// Pegar Latitude e Longitude, através do Endereço e Salvar na Base de Dados.
// Autor: CARLOS BOTELHO;

//lendo a base para contar qtde de registros para fazer o while, poderia usar um Recordset, mas neste exemplo eu usei um formulario Blank

$check_sql = "SELECT Count(Id) as qtde FROM formulario ";
sc_lookup(rs, $check_sql);
if (isset({rs[0][0]})) // Row found
{
$qtde = {rs[0][0]};
}
else{
$qtde = 0;
}

$apiKey = ‘SUA APIKEYCOD AQUI’; ///<= Essa Api vocês podem se cadastrar no google e requisitar uma api.
// lendo os endereços na minha tabela
$check_sql = "SELECT Id, Logradouro, Numero, Bairro, Municipio, UF, Latitude, Longitude FROM formulario ";

sc_lookup(rs, $check_sql);

$i = 0; //<= variavel que vai avançar as linhas do recordset no while;

while ($i <= $qtde) {

if (isset({rs[$i][0]}))     // Row found
{
            // preenchendo os parametros que vão servir para montar a url de chamada da api.
	$id = {rs[$i][0]};
	$logradouro = {rs[$i][1]};
	$numero = {rs[$i][2]};
	$bairro = {rs[$i][3]};
	$cidade = {rs[$i][4]};
	$uf = {rs[$i][5]};
}
else     // No row found
{
	echo("Erro ocorrido");
}

$endereco = $numero." + ".$logradouro." + ".$bairro." + ".$cidade." + ".$uf;
    
     // chamada da url do googleapi.
$geo = file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?key='.$apiKey.'&address='.urlencode($endereco).'&sensor=false');


// converte o JSON para um array
$geo = json_decode($geo, true);

if ($geo['status'] == 'OK') {
  // capturando a latitude e longitude do arquivo json e colocando numa variavel.
  $latitude = $geo['results'][0]['geometry']['location']['lat'];
  $longitude = $geo['results'][0]['geometry']['location']['lng'];
	
  $upsql = "UPDATE formulario SET Latitude = '".$latitude. "', Longitude = '".$longitude."' where Id = '".$id."'";
  sc_exec_sql ($upsql); //Populando a tabela com as coordenadas de retorno do json, passando o id do registro capturado anteriormente.
}
else {
	echo "Erro ao montar o retorno do Json.";
	}
$i++;

    // somente para mostrar podem retirar.
echo $i."</ br>";
echo ("Latitude: ".$latitude."</ br>");
echo ("Longitude: ".$longitude."</ br>");

}

Bom é isso, espero que atenda as necessidades de vocês.

Forte abraço a todos.

ps; se melhorarem o script por favor me avisem ok?

1 Curtida

Carlos,

Dei uma melhorada no teu código, retirando o primeiro SELECT que não precisa. Segue abaixo:

$check_sql = "SELECT Id, Logradouro, Numero, Bairro, Municipio, UF, Latitude, Longitude FROM formulario ";

sc_select(rs, $check_sql);

while (!$rs->EOF) {
   
   // preenchendo os parametros que vão servir para montar a url de chamada da api.
   $id = rs->fields[0];
   $logradouro = rs->fields[1];
   $numero = rs->fields[2];
   $bairro = rs->fields[3];
   $cidade = rs->fields[4];
   $uf = rs->fields[5];

   $endereco = $numero." + ".$logradouro." + ".$bairro." + ".$cidade." + ".$uf;
       
   // chamada da url do googleapi.
   $geo = file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?key='.$apiKey.'&address='.urlencode($endereco).'&sensor=false');


   // converte o JSON para um array
   $geo = json_decode($geo, true);

   if ($geo['status'] == 'OK') {
     // capturando a latitude e longitude do arquivo json e colocando numa variavel.
     $latitude = $geo['results'][0]['geometry']['location']['lat'];
     $longitude = $geo['results'][0]['geometry']['location']['lng'];
      
      $upsql = "UPDATE formulario SET Latitude = '".$latitude. "', Longitude = '".$longitude."' where Id = '".$id."'";
     sc_exec_sql ($upsql); //Populando a tabela com as coordenadas de retorno do json, passando o id do registro capturado anteriormente.
   }
   else {
      echo "Erro ao montar o retorno do Json.";
      }
        // somente para mostrar podem retirar.
   echo ("Latitude: ".$latitude."</ br>");
   echo ("Longitude: ".$longitude."</ br>");
}
2 Curtidas

Kleyber Derick;

Ficou show, e notei que a resposta ficou bem mais rápida.....
1 Curtida

Legal. fico feliz em poder ajudar.

Kleyber;

Com esse código você pode montar uma base de dados com o endereços todos georreferenciado, a idéia é pegar o arquivo de ceps dos correios colocar numa tabela e georreferenciar esses endereços e ceps.

Com isso, num aplicativo por exemplo de Vendas, estoques ou qualquer outro aplicativo a empresa pode receber on line os pedidos dos vendedores, e saber exatamente onde foi feito esse pedido;

Enfim, uma infinidade de opções…

Segue o código utilizando a macro sc_webservice

//pode adicionar bairro, pais, municipio no campo endereço composto, eu utilizei apenas o nome da rua e numero
$endereco_composto = {numero}."+".{endereco};
$end_url = urlencode($endereco_composto);

$key = 'chave da sua api';

$webservice_url = "https://maps.googleapis.com/maps/api/geocode/json?key=$key&address=$end_url&sensor=false";
$port = '80';

//não tem parâmetros adicionais, mas se não colocar na macro ela retorna erro
$parms = array();
$parms = http_build_query($parms);

$response = sc_webservice('curl', $webservice_url, $port, "GET",$parms, array(), 30);

//transforma o retorno string em array
$response_array = json_decode($response, true);

//exibe na tela  a array
print_r($response_array);

//atribui as variaveis o valor da latitude e longitude
$latitude = $response_array['results'][0]['geometry']['location']['lat'];
$longitude = $response_array['results'][0]['geometry']['location']['lng'];

echo"<p> LAT: $latitude <p> LONG: $longitude";
2 Curtidas

Testei e ficou redondinho… muito bom!!!

@Carlos_Botelho, ficou mais rápido com o sc_webservice? Eu não cheguei a testar, mas essa é uma boa saída também… Obrigado @Graeffs por compartilhar.

3 Curtidas

Sim, ficou bem mais rápido…

2 Curtidas