Introdução a API de mapas do Google Maps
Como sabemos o Google Maps é um excelente serviço, embora ele nos permite inserir um mapa através de um iframe
, o real potencial está na sua API de javascript que permite marcar pontos no mapa, pegar coordenadas, traçar rotas, transformar endereços em coordenadas de latitude e longitude.
Vamos então começar inserindo um mapa em nossa página utilizando a API e para isso precisamos inserir a biblioteca do Google Maps:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
Agora vamos criar uma função que será chamada no onload
da tag body
para o mapa somente ser criado após o documento ser totalmente carregado, isso garante que o elemento div
no qual iremos inserir o mapa, já esteja carregado quando o código javascript for carregado:
var map = null;
function carregar(){
var latlng = new google.maps.LatLng(-29.767954,-57.071657);
var myOptions = {
zoom: 12,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
//criando o mapa
map = new google.maps.Map( document.getElementById("mapa") , myOptions );
}
O código até é bem simples, na linha 3 criamos um objeto que representa uma coordenada em latitude e longitude, esses objetos são utilizados em vários métodos da API.
Na linha 5 definimos as opções iniciais do mapa, na linha 6 definimos o nível de zoom inicial, na linha 7 configuramos onde o mapa será centralizado(utilizamos o objeto criado na linha 3) . Na linha 8 definimos tipo de mapa, podemos utilizar os seguintes: ROADMAP
, SATELLITE
, HYBRID
.
Na linha 12 é onde criamos realmente o mapa. No construtor do objeto o primeiro parâmetro recebe o elemento irá conter o mapa, no segundo os parâmetros de inicialização do mapa que definimos anteriormente. Note que ele armazenamos a referência ao mapa na variável map
e é através dela que podemos modificar o mapa inserindo marcadores, etc.
Podemos mudar várias propriedades do mapa através de funções.
//centralizando o mapa
map.setCenter( new google.maps.LatLng(-29.767954,-53.071657) );
//mudando o zoom do mapa
map.setZoom(5);
//mudando o tipo do mapa
map.setMapTypeId(google.maps.MapTypeId.SATELLITE);
Marcadores
Também podemos inserir um marcador em um determinado ponto do mapa através de marcadores.
var praca = new google.maps.LatLng(-29.756200185902156, -57.08757859271242);
marcadorPraca = new google.maps.Marker({
position: praca,
map: map,
title:"Praça da Cidade"
});
Criamos um marcador simples, basicamente definimos um ponto na linha 1, na linha 2 criamos o objeto de marcador passando as seguintes opções:
- position: o ponto do mapa que o marcador vai ser inserido
- map: mapa no qual vai ser inserido o marcador
- title: um título para o marcador.
Podemos também inserir um ícone personalizado para o marcador através da opção icon
icon: '/caminho/para/a/imagem'
Veja o exemplo
Eventos de click
Podemos definir certas ações para quando o usuário clicar em um mapa, ou em um marcador, para isso podemos dever criar um listener
.
google.maps.event.addListener(map, 'click', function(event) {
alert(event.latLng)
});
Veja o exemplo
No código acima estamos definindo que “escutaremos” eventos no objeto map
ou seja no nosso mapa, e que o evento que escutaremos serão os eventos de “click
“(podemos também escutar os eventos de dblclick
, mouseup
, mousedown
, mouseover
, mouseout
) e ao ser executado pelo usuário um desses eventos será executado a function
definida que receberá um objeto de evento como parâmetro que irá conter basicamente apenas um atributo, as coordenadas de latitude e longitude de onde foi executado o evento, com isso podemos colocar um marcador no local ou centralizar o mapa por exemplo.
Outra coisa interessante para fazer com evento é fazer abrir um balão com informações ao se clicar em um determinado marcador:
var praca = new google.maps.LatLng(-29.756200185902156, -57.08757859271242);
marcadorPraca = new google.maps.Marker({
position: praca,
map: map,
title:"Praça da Cidade",
});
var infowindow = new google.maps.InfoWindow({
content: "aqui voce pode adicionar conteudo <strong>HTML</strong>"
});
google.maps.event.addListener(marcadorPraca, 'click', function(event) {
infowindow.open(map,marcadorPraca);
});
Veja o exemplo
Primeiro criamos um objeto de janela de informação com o texto do balão.
Depois em vez de “escutarmos” um evento de ‘click‘ no mapa inteiro, vamos “escutar” apenas no marcador que criamos e na função que irá executar quando ‘click‘ ocorrer irá abrir a janela de informação através do método open que receberá como parâmetro o mapa e ao qual marcador a janela pertence.
Transformar endereço em coordenadas
Como vimos acima, sempre que iremos inserir alguma coisa no mapa deveremos fornecer as coordenadas de latitude e longitude, mas vamos ser sinceros não é algo muito natural, para isso a API do Maps nos fornece um serviço de Geocoding para converter um endereço textual como estamos acostumado em coordenadas.
var endereco = 'Porto Alegre - RS';
geocoder = new google.maps.Geocoder();
geocoder.geocode({'address':endereco}, function(results, status){
if( status = google.maps.GeocoderStatus.OK){
latlng = results[0].geometry.location;
markerInicio = new google.maps.Marker({position: latlng,map: map});
map.setCenter(latlng);
}
});
Veja o exemplo
Na linha 1 pegamos o endereço que pode vir de um formulário por exemplo.
Na linha 2 é criado um objeto Geocoder que é responsável por fazer a requisição assíncrona de endereço ao webservice do Maps.
Na linha 3 é feita requisição através do método geocode passando um objeto JSON como requisição, onde definimos que queremos a localização através do endereço ‘address’, também poderíamos enviar uma coordenada para pegar o endereço passando como requisição ‘latLng
‘.
Após a requisição ser feita será chamada a function que foi passada como segundo parâmetro do método geocode, esta function que recebe como parâmetro um array de resultados gerados pelo service do maps e um código de status da requisição.
Na linha 4 testamos se não houve erros na requisição, e na linha 5 pegamos o primeiro resultado do array e pegamos os dados de geometry.location
que contem as coordenadas de latitude e longitude.
Depois apenas colocado um marcador no local do endereço e centralizamos neste local.
Bom isso é o básico, a API do Google Maps permite fazer bem mais coisas e possui muitas outras opções, essas foram apenas as mais básica, então consulte a documentação que é bem completa e com muitos exemplos.