Febre amarela, um hoax Extensões que uso (IV)
Jan 23

Google maps dentro do siteHá algum tempo eu li no Client Side elogios a um framework de javascript chamado Jquery. Então quando fui iniciar um novo projeto, resolvi testá-lo. É realmente impressionante o que se consegue fazer com ele. Mostra que programar pode ser divertido e simples.

Há, ainda, a possibilidade de usar plugins para complementar as funcionalidades dele. O que é ótimo, o limite do que você consegue fazer é a sua imaginação.

Infelizmente um problema em boa parte dos plugins é a documentação escassa. Tenho penado lendo comentários deixados dentro do código, e muitas vezes tendo que descobrir como usá-lo lendo o fonte. Talvez seja só azar, justamente nos plugins que usei isso acontece. O próprio JQuery é bem documentado, por exemplo. Saberei melhor no futuro.

No intuito de colaborar com os desenvolvedores e os interessados, eis um tutorial de como inserir um mapa do Google Maps no seu site (é o primeiro tutorial que faço, então o feedback será muito bem vindo. Com o tempo eu pego o jeito ;) ):

O efeito final é esse.

  1. Antes de começar é preciso criar uma chave para a API do Google Maps. Não é necessário cadastro, basta colocar a url do site no qual ela será usada nessa página. Ela serve para todo o domínio, inclusive subpastas. Se você tentar usar uma chave que não foi feita para o seu domínio ela não funcionará.
  2. Scripts necessários: são dois, o JQuery e o JMap2.
  3. O html: é necessário que o navegador esteja com o javascript habilitado para que o Google Maps funcione, então o html do exemplo é apenas a tag body:
    <!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=UTF-8″ />
    <meta name=“author” content=“Leandro Facchinetti” />
    <script type=“text/javascript” src=“jquery-1.2.2.min.js”></script>
    <script type=“text/javascript” src=“http://maps.google.com/maps?file=api&v=2&key=sua_chave”></script>
    <script type=“text/javascript” src=“jquery.jmap2.js”></script>

    <script type=“text/javascript”>
    <!–
    //o código virá aqui
    –>
    </script>
    <title>Exemplo de colocação de mapas dentro do site com JQuery e JMap2</title>
    </head>
    <body>
    </body>
    </html>

    Atente para as importações de scripts. São três, o JQuery, a API do Google Maps e o JMap2. Lembre-se de mudar para a sua chave da API, onde diz “sua_chave” no código.
  4. Na parte onde está escrito “//o código virá aqui” é que escreveremos nosso código. Logicamente é preferível que você faça isso num documento externo e o importe, estou fazendo assim para simplificar.
  5. O código a ser inserido é este, veja os comentários para entendê-lo:
    $(function (){//sintaxe do JQuery para a função ser executada quando o DOM estiver pronto
    $("body").append("<a href=\"\">Clique aqui para ver no mapa</a>").children("a").click(function (){//aqui é colocado o link, não faria sentido colocá-lo no html porque quem não tivesse javascript ficaria com um link vazio. Após a colocação do link é associada uma função a ser executada quando ele é clicado
    $(this).slideUp("slow").after("<div id=\"mapa\" style=\"width:450px; height:320px; display:none; background-color:#e5e3df; \"").parent().children("div#mapa").slideDown("slow", function (){//é inserida uma div na qual irá o mapa. Atente para a colocação de atributos width e height, o mapa será do tamanho que você setar aqui. Depois da colocação vem a função do efeito que faz a div aparecer deslizando. Lógico que isso é opcional, fiz assim porque é mais estético
    $(this).jmap({//aqui é acolocação do mapa em si, dentro dessa função vai um objeto com as opções, não listarei todas, só as que julgo serem mais importantes
    mapCenter: [-27.608000, -48.53770],//as coordenadas da onde o mapa será aberto. Para descobrí-las entre no Google Maps, ache a região que lhe interessa e clique em "Criar link para esta página", observe a url gerada, procure por duas sequência de número logo no início, são elas que você deve colocar aqui
    mapZoom: 17,//nível de zoom do mapa quando aberto
    mapShowOverview: false,//mostrar pequeno mapa da região no canto inferior direito
    mapShowType: false//mostrar o tipo de mapa: mapa, satélite, terreno
    }).addMarker({//adicionar aquele marcador vermelho
    pointLat: -27.608450,//as coordenadas de onde o marcador deve ser criado
    pointLng: -48.53770,
    pointHTML: "<h3>Paralelo 22</h3><p>Praça Abdon Batista<br />Saco dos Limões - Florianópolis - SC</p>",//html a ser exibido no balão do marcador, é possível manipular a formatação desse html pelo css da página. Incrível, não? openHTMLEvent: "mouseover"//evento que dispara a abertura do marcador
    })
    })
    return false;//impedir a ação padrão do link
    })
    })
  6. Pronto, não é fantástico o que pode ser feito com tão pouco código?

Textos relacionados:

Escrito por Leandro Facchinetti e publicado Quarta-feira, dia 23 de Janeiro de 2008.
tags: , , , ,

10 comentários no texto “Colocando um mapa dentro do site com JQuery e JMap2”

  1. Marco Biruel diz:

    Olá Leandro, parabéns pelo trabalho.
    Lí seu tutorial e gostaria de saber a possibilidade de se mostrar o mapa a partir de um endereço pego por um forumulário na página.
    Pode me ajudar?

    Abraço

    Marco Biruel

  2. Leandro Facchinetti diz:

    @Marco Biruel
    É possível fazer uma busca por endereço, sim. E é muito simples.
    Da mesma forma que eu usei a função addMarker, você pode usar a searchAddress. O objeto com parâmetros que ela recebe, entretanto, é um pouco diferente. Veja como fica:
    Na parte

    $(this).jmap({//aqui é acolocação do mapa em si, dentro dessa função vai um objeto com as opções, não listarei todas, só as que julgo serem mais importantes
    mapCenter: [-27.608000, -48.53770],//as coordenadas da onde o mapa será aberto. Para descobrí-las entre no Google Maps, ache a região que lhe interessa e clique em “Criar link para esta página”, observe a url gerada, procure por duas sequência de número logo no início, são elas que você deve colocar aqui
    mapZoom: 17,//nível de zoom do mapa quando aberto
    mapShowOverview: false,//mostrar pequeno mapa da região no canto inferior direito
    mapShowType: false//mostrar o tipo de mapa: mapa, satélite, terreno
    }).addMarker({//adicionar aquele marcador vermelho
    pointLat: -27.608450,//as coordenadas de onde o marcador deve ser criado
    pointLng: -48.53770,
    pointHTML: “<h3>Paralelo 22</h3><p>Praça Abdon Batista<br />Saco dos Limões - Florianópolis - SC</p>”,//html a ser exibido no balão do marcador, é possível manipular a formatação desse html pelo css da página. Incrível, não? openHTMLEvent: “mouseover”//evento que dispara a abertura do marcador
    })

    troque por

    $(this).jmap({
    mapZoom: 17,
    mapShowOverview: false,
    mapShowType: false
    }).searchAddress({
    address: “Endereço a ser buscado”,
    addMarker: true,
    showAddress: true
    })

    Logicamente, no atributo address você troca o valor pelo endereço a ser buscado. Para ler o endereço escrito em um campo de formulário, use $(”seletor do input com endereço”).val(), ou ótimo plugin Form, que eu também recomendo.

  3. Marco Biruel diz:

    Leandro, ainda não testei, mas de cara quero agradecer a ajuda!

    Boa sorte e grande abraço!

  4. Rodrigo diz:

    Olá parabéns pela iniciativa eu tava testando agora o alpha e ja ta rolando o 2… :) , mas tem uma funcionalidade que se implantem-se(não sei se exixte) ,
    igual desse exemplo [http://olbertz.de/jquery/googlemap.html] [não funciona no ie bosta e nem no opera,so no firefox e safari ¨],pegando os valores do bd através de json ficaria muito show.

    Será que tem como nesse projeto no momento fazer isso??

    Valeu abraço.

  5. Rodrigo diz:

    correções (implanterem)(existem)

  6. Vilmondes Eracton diz:

    Por que eu usaria esse plugin visto que o próprio google fornece um iframe para que eu coloque o mapa em minha página?

  7. Leandro Facchinetti diz:

    @Vilmondes Eracton

    A minha razão é usar o mesmo padrão de desenvolvimento que já estava acostumado com o JQuery. Não precisei aprender a usar a API do Google Maps porque o JMaps já fazia tudo por mim de forma simples e absolutamente satisfatória.
    Só de não precisar mesclar estilos diferentes no código e usar a sintaxe do JQuery, que me agrada muito, já fico feliz.

  8. Roberval César Menezes diz:

    Leandro, quero parabenizá-lo pelo artigo que é muito claro e aplicável de forma simples, quero parabenizá-lo também pela presteza na resposta,de extrema qualidade, aos comentários aqui postados .
    Quero aproveitar aqui para lhe fazer uma pergunta:
    Há a possibilidade de se colocar um endereço origem e um destino e ser realizado um trace entre os endereços, como a opção de “como se chegar” disponível na página do google maps?
    Desde já agradeço a atenção e parabenizo pela iniciativa.

  9. Leandro Facchinetti diz:

    @Roberval César Menezes

    Nunca usei, mas olhei na documentação do JMaps e há uma função para isso, sim. Ela se chama searchDirections() e recebe um objeto com os endereços de partida e chegada.

    Veja um exemplo de uso aqui:
    http://jmaps.digitalspaghetti.me.uk/#searchdirections

  10. Roberval César Menezes diz:

    Leandro, boa tarde!
    Fico grato pela resposta, eu vi sim o exemplo e tentei aplicá-lo, porém sem sucesso por não saber o que colocar no parâmetro directionsPanel, já tentei colocar diversas coisas incluse o id da div.
    Coloquei o endereço origem,destino porém quando executo a página não aparece as localizações.
    Como vc mesmo disse, nunca ter utilizado esta funcionalidade, gostaria muito se me ajudasse a utlizá-la.
    Um grande abraço, mais uma vez muito obrigado!

Comente

Feed para os comentários deste post

Comente, porque trocar idéias é o melhor jeito de aperfeiçoá-las. Ler os comentários e conversar com os leitores é a razão pela qual escrevo um blog e não um diário.

Sinta-se a vontade, inclusive, para criticar ou discordar de mim. Só não use de ofensas (a mim ou a qualquer outro comentarista), texto em caixa alta, ou miguxês (uma ofensa ao português).

Primeiro porque escrever assim enfraquece seu argumento, segundo porque isso me obrigará a publicar seu e-mail (spammers will find you) e endereço de IP, humilhando-o pela exposição de sua ignorância.

Exceto nesses casos, fique tranqüilo, seu e-mail não será publicado, vendido ou lotado de spams. Só servirá para eu entrar em contato no caso de preferir responder pessoalmente seu comentário.