Como a latitute e longitude de um ponto automaticamente (google maps)

Bom dia nobres colegas!

No meu formulário de cadastro utilizo campos para fazer a localização no mapa: estado, cidade, rua , esses dados mostra já o mapa durante o cadastro.
Como faço para pegar a latitude e longitude de um ponto no momento do cadastro de forma automática e grava no banco de dados, para depois mostrar vários pontos em um mapa grande ? desde já agradeço

Conseguir pegar dessa forma :

$uf = {estado};
$cidade = {cidade};
$geocode = file_get_contents(‘http://maps.google.com/maps/api/geocode/json?address=’.$uf.’+’.$cidade.’&sensor=false’);

$output= json_decode($geocode);

$lat=$output->results[0]->geometry->location->lat;
$long = $output->results[0]->geometry->location->lng;

echo $long;

*O detalhe no caso latitude($lat) só consigo exibir em um echo! quero exibir dentro de um campo chamado {latitude} para salvar na base de dados tentei de todas as formas, e nada! alguém pode da uma solução ou uma luz?

Tentei fazer assim :
{latitude} = $lat; \ não funciona!

1 Curtida

Resolvido é só colocar no onBeforeInsert e onBeforeUpdate. antes estava colocando como evento ajax ! dava o erro! nos eventos onBeforeInsert e onBeforeUpdate ficou beleza!

Italo2303,

Parabéns por ter conseguido resolver e obrigado por compartilhar.

Aproveitei e colocai na biblioteca, colocando no evento somente a chamada sc_include(“localiza_coord_maps.php”,“prj”);

funcionando ok

Flávio,

Tentei usar da forma como postou, e tenho certeza que não estou utilizando corretamente. O retorno no meu caso apareceu:

file_get_contents(http://maps.google.com/maps/api/geocode/json?address=PR+PONTA GROSSA&sensor=false): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request
Trying to get property of non-object

tem as aspas ?

Da mensagem de erro:

file_get_contents(‘http://maps.google.com/maps/api/geocode/json?address=PR+PONTA GROSSA+AV DR FRANCISCO BURZIO, 99&sensor=false’): failed to open stream: No such file or directory
Trying to get property of non-object

“Coloquei” direito no brower http://maps.google.com/maps/api/geocode/json?address=PR+PONTA GROSSA+AV DR FRANCISCO BURZIO, 99&sensor=false
e houve o retorno das informações.

A chamada para sc_include(“localiza_coord_maps.php”,“prj”);
adicionei no evento onBeforeUpdate, que estou testando.

Ítalo,

Qual a versão do SC e PHP ?

$request_url = “http://maps.googleapis.com/maps/api/geocode/xml?address=".$address."&sensor=true”;
$xml = simplexml_load_file($request_url) or die(“url nao carregada”);//
$status = $xml->status;
if ($status==“OK”)
{
{latitude} = $xml->result->geometry->location->lat;
{longitude} = $xml->result->geometry->location->lng;
}

Flávio,

Muito obrigado pelo uso de seu tempo em ajudar-me nisto.
Nesta última solução funcionou, gravando no BD!

O Flávio postou a solução, segue uma outra opção por json, dá para recuperar o endereço completo em ambas

$address = 'avenida+goias,100,sao+caetano+do+sul,sao+paulo,brasil';
$geocode = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$address.'&sensor=false');
$output= json_decode($geocode);
$lat = $output->results[0]->geometry->location->lat;
$long = $output->results[0]->geometry->location->lng;
echo "$lat, $long";
//se quiser testar coloque os valores acima na pesquisa do maps.google.com.br

Rodrigo,

Da forma como colocou funcionou também, mas é necessário “trabalhar” um pouco o conteúdo do campo para esta “consulta”.
O que achei interessante na última solução do Flávio é que você concatena os campos como estão.
Vou fazer mais testes para ver como fica a abertura pelas coordenadas de latitude + longitude, já que a primeira tentativa abre o mapa sem mapa! Agora vamos a esta outra etapa.

Fico muito agradecido pelo tempo que usaram em ajudar-me neste problema / desafio.

Na verdade ambos são iguais, mudam apenas o retorno.
Coloquei dessa maneira o address pois assim é 100% de certeza do retorno correto.
Se der erro no address corre o risco de até retornar porém um local em Madrid se não me engano.
As vezes vale a penas tratar um pouco sim…

Bom dia pessoal,
Esse procedimento funciona na versao 8 do SC? Estou tentando implementar como descrito nos topicos acima, mas a aplicacao dá um erro…

Msg de erro:
file_get_contents(http://maps.google.com/maps/api/geocode/json?address=Av Monsenhor Alderigi 900,Poços de Caldas,MG&sensor=false): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request
Trying to get property of non-object

Se alguem puder me ajudar, ficarei grato.

Obrigado

Acredito que sejam os caracteres especiais.
Eu resolvi comprando uma base com CEPs e latitudes conforme o link
http://produto.mercadolivre.com.br/MLB-844720638-base-cep-com-ibge-latitude-ddd-fev-2017-_JM

teste numa blank:

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Buscar Informações detalhadas do endereço</title>
</head>

<body>
<?
//$xml = simplexml_load_file("http://maps.google.com/maps/api/directions/xml?sensor=false&origin=Boston,MA&destination=Concord,MA");

$xml = simplexml_load_file("http://maps.google.com/maps/api/directions/xml?sensor=false&origin=São Bernardo do Campo+-%20+SP,+0910-290,Rua+dos+Cravos&destination=Guarulhos+-+SP,+07060-000");

//Waypoints no final da URL define pontos de referência
//&waypoints=Charlestown,MA|Lexington,MA

if ($xml->status == 'OK'){
	echo ($xml->route->leg->distance->value/1000)." Km";
	echo '<br>Aproximadamente '.$xml->route->leg->duration->text;
}else{
	echo 'Erro ao calcular o local!!!';
}
?>
</body>
</html>
<?

Nossa muito SHOW esta base.

Valeu !!! Obrigado

Msg de erro:
file_get_contents(http://maps.google.com/maps/api/geocode/json?address=Av Monsenhor Alderigi 900,Poços de Caldas,MG&sensor=false): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request
Trying to get property of non-object

qual a solução ?