Boteco Digital

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 );
}

Ver mapa

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 logitude 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ãmentro 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.

Categorias Javascript
comments powered by Disqus