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

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 ?

Testei direto no navegador e está correto o retorno do seu parâmetro abaixo:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "900",
               "short_name" : "900",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Avenida Monsenhor Alderige",
               "short_name" : "Av. Monsenhor Alderige",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Jardim Country Club",
               "short_name" : "Jardim Country Club",
               "types" : [ "political", "sublocality", "sublocality_level_1" ]
            },
            {
               "long_name" : "Poços de Caldas",
               "short_name" : "Poços de Caldas",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Minas Gerais",
               "short_name" : "MG",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Brasil",
               "short_name" : "BR",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "37704",
               "short_name" : "37704",
               "types" : [ "postal_code", "postal_code_prefix" ]
            }
         ],
         "formatted_address" : "Av. Monsenhor Alderige, 900 - Jardim Country Club, Poços de Caldas - MG, Brasil",
         "geometry" : {
            "location" : {
               "lat" : -21.7947925,
               "lng" : -46.6031532
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : -21.7934435197085,
                  "lng" : -46.60180421970851
               },
               "southwest" : {
                  "lat" : -21.7961414802915,
                  "lng" : -46.6045021802915
               }
            }
         },
         "partial_match" : true,
         "place_id" : "ChIJW3XfqnrbyZQRhu-IkliX0FU",
         "types" : [ "street_address" ]
      }
   ],
   "status" : "OK"
}

Irei realizar um teste aqui no PHP da função file_get_contents().

Testei aqui e failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request acontece devido aos ESPAÇOS na URL:
http://maps.google.com/maps/api/geocode/json?address=Av Monsenhor Alderigi 900,Poços de Caldas,MG&sensor=false

Testei outras URLs sem espaço e não apresentou a mensagem.
Mas a função retorna string(0) “” mesmo com conteúdo via browser.

Deve haver uma solução para o caso acima mas não a tenho.

Eu utilizo JavaScript para recuperar Latitude e Longitude:

Exemplo:

?>

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">

var geocoder = new google.maps.Geocoder();
var address = "Av Monsenhor Alderigi 900,Poços de Caldas,MG";

geocoder.geocode( { 'address': address}, function(results, status) {

  if (status == google.maps.GeocoderStatus.OK) {
    var latitude = results[0].geometry.location.lat();
    var longitude = results[0].geometry.location.lng();
    alert(latitude);
  } 
}); 
</script>

<?php

Eu uso a versão 8.1.067 e funcionou normalmente.

Acredito que ajude!

  ?>

    <script>
    window.onload = function() {
        obterLocalizacao();
    };
    </script>


    <script>
    	
    function obterLocalizacao() {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(function(position) {
                var latitude = position.coords.latitude;
                var longitude = position.coords.longitude;

                document.getElementById("id_sc_field_latitude").value = latitude;
                document.getElementById("id_sc_field_longitude").value = longitude;

                // Chamada para a API Nominatim para obter detalhes do endereço
                var nominatimAPI = "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=" + latitude + "&lon=" + longitude;

                fetch(nominatimAPI)
                    .then(response => response.json())
                    .then(data => {
                        // Analisar a resposta para obter detalhes do endereço
                        var endereco = data.address;
                        
                        // Construir o endereço completo com todas as informações possíveis
                        var enderecoCompleto = endereco.road + ', ' +
                            (endereco.house_number || '') + ', ' +
                            (endereco.neighbourhood || endereco.suburb || endereco.village || '') + ', ' +
                            endereco.city + ', ' +
                            endereco.state + ', ' +
                            endereco.country;

                        document.getElementById("id_sc_field_enderecoapi").value = enderecoCompleto;
                    })
                    .catch(error => console.log('Erro ao obter informações de geocodificação:', error));
            }, function(error) {
                // Tratamento de erro ao obter a localização
            });
        } else {
            // Geolocalização não é suportada no navegador
        }
    }


    </script>
    <?php
1 Curtida

Tópico de 2017…

………………….

2 Curtidas

alguem tem a dica de como colcoar em um campo essa latitude e longitude e salvar no banco de dados ?

Aí está em PHP, o restante é só mover o valor para o campo.

Sugiro em caso de tópicos antigos sempre criar um tópico novo em vez de reabrir o tópico, as chances de obter mais respostas aumentam.

1 Curtida

funcionou mas tiver de adaptar umas coisas.

so não estou conseguindo e ele somente aprecer no campo e não na tela so falta isso teria alguma solução ?

Se for um campo SCRIPTCASE e este estar posicionado na tela, será exibido o valor.

Remova o campo da tela em posicionar campos que o mesmo continuará com seus valores sem
Ser apresentado na tela.