Geolocalizacao usando a API do Google

Boa tarde,

Estou desenvolvendo uma tela que possui algumas combobox, que quando tem suas opcoes alteradas, realizam uma consulta no banco de dados, retornando estabelecimentos com suas respectivas coordenadas de latitude e longitude. Preciso pegar essas coordenadas e enviar as mesmas para a api do google montar o mapa com a localizacao dos estabelecimentos retornadas. Alguem ja fez algo parecido com isso e pode me dar uma ideia. Como passar parametros para a Api? Alguem tem um exemplo para me clarear a ideia?

Desde ja agradeco e peco desculpas pela forma que escrevo, mas meu teclado esta desconfigurado.

Sim já fiz isso. Primeira mente deixar eu entender oque você desejar fazer … você quer pegar os endereços da sua base de dados e fazer um geolocalização retornando a latitude e longitude no endereco , ou somente carregar no mapa direto ?

Boa tarde surfzera.

Vou tentar ser mais especifico.

Terei estabelecimentos cadastrados na minha base de dados com seus respectivos enderecos e neles suas coordenadas de latitute e longitude. Alem disso, tb terei as coordenadas em uma tabela de bairros, ou seja, cada bairro tera suas coordenadas cadastradas e cada estabelecimento tambem.

Tenho uma tela com 3 combos e a partir do que for selecionado em cada uma delas, eu farei uma query no banco retornando os estabelecimentos que conferem com a consulta. Entao, eu quero pegar as coordenadas do bairro escolhido e mais as coordenadas de cada um dos estabelecimentos retornados e enviar como parametro para a api do google para que ela faca a geolocalizacao dos estabelecimentos no mapa.

No mapa quero exibir a geolocalizacao dos estabelecimentos com marcadores, como acontece quando a gente faz uma busca por endereco no google maps.

Entendeu melhor agora? Agradeco pela boa vontade em ajudar.

Sim … bom pelo que entendi você quer fazer uma Geolocalização de Multiplos marcadores no mapa com os Estabelecimentos de uma determinada região. Isso é tramquilo. Visto que os endereços já estaram na sua base de dados, existe duas formas: uma você passa os enderecos para o google geolocalizar e outra você manda a latitude e longitude, isso vai depender doque você preferir. (tambem pode enviar o endereco e obter a latitude e longitude ou vice versa)

Vou lhe mandar um exemplo (Neste exemplo eu mando localizar endereco, por enderecos dado um lista, que irá montar um mapa com todos os pontos):

OBS : É nescessário a biblioteca MarkerClusterer.js

<script type="text/javascript" src="http://maps.google.com/maps/api/js?key=<%=conf.Propriedades.get("pct.key.google")%>&sensor=false"></script>
<script type="text/javascript" src="/js/markerclusterer.js"></script>
<script type="text/javascript">

    var geocoder = null;  
       
    function inicializarMapaGeral(){

        var myOptions = {
            zoom: 14,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        
        //DIV onde o mapa será carregado
        var map = new google.maps.Map(document.getElementById("mapa"), myOptions);      
     
        var clusterOptions = { zoomOnClick: false , gridSize: 50, maxZoom: 15}
        var markerClusterer = new MarkerClusterer(map, [], clusterOptions);
        adicionarInfoWindowCluster(map, markerClusterer); 
        
        geocoder = new google.maps.Geocoder();
        
        if ( geocoder ) {
            var toEnderecosLocaliza = new Array(); 
                for (var i = 0; i<toEnderecosLocaliza.length; i++) {
                    localizarEndereco(toEnderecosLocaliza[i]);
                }
            }else{
                alert("GeoCoder não identificado");
            }
                     
        }  

        function localizarEndereco(enderecoLocaliza) {
            geocoder.geocode( { 'address': enderecoLocaliza}, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    
                    map.setCenter(results[0].geometry.location);

                    var html= '<div style="border-bottom: 1px dotted #CCCCCC; margin-right:10px;"><b style="color: #0D7040">'+nome+'</b><br/><br/><b style="color: #E55300">'+especialidade+'</b><br/><br/>'+enderecoApresenta.replace("-","<br/>")+'<br/>'+telefone+'<br/><br/></div>';
                    
                    var marker = new google.maps.Marker({
                        map: map,
                        animation: google.maps.Animation.DROP,
                        icon: icon,
                        position: results[0].geometry.location,
                        html: html
                    });
                        

                    var infowindow = new google.maps.InfoWindow({
                        content: html
                    });
                         
                    google.maps.event.addListener(marker, 'click', function() {
                        infowindow.open(map,marker);
                    });
                            
                    markerClusterer.addMarker(marker, true);
                            
                } else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {    
                    setTimeout(function() {
                        localizarEndereco(enderecoLocaliza;
                    }, 1);
                } else {
                    alert("Geocode was not successful for the following reason: "+status);
                }
    
            });
        }
               
                        
            function adicionarInfoWindowCluster(map, markerClusterer){
                
                google.maps.event.addListener(markerClusterer, 'clusterclick', function(cluster) {
                    
                    var text;
                    
                    text = '<html>'
                    for(var i=0; i<cluster.markers_.length; i++){
                        text += cluster.markers_[i].html + '<br/><br/>';
                    }
                    text+='<html/>';
                    
                    var info = new google.maps.MVCObject;
                    info.set('position', cluster.center_);

                    var infowindow = new google.maps.InfoWindow();
                    infowindow.close();
                    infowindow.setContent(text);
                    infowindow.open(map, info);
                    
                });
                        
            }   
            
            function getLocalizacaoInicial(toCidade, geocoder, map){
                geocoder.geocode( {'address': toCidade}, function(results, status) {
                    if(status == ''){
                        setTimeout(getLocalizacaoInicial(toCidade, geocoder, map),1);
                    }else{
                        map.setCenter(results[0].geometry.location);
                    }
                });   
            }
      
</script>

Espero que ajude qualquer coisa estamos ai.

Se quiser pode olhar um exemplo no site:

http://www.unimed.coop.br/pct/index.jsp?cd_canal=49146&cd_secao=49096

  • Va em “Não sou cliente”
  • Selecione sua Estado e cidade
  • Mande Localizar
  • Depois vá em “Veja no Mapa”

Outra coisa importante: o google permite Geolocalizar somente 2500 endereços diariamente (carregamentos de mapa, ou requisições via webservice na versão free). Nesmo assim é nescessário você criar um conta para isso e ter um chave (key) que deve ser colocada no script.

Exemplo:

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

Outro endereço legal:

http://www.fatma.sc.gov.br/laboratorio/mapa.php

Já está ajudando a dar uma clareada.
Você disse que tem duas formas de fazê-lo certo?
Como seria com coordenadas? Sabe aonde encontro a documentação que fala dessa parte específica?

Nesse endereço tem a documentação:

Bom dia surfzera,

A sua ajuda foi de grande importância, consegui fazer.
Funcionou mas eu nao usei markerclusterer.js. Sabe me dizer a utilidade desse js?

Foi mal por não ter avisado antes.