Académique Documents
Professionnel Documents
Culture Documents
www.criarweb.com
Autores do manual
Este manual foi criado pelos seguintes colaboradores de Criarweb.com:
Javier Chaure
http://www.xski.net
(2 captulos)
Executando este cdigo em um servidor pblico obtemos como resultado o seguinte mapa, que
nos mostra uma vista area de Madri centralizada na Puerta de Alcal:
Como se pode ver no cdigo, criamos uma nica camada com id="map" destinada a conter
nosso Google Map. O script que vem a seguir da declarao desta camada o que gera o
mapa. Vejamos sentena a sentena o que faz o cdigo:
Esta sentena gera o mapa especificando como destino o id="map" que atribumos
previamente para nossa camada container. Note que o mapa se adaptar ao tamanho
que tivermos especificado para esta camada.
map.setMapType(G_SATELLITE_TYPE);
setMapType nos permite especificar o tipo de mapa que queremos visualizar. Como se
pode ver nos setores situados acima direita no mapa, podemos escolher entre as
vistas "Map" (mapa vetorial), "Satellite" (fotografia de satlite) e "Hybrid" (combinam
ambas vistas). Em nosso caso, j que Google ainda no dispe de mapas vetoriais para
Espanha, escolhemos a vista de satlite que nos mostra a fotografia area da zona.
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
Com esta sentena indicamos ao nosso GMap que lugar queremos que mostre,
mediante o mtodo centerAndZoom. Os parmetros so um GPoint (que geramos a
seguir a partir de sua latitude e longitude) e o nvel de zoom que queremos mostrar, de
1 a 16, sendo o nvel 1 o mais prximo e o 16 o mais afastado.
Google Maps localiza os pontos nos mapas a partir de sua latitude e longitude. Esta
informao devemos administra-la ns mesmos, e para isso o mais adequado usar
algum dos servios de geocoding disponveis na rede. Um deles por exemplo o de
InfoSports, no qual simplesmente ao clicar em qualquer ponto do mapa obteremos a
latitude e longitude desejadas para esse ponto. Existem outros servios de geocoding
disponveis de forma gratuita na red que no exigem buscar o ponto fsico no mapa,
tais como Geocoder.us e geonames.org, nos quais podemos realizar buscas a partir do
nome da localizao que buscamos.
Artigo por Javier Chaure
O primeiro que necessitamos so as coordenadas dos novos pontos, neste caso a Plaza de
Cibeles e a Plaza de Neptuno. A seguir associaremos um marcador a cada um dos pontos e o
mostraremos no mapa. O cdigo que mostra este segundo mapa o seguinte:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Introduo a Google Maps - Criarweb</title>
<script src="http://maps.google.com/maps?file=api&v=1&key= ADICIONE_SUA_SENHA_AQUI"
type="text/javascript"></script>
</head>
<body>
<div id="map" style="width: 400px; height: 300px"></div>
<script type="text/javascript">
var map = new GMap(document.getElementById("map"));
map.setMapType(G_SATELLITE_TYPE);
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
//Puerta de Alcal
var point = new GPoint (-3.688788414001465, 40.41996541363825);
var marker = new GMarker(point);
map.addOverlay(marker);
//Plaza de Neptuno
var point = new GPoint (-3.6941099166870117, 40.4154238545226);
var marker = new GMarker(point);
map.addOverlay(marker);
//Plaza de Cibeles
var point = new GPoint (-3.693079948425293, 40.41940998761056);
var marker = new GMarker(point);
map.addOverlay(marker);
map.centerAndZoom(point, 3);
</script>
</body>
</html>
Como se pode ver, declaramos uma varivel point a partir da qual criamos o marcador para
posteriormente mostr-lo no mapa com addOverlay. Nesta ocasio centralizamos o mapa no
ltimo ponto declarado, o correspondente Plaza de Cibeles.
timo, j temos um mapa criado com uma srie de pontos assinalados sobre ele, porm no
contribuem com nenhuma informao ao visitante. O apropriado seria satisfazer a curiosidade
do usurio proporcionando-lhe algo de informao associada a esse ponto. Adicionamos ento,
algo mais de informao a nossos marcadores mostrando umas janelas informativas que nos
indiquem o nome da localizao fsica sobre a que nos encontramos:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Introduo a Google Maps - Criarweb</title>
<script src="http://maps.google.com/maps?file=api&v=1&key= ADICIONE_SUA_SENHA_AQUI"
type="text/javascript"></script>
</head>
<body>
<div id="map" style="width: 400px; height: 300px"></div>
<script type="text/javascript">
var map = new GMap(document.getElementById("map"));
map.setMapType(G_SATELLITE_TYPE);
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
function createMarker(point, nombre) {
var marker = new GMarker(point);
GEvent.addListener(marker, 'click', function() {
marker.openInfoWindowHtml(nome);
});
return marker;
}
//Puerta de Alcal
var point = new GPoint (-3.688788414001465, 40.41996541363825);
var nombre = "Puerta de Alcal";
var marker = createMarker (point, nome);
map.addOverlay(marker);
//Plaza de Neptuno
var point = new GPoint (-3.6941099166870117, 40.4154238545226);
var nombre = "Plaza de Neptuno"
var marker = createMarker (point, nome);
map.addOverlay(marker);
//Plaza de Cibeles
var point = new GPoint (-3.693079948425293, 40.41940998761056);
var nombre = "Plaza de Cibeles"
var marker = createMarker (point, nome);
map.addOverlay(marker);
map.centerAndZoom(point, 3);
Desenvolvimento com o API de Google Maps: www.criarweb.com/desenvolvimento-google-maps/
Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.
</script>
</body>
</html>
Este cdigo nos gera o seguinte mapa, no qual ao clicar sobre o ponto da Plaza de Cibeles
Efetivamente, mostra-se a janela informativa com os dados associados a esse ponto. Neste
exemplo, criamos uma funo que nos cria os markers e seus correspondentes infoWindows
para economizar algo de cdigo. Esta pequena funo recebe como parmetros o GPoint onde
queremos localizar o marker, e um parmetro "nome" que contm a informao que queremos
mostrar na janela informativa associada.
H que resenhar que para associar o aparecimento da janela com o clique do usurio sobre
nosso ponto temos que associar tal evento, que o que se faz na sentena:
GEvent.addListener(marker, 'click', function() {
marker.openInfoWindowHtml(nome);
});
Desta maneira cada vez que se clica sobre o marker mostra-se na infoWindow a informao
especificada no parmetro "nome". Observe que usamos openInfoWindowHtml, que toma seu
parmetro como cdigo html, de modo que poderamos incluir uma construo ao contedo de
nossa nova infoWindow.
Ao longo deste artigo, vimos as funes mais bsicas de Google Maps, que proporcionam as
ferramentas mais rudimentares para manejar o servio. Apesar de no haver aprofundado
sobre a verdadeira potencialidade do servio, residente no uso de XML, com o aqui aprendido
temos j a bagagem necessria para comear a aprofundar na API de Google Maps e comear
a criar scripts mais avanados.
Nota: Vimos aqui explicado o API 1 de Google Maps. Agora estes cdigos devem ser atualizados seguindo
o API 2 de Google Maps. Para isso, podemos consultar o artigo Mapas de Google API 2.
Pero estes dois artigos se utilizavam uma API que Google atualizou, por tanto se tornava
necessrio uma reviso para mostrar cdigos de integrao de Google Maps que sejam
compatveis com o API que se utiliza agora.
Entretanto, os artigos anteriores continuam sendo muito interessantes para ler, porque
explicam algumas coisas bsicas como obter uma chave (Key) de Google, registrando-nos no
site de Google Maps, para poder utilizar os mapas em nosso site.
Agora veremos um cdigo para criar um mapa conforme s especificaes do Google Maps API
2.
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1">
<title>Exemplo de Google Maps API</title>
<script src="http://maps.google.com/maps?file=api&v=2&key=#SUA CHAVE GOOGLE MAPS#"
type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
//funo para carregar um mapa de Google.
//Esta funo chamada quando a pgina termina de carregar. Evento onload
function load() {
//comprovamos se o navegador compatvel com os mapas de google
if (GBrowserIsCompatible()) {
//instanciamos um mapa com GMap, passando-lhe uma referncia camada ou <div> onde quisermos mostrar
o mapa
var map = new GMap2(document.getElementById("map"));
//centralizamos o mapa em uma latitude e longitude desejadas
map.setCenter(new GLatLng(40.407,-3.68), 5);
//adicionamos controles ao mapa, para interao com o usurio
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.addControl(new GOverviewMapControl()); ;
}
}
//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="width: 615px; height: 400px"></div>
</body>
</html>
O cdigo est comentado para uma melhor compreenso. Agora, daremos umas explicaes
adicionais:
Primeiro, embora esteja mais tarde no cdigo, vamos ver o que h no body da pgina. H que
ver que definimos um evento onload="load()", que serve para chamar funo que gera o
mapa, uma vez que tiver terminado de carregar a pgina.
Dentro do corpo da pgina, observemos na etiqueta div onde se mostrar o mapa:
<div id="map" style="width: 615px; height: 400px"></div>
O tamanho definido com estilos a esta camada importante, porque ser o tamanho de
visualizao do mapa. O API de Google Maps reconhecer a largura e altura do container para
mostrar um mapa justamente ocupando esse espao.
Agora observamos o cdigo Javascript.
Primeiro, se inclui a biblioteca onde est o API Javascript para os mapas de Google.
<script src="http://maps.google.com/maps?file=api&v=2&key=#SUA CHAVE GOOGLE MAPS#"
type="text/javascript"></script>
Se observarmos, este cdigo necessita que indiquemos nossa prpria Key do API de Google
Maps, que conseguimos ao nos registrar. Teremos que coloc-la substituindo o texto =#SUA
CHAVE GOOGLE MAPS#.
Logo, podemos passar funo que gera o mapa, que se carrega quando termina de se
mostrar a pgina ( chamada pelo evento onload).
Essa funo est bastante comentada e alm disso, Quero deixar para artigos posteriores
diferentes pormenores da gerao de mapas, porm muito importante chamar a ateno
sobre um ponto crtico, que me deu um quebra-cabea quando estava provando os mapas, at
que consegui encontrar o erro. Trata-se do mtodo da classe GMap2 setCenter():
setCenter() tem que ser invocado justamente depois de instanciar o mapa!!!
Se tentamos instanciar o mapa e fazer coisas antes de centraliz-lo no funcionar. Isto algo
que est muito claro na documentao do API, porm como um pouco longa de ler, fcil de
no percebermos .
Em minhas provas me falhou porque tentava colocar um tipo de mapa (vista satlite) e logo o
centralizava. O problema que no sai nenhum erro especfico e muito difcil encontrar o
problema.
Artigo por Miguel Angel Alvarez - Traduo de JML
Com este cdigo teremos uma vista satlite de Barcelona centralizada na praa onde est a
esttua de Colombo assinalando com o dedo. Duas coisas que h que ver:
Na linha que carrega o API de Google Maps temos que substituir "AQUI-SUA-CHAVE"
10
pela chave de usurio do API proporcionada em Google ao nos registrar para usar seus
mapas em nosso web site. http://maps.google.com/maps?file=api&v=2&key=AQUISUA-CHAVE
A linha map.setMapType(G_SATELLITE_MAP); onde carregamos o tipo de vista.
Nota: Existem outros artigos anteriores onde explicamos temas adicionais dos mapas de Google que voc
deveria conhecer para entender este cdigo.: Google Maps API 2
Tambm podemos provar tirar essa linha onde especificamos o tipo de mapa. Veremos como
sai ento o mapa de ruas. o mesmo que se especificssemos o tipo de mapa normal.
map.setMapType(G_NORMAL_MAP);
Vejamos o cdigo completo de um mapa que tem o controle para mudar o tipo de vista. O
mapa estar centralizado em Pescola, provncia de Castelln, onde o Papa Luna tinha a sede.
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1">
<title>Exemplo de Google Maps API</title>
<script src="http://maps.google.com/maps?file=api&v=2&key=AQUI-SUA-CHAVE" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(40.35868573007256, 0.4062795639038086), 16);
11
map.addControl(new GMapTypeControl());
map.setMapType(G_SATELLITE_MAP);
}
}
//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="width: 615px; height: 400px"></div>
</body>
</html>
GLargeMapControl: Mostra uma interface para fazer zoom e mover-se pelo mapa, com
uma espcie de regra onde se pode escolher as diferentes aproximaes da vista. Este
controle aparece na parte superior esquerda.
GSmallMapControl: outro controle de usurio para fazer zoom e mover-se pelo mapa,
porm menor, que tambm aparece na esquina superior esquerda.
GSmallZoomControl: Um controle de usurio muito pequeno, que aparece na esquina
superior esquerda que simplesmente tem um boto para ampliar o zoom e outro boto
para reduzi-lo. Porm, no tem botes para mover-se pelo mapa.
GScaleControl: Este um controle que simplesmente informa sobre a escala atual do
mapa. Com este controle no se pode interagir, meramente informativo.
GMapTypeControl: Este controle inclui trs botes para mudar entre diferentes tipos de
mapa (mapa poltico de ruas e estradas, mapa satlite e mapa hbrido -ruas e estradas
sobre o fundo de satlite)
GOverviewMapControl: Com este controle aparece um pequeno mapa na esquina
inferior direita onde aparece uma vista geral com menos zoom do mapa atual, a atravs
do qual tambm podemos nos mover.
12
Como havamos dito antes, o desenvolvedor pode criar seus prprios controles para inclu-los
em seus mapas. Este um tema que trataremos mais adiante, porm agora podemos referir
documentao do API Google Maps para obter mais informao:
http://www.google.com/apis/maps/documentation/controls.html
Artigo por Miguel Angel Alvarez - Traduo de JML
Desenvolvimento com o API de Google Maps: www.criarweb.com/desenvolvimento-google-maps/
Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.
13
Por isso, quando colocamos o controle para mudar o tipo de mapa, nos aparecem trs botes,
para mudar entre qualquer destes tipos de mapas.
Pois bem, ns podemos aumentar a disponibilidade de tipos de mapas de Google, para incluir
novos mapas, como o mapa fsico (G_PHYSICAL_MAP), outros mapas existentes, qualquer que
possam fazer no futuro, ou inclusive mapas criados por ns mesmos.
Para indicar o tipo de mapa que desejamos que se mostre se faz da seguinte maneira:
map.setMapType(G_PHYSICAL_MAP);
Isto parece que no um passo obrigatrio para poder mostrar um tipo de mapa, e sim para
que aparea no controle e o usurio possa selecion-lo. Ou seja, para fazer um mapa de
Google fsico com map.setMapType(G_PHYSICAL_MAP) no necessrio que t-lo includo
previamente com map.addMapType(G_PHYSICAL_MAP);
Agora, para tirar um tipo de mapa do controle, fazemos atravs do mtodo removeMapType()
da classe GMap2, indicando um parmetro com o nome do tipo de mapa que queremos
desabilitar do controle. Por exemplo:
map.removeMapType(G_HYBRID_MAP);
14
Para acabar vou mostrar como criar um mapa de Google fsico, que ademais tenha um controle
que permita mudar entre os tipos de mapa poltico, satlite e fsico.
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(40.201022,-3.8736677),6);
map.addMapType(G_PHYSICAL_MAP);
map.removeMapType(G_HYBRID_MAP);
map.addControl(new GMapTypeControl());
map.setMapType(G_PHYSICAL_MAP);
}
}
No cdigo anterior o objeto map seria uma instancia da classe GMap2. A varivel marker
conter a marca que se quer inserir no mapa.
Agora vejamos como criar a marca. Explicaremos em dois passos:
1) Criamos um ponto
A marca deve se situar em um ponto concreto do mapa, que se define por uma longitude e
uma latitude (coordenadas x, y no plano terrestre). Para criar um ponto tem que se utilizar a
Desenvolvimento com o API de Google Maps: www.criarweb.com/desenvolvimento-google-maps/
Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.
15
2) Criamos a marca
Para criar a marca simplesmente utilizamos a classe GMarker, que em seu construtor deve
receber vrios valores. Por enquanto colocaremos somente o nico valor que obrigado
indicar, que o ponto sobre o que colocar a marca, criado no passo anterior.
var marker = new GMarker(point);
Exemplo completo
Isso tudo que necessitamos saber por enquanto. Embora logo veremos outro detalhes
interessantes que se podem personalizar nas marcas.
Vejamos o cdigo completo de um mapa de Google com uma marca na praa "Puerta del Sol"
de Madri.
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1">
<title>Exemplo de Google Maps API</title>
<script src="http://maps.google.com/maps?file=api&v=2&key=AQUI-SUA-CHAVE-GOOGLE-MAPS"
type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(40.41689826118782,-3.7034815549850464), 17);
map.addControl(new GLargeMapControl());
map.setMapType(G_SATELLITE_MAP);
var point = new GPoint (-3.7034815549850464, 40.41689826118782);
var marker = new GMarker(point);
map.addOverlay(marker);
}
}
//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="width: 615px; height: 400px"></div>
</body>
</html>
16
a varivel meuIcone neste caso um objeto da classe GIcon, que pode criar assim:
var meuIcone = new GIcon(G_DEFAULT_ICON);
meuIcone.image = "http://www.meudominio.org/mapas-google/arrow_down.png";
Neste caso, com a primeira instruo se cria um novo cone, a partir de G_DEFAULT_ICON. Ou
seja, um cone novo, porm com todas as caractersticas carregadas do G_DEFAULT_ICON.
Na seguinte linha se modifica a imagem do cone, atribuindo um novo valor a seu atributo
image.
Teramos que falar mais sobre a criao e modificao de cones, porque um tema que
requer maior detalhamento para domin-lo, porm deixaremos para mais adiante.
Artigo por Miguel Angel Alvarez - Traduo de JML
17
map.addControl(new GLargeMapControl());
map.setMapType(G_NORMAL_MAP);
GEvent.addListener(map, "click", tratamento_clique);
A linha que temos que ver agora a ltima, onde se adiciona o escutador de eventos.
GEvent a classe que adicionamos o event listener. Ao adicionar um evento para ser escutado
temos que prover de trs parmetros:
1. O objeto do API sobre o qual se tem que escutar o evento
2. O nome do evento que queremos detectar e fazer aes quando tiver captado
3. O nome da funo que se encarregar de tratar o evento.
Neste caso se adicionou um escutador de evento, para realizar aes quando se "clica" sobre o
objeto map, que o prprio mapa de google. As aes so simplesmente executar a funo
tratamento_clique (observe que s colocamos o nome da funo, sem os parnteses). Agora
temos que codificar o comportamento de nosso mapa quando se clica nele, ou seja, codificar a
funo tratamento_clique().
function tratamento_clique(overlay,point){
alert ("Ol amigo! Vejo que est a porque fez um clique!");
alert ("O ponto onde voc clicou : " + point.toString());
}
Como vemos, a funo recebe um par de parmetros, que so o contexto no qual se detectou
o evento. Estes dois parmetros so:
overlay: No vamos utiliz-lo agora. Tem que ver quando o usurio clica em uma
marca de um mapa.
point: que o ponto ou as coordenadas geogrficas onde o usurio fez o clique.
18
map.setMapType(G_NORMAL_MAP);
var point = new GPoint (-4,40);
var marker = new GMarker(point);
map.addOverlay(marker);
Este mapa, centralizado na Espanha, tem uma marca tambm na Espanha. Agora vejamos o
simples cdigo para detectar um evento de tipo click sobre o mapa:
GEvent.addListener(map, "click", function (overlay,point){
if (point){
marker.setPoint(point);
}
});
Cria-se o escutador de eventos, para o objeto map e o tipo de evento click, executando uma
funo que recebe dois parmetros (overlay,point). Lembramos que overlay a marca sobre a
que se clicou, se que se clicou em uma marca, e point o ponto do mapa onde se clicou, se
que se clicou sobre uma rea vazia do mapa.
Na funo comeamos com um if(point) que serve para saber se recebemos um ponto (S
recebemos o ponto se se clicou sobre uma rea vazia do mapa), porque s ento queremos
recolocar a marca. Ento, chamamos ao mtodo da marca setPoint(point) para reposicionar a
marca ao ponto recebido por parmetro.
bem simples, no ? Podemos ver o exemplo em funcionamento neste link.
Para acabar, deixo aqui o cdigo completo deste exerccio:
<!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" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1">
<title>Mapa de Google</title>
<script src="http://maps.google.com/maps?file=api&v=2&key=chave"
type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(40,-4),3);
map.addControl(new GLargeMapControl());
map.setMapType(G_NORMAL_MAP);
var point = new GPoint (-4,40);
var marker = new GMarker(point);
map.addOverlay(marker);
}
window.onload=load
//]]>
Desenvolvimento com o API de Google Maps: www.criarweb.com/desenvolvimento-google-maps/
Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.
19
</script>
</head>
<body>
<div id="map" style="width: 765px; height: 388px"></div>
</body>
</html>
Vemos o formulrio, que como qualquer um que tivermos utilizado em HTML, ao qual lhe
colocamos um name="posicao", para poder nos referirmos a ele atravs de Javascript. Logo,
vemos os campos X e Y, que so campos de texto normais, com seus respectivos name, para
poder atualizar seus valores desde o script.
Agora a nica mudana que incorporamos no cdigo de criao do mapa de Google, o
manejo do evento clique sobre o mapa.
GEvent.addListener(map, "click", function (overlay,point){
if (point){
marker.setPoint(point);
document.posicion.x.value=point.x
document.posicion.y.value=point.y
}
});
20
window.onload=load
//]]>
</script>
</head>
<body>
<div id="map" style="width: 765px; height: 278px"></div>
<div id="formulario" style="margin: 10px">
<form action="#" id="posicion" name="posicao">
X: <input type="text" name="x" value="" />
<br />
Y: <input type="text" name="y" value="" />
</form>
</div>
<br />
<br />
Por <a href="http://www.guiarte.com">guiarte.com</a>
</body>
</html>
21
pode mudar o zoom, para ampliar ou reduzir a definio. Neste artigo vamos aprender a obter
o zoom atual de um mapa quando se produza um evento, ou seja, como resposta a uma ao
de um usurio. Os eventos em mapas de Google j foram tratados anteriormente neste
manual, de fato, este artigo ir ampliar outro que j havamos realizado: Mostrar a posio de
uma marca de Google Maps em um formulrio. Neste caso mostraremos o zoom atual do mapa
de google ao clicar o usurio no mapa e o escreveremos em um formulrio na prpria pgina.
Na verdade, saber o zoom em um mapa simples, s temos que utilizar o mtodo getZoom()
da classe GMap2. getZoom() devolve um nmero inteiro, que o zoom atual do mapa.
Coloquemos que temos o objeto mapa em uma varivel chamada "map". Sendo assim,
executaremos o mtodo com isto:
zoom_atual = map.getZoom();
Assim, teramos salvo em uma varivel zoom_atual o valor inteiro do zoom do mapa.
Se quisermos mostrar em um formulrio na pgina o zoom atual, como resposta ao evento
clique, faremos algo como isto:
GEvent.addListener(map, "click", function (overlay,point){
if (point){
marker.setPoint(point);
document.posicion.x.value=point.x
document.posicion.y.value=point.y
zoom_atual = map.getZoom();
document.posicao.zoom.value=zoom_atual
}
});
Lembrar que para entender bem este cdigo teremos que ler o artigo anterior, assim como
possivelmente os precedentes deste manual que tratam sobre eventos.
Bom, ademais teremos que colocar no formulrio um campo novo para escrever o zoom do
mapa:
zoom atual:
22
melhor o tema.
Como se disse, para criar um tratamento de um evento produzido pelo usurio, se tem que
adicionar um escutador de evento com o mtodo addListener da classe GEvent. Este mtodo
tem que receber o objeto sobre o qual se escutar o evento, o tipo de evento e a funo que
se executar como resposta ao evento (o manejador de eventos). Para obter mais explicaes
deste passo consultar o artigo onde se tratam dos eventos de mapas de google em geral.
O manejador de evento zoomend, ou seja, a funo que se executa quando se produz o
evento, recebe duas variveis. Uma o antigo zoom que tinha o mapa e outra o novo zoom
que se colocou.
Supomos que temos criado um mapa de google e que est declarado no objeto map da classe
GMap2. Ento, se quisssemos criar um evento para que nos mostrasse em uma caixa de
alerta, as duas variveis com o antigo zoom e o novo, faramos algo como isto:
GEvent.addListener(map, "zoomend", function (antigoZoom, novoZoom){
alert("Mudou o zoom do mapa.\nAntigo Zoom: " + antigoZoom + "\nNovo Zoom: " + novoZoom);
});
23
janela ou porque se alteraram os atributos width e height da capa com Javascript ou por
qualquer modo- mudar automaticamente o tamanho do mapa para se ajustar dinamicamente
ao espao disponvel.
Dito isto, pode resultar pouco revelador este artigo, porque no vamos ver nada de Javascript,
nem de criao de mapas de Google, e sim mostraremos como construir com CSS, tendo em
conta que em uma das camadas h um mapa de Google. No obstante, certamente algumas
das informaes proporcionadas aqui no sero triviais para os leitores.
Em CriarWeb.com oferecemos um manual no qual se pode aprender a trabalhar com o API de
Google Maps.
Tambm recomendo a leitura do material que oferecemos em CriarWeb.com sobre a
construo CSS, pois darei por explicado os aspectos sobre construo com folhas de estilos e
portanto, no repetirei este contedo neste artigo.
Os atributos de altura e largura de um mapa so a camada que o contm
O exemplo mais simples que podemos encontrar para construir um mapa de google que
tenha dimenses em largura e altura fixas. como colocamos os mapas no manual at este
momento:
<div id="map" style="width: 765px; height: 388px"></div>
Neste exemplo, o mapa ocupa 765 pixel de largura e 388 de altura. Isto no tem nenhum
segredo.
Porm, o que acontece se quisermos que um mapa de Google Maps tenha a largura de toda a
janela do navegador? Porque sabemos que o navegador pode ter distintos tamanhos,
dependendo da definio de tela do visitante e se a janela estiver maximizada ou
dimensionada de qualquer outra forma.
Ento muito simples, podemos colocar width:100% na declarao de estilos css da camada
onde est o mapa.
<div id="map" style="width: 100%; height: 388px"></div>
Este mapa ocuparia toda a rea disponvel da janela do navegador, ou da camada onde estiver
contido.
O exemplo se complica se quisermos que o mapa de Google ocupe ademais toda a altura
disponvel no navegador, que tambm, sabemos, pode ser varivel dependendo das
caractersticas de tela ou do estado da janela do browser. O normal que provssemos algo
como isto:
<div id="map" style="height: 100%; width:100%;"></div>
Porm, isto tal qual, sem fazer nenhuma outra coisa, tem um problema e que
misteriosamente o mapa aparece vazio ou com height = 0. Isto porque os navegadores tm
problemas ao construir com height=100%. A idia para solucion-lo colocar a todas as
camadas que contenham ao mapa height:100%, assim como s etiquetas <BODY> e <HTML>
que tambm deveriam ter o height de 100%. Ento, assim deveria funcionar e o mapa
ocuparia toda a altura e largura da janela.
Desenvolvimento com o API de Google Maps: www.criarweb.com/desenvolvimento-google-maps/
Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.
24
Referncia: Podemos ver uma FAQ com explicaes sobre a utilizao do height:100% em CSS.
Agora vejamos o exemplo de um mapa de Google Maps que ocupa toda a largura e altura do
espao em uma pgina parte.
Construir um mapa de Google com width e height 100%, porm misturado com
outros elementos
Para acabar, veremos um exemplo de construo de um Google Maps que ocupa o 100% do
espao, porm que tem um cabealho e uma barra lateral. O cabealho e a lateral ocupam uns
espaos fixos e o mapa de google ocupar todo o lugar que os outros elementos da construo
deixam livres.
Para explic-lo de uma forma mais simples, veremos diretamente o exemplo em uma pgina
parte.
O exerccio simples, porm necessitaremos conhecimentos de CSS sobre construo e
posicionamento. O cdigo o seguinte:
<!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" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1">
<title>Mapa de Google</title>
<script src="http://maps.google.com/maps?file=api&v=2&key=coloque-sua-chave"
type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(33,0),3);
map.addControl(new GLargeMapControl());
map.setMapType(G_NORMAL_MAP);
}
}
window.onload=load
//]]>
</script>
<style type="text/css">
html,body{
margin:0px;
height:100%;
}
</style>
</head>
<body>
<div id="conteiner" style="width:100%; height:100%;">
<div id="cabecalho" style="background-color: #ffcc99; font-weight:bold; font-size: 110%; height: 23px; padding:
3px; margin-bottom:10px;">Isto o cabealho!!</div>
<div id="lateral" style="float:right; width:200px; height:100%; background-color:#eeff99;">
<div id="conteudolateral" style="padding: 30px 10px 0 10px;">
Por <a href="http://www.guiarte.com">guiarte.com</a>
<br />
<br />
Isto so contedos que colocamos na lateral esquerda. muito fcil construir com um mapa de Google em uma
25
Array com os vrtices das linhas, que se indica com os distintos pontos.
A cor das linhas, que um RGB em hexadecimal, como os que utilizamos para definir
cores em HTML, comeando por #. Ex: #ff8800.
A largura das linhas, em pixels.
A opacidade com um valor que vai de zero a um.
Outras opes.
O nico parmetro que necessitamos indicar de maneira obrigada so os pontos das linhas, os
outros parmetros so opcionais.
Para indicar os pontos dos vrtices, se utiliza a classe GLatLng, que serve para criar objetos
que tm as duas coordenadas geogrficas latitude e longitude. Por exemplo, para definir os
pontos onde esto Madri e Barcelona:
var madrid = new GLatLng(40.4165020, -3.702564);
var barcelona = new GLatLng(41.38878, 2.15898);
Agora que temos os pontos da lnea a criar, podemos fazer a chamada ao construtor do
polyline:
26
Como vemos, se definiu uma linha com dois pontos, com cor #0000dd que um azul, com 6
pixels de largura e 0.4 de opacidade.
Pintar a linha no mapa com addOverlay
Para que esta linha fique desenhada no mapa se utiliza o mtodo de GMap2 chamado
addOverlay() ao que lhe passamos por parmetro o polyline que havamos construdo.
map.addOverlay(polyline);
Todo o cdigo
Este o cdigo completo para a configurao do mapa do exemplo:
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(40.002,-4.12),5);
var madrid = new GLatLng(40.4165020, -3.702564);
var barcelona = new GLatLng(41.38878, 2.15898);
var polyline = new GPolyline([madrid, barcelona], "#0000dd", 6, 0.4);
map.addOverlay(polyline);
}
window.onload=load
27
especific-lo na hora de instanciar o polgono. Para isso, primeiro temos que definir uma opo
adicional ao polgono:
var opcoes_poligono = {geodesic:true};
Agora passamos essas opes como ltimo parmetro no construtor do objeto da classe
GPolyline.
Imaginemos que queremos construir um polgono que faz esta rota: Madri, Moscou, Istambul,
Roma, Tunsia e Madri. Primeiro, criaramos os pontos dessas cidades:
var
var
var
var
var
E logo instanciaramos o polgono, indicando que queremos linhas geodsicas, desta forma:
var poligono = new GPolyline([madri, moscou, istambul, roma, tunisia, madri], "#cccc00", 6, 0.6, opcoes_poligono);
Por ltimo ordenamos que se pinte o polgono no mapa com o mtodo addOverlay().
map.addOverlay(poligono);
Podemos ver um exemplo que faz este mapa com o polgono com linhas geodsicas.
Artigo por Miguel Angel Alvarez - Traduo de JML
Vou listar e explicar os parmetros do construtor de GPolygon para que fiquem claros:
Pontos dos vrtices: Como se pode ver, pode se gerar um polgono com um nmero
Desenvolvimento com o API de Google Maps: www.criarweb.com/desenvolvimento-google-maps/
Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.
28
indeterminado de vrtices. O nico que o percorrido de vrtices tem que estar fechado, ou
seja, comear e acabar no mesmo ponto, para que no se produzam comportamentos
indefinidos na hora de pintar o polgono. Todos os pontos ou vrtices tm que ser indicados
com um objeto GLatLng, que se compe das coordenadas de latitude e longitude.
Cor da borda: Uma cadeia com uma cor RGB em hexadecimal, tal como se definem em HTML.
Tamanho da borda: Um nmero inteiro, que o nmero de pixels da borda.
Opacidade da borda: Um nmero entre 0 e 1. Quanto mais baixo, mais transparente e
quanto mais alto mais opaco.
Cor_preenchimento: Um valor de tipo cadeia com a cor RGB em hexadecimal.
Opacidade do preenchimento: Tambm um valor entre 0 e 1, igual opacidade da borda.
Para dar a ordem a um mapa de Google que desenha um polgono gerado se utiliza mtodo
addOverlay() do objeto mapa, da classe GMap2, de maneira similar a como fizemos ao
desenhar linhas:
map.addOverlay(objeto_poligono);
muralha1
muralha2
muralha3
muralha4
muralha5
muralha6
=
=
=
=
=
=
new
new
new
new
new
new
GLatLng(40.65627360348711, -4.707534313201904);
GLatLng(40.65884555247438, -4.706525802612305);
GLatLng(40.658715329592404, -4.70139741897583);
GLatLng(40.658259547503505, -4.697213172912598);
GLatLng(40.656680564044166, -4.696569442749023);
GLatLng(40.65399457849209, -4.697320461273193);
Isto criar um polgono sobre os vrtices tirados da muralha de vila, com cor de borda
#669933, tamanho de borda 5 pixel, opacidade da borda 0.7 (mais para opaco), com cor do
preenchimento #996633 e opacidade do preenchimento 0.4 (mais para transparente).
Por ltimo, mostraramos o polgono com addOverlay().
map.addOverlay(polygon);
29
Logo, temos que criar o evento "click" marca, para que quando se clique sobre ela se chame
uma funo que se encarregue de mostrar ou ocultar o polgono. Com o API de Google Maps
se define um evento da seguinte maneira:
GEvent.addListener(marca, "click", ocultar_mostrar_poligono);
Isto adiciona o escutador de evento "click" associado ao objeto contido na varivel marca.
Quando se detecte o evento se executa a funo ocultar_mostrar_poligono(). Com outras
palavras, definimos um evento click sobre uma marca, para executar a funo
ocultar_mostrar_poligono() quando se produza.
Agora nos faltaria ver o cdigo da funo que mostra ou oculta o polgono. Esta funo faz uso
da varivel global onde armazenamos o objeto polgono, para acessar aos mtodos de tal
objeto.
function ocultar_mostrar_poligono(){
if (polygon.isHidden()){
//alert("Estava oculto");
polygon.show();
}else{
//alert("Estava se mostrando");
polygon.hide();
}
}
O primeiro que se faz ver se o polgono est ou no oculto, com o mtodo isHidden(), com
polygon.isHidden(), que devolve true no caso em que esteja oculto e false no caso em que
esteja se mostrando.
No caso de estar oculto, chamamos ao mtodo que o mostra, com polygon.show().
No caso de estar visualmente ativo, chamamos ao mtodo para ocult-lo, com polygon.hide().
E no h mais mistrios que no tenhamos visto anteriormente no manual do API de Google
Maps.
Deixo novamente o link para ver o exemplo em funcionamento em uma janela parte.
Observar seu cdigo fonte para obter mais informao.
30
Os limites da imagem so por sua vez outra classe, chamada GLatLngBounds, que como um
retngulo formado por dois pontos geogrficos, as coordenadas Sul-Oeste e Norte-Leste,
definidas por sua vez com os valores de latitude e longitude. Podemos ver a seguinte imagem,
na que marcamos os dois pontos que necessitamos para definir as bordas ou limites da
imagem, que utilizaremos no construtor da classe GLatLngBounds.
Por sua vez, os pontos x1 e x2 so coordenadas latitude e longitude que devemos criar com a
classe GLatLng, desta maneira:
var x1 = new GLatLng(valor_latitude, valor_longitude);
Uma vez temos o objeto imagem da classe GLatLngBounds, temos que coloc-lo no mapa com
o mtodo do mapa addOverlay(), que havamos utilizado anteriormente para sobrepor
elementos em mapas de google como os polgonos.
map.addOverlay(imagem);
Vemos o cdigo completo para fazer um mapa com uma imagem sobreposta.
Desenvolvimento com o API de Google Maps: www.criarweb.com/desenvolvimento-google-maps/
Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.
31
Como se pode comprovar, sobrepor uma imagem algo relativamente simples, embora
tenhamos que definir bem os limites da imagem para que o renderizado fique bem e no se
estique demais na foto.
O exemplo em funcionamento pode ser visto em uma pgina parte.
Artigo por Miguel Angel Alvarez - Traduo de JML
32
Temos que passar a addOverlay() a instancia da camada que queremos mostrar, que criamos
ao chamar ao construtor de GLayer.
O cdigo completo para criar um mapa de Google com as fotos de Panoramio seria o seguinte:
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(40.002,-4.12),8);
var camada_panoramio = new GLayer("com.panoramio.all");
map.addOverlay(camada_panoramio);
}
window.onload=load
33
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(40.41,-3.717),13);
var camada_wikipedia = new GLayer("org.wikipedia.pt");
map.addOverlay(camada_wikipedia);
}
}
window.onload=load
Neste artigo sobre incluir as fotos de Panoramio j foi explicado este script passo a passo,
porm podemos remarcar as seguintes particularidades:
var camada_panoramio = new Glayer("org.wikipedia.pt");
Com essa linha se cria uma nova camada, como um objeto da classe Glayer, passando como
parmetro ao construtor a referncia id da camada que queremos mostrar, "org.wikipedia.pt".
map.addOverlay(camada_wikipedia);
34
representa um grande trabalho, porque teramos que ir, pas por pas, apontando os pontos da
silhueta em arrays, e ademais, quanto mais detalhistas quisermos ser, mais pontos teremos
que extrair. Felizmente, outras pessoas j se encarregaram de obter cada um dos pontos
geogrficos das silhuetas dos pases e alm do mais, disponibilizaram seu trabalho com licena
copyleft, para que outros possam utiliz-lo em suas explicaes.
H um projeto criado por Anieto2k que nos servir de maneira excelente para obter as linhas
de pontos, em uma estrutura de dados tipo array de coordenadas GLatLng, que se pode
utilizar diretamente para a criao dos polgonos em mapas de Google. O projeto mencionado
se chama CountryPoints e est em Google Code na URL:
http://code.google.com/p/countrypoints/
CountryPoints consiste basicamente em um arquivo com cdigo Javascript onde se declaram
uma srie de arrays com pontos geogrficos, baseados em latitudes e longitudes, para gerar
as silhuetas de cada pas. Com esses pontos se podem traar os polgonos para desenhar os
pases. Embora, princpio poderia parecer suficiente um polgono para cada pas, h que
assinalar que muitos deles contm ilhas ou territrios separados do principal, que devem se
especificar em polgonos distintos. Portanto, em CountryPoints temos, para cada pas, uma ou
mais sucesses de pontos para formar um ou mais polgonos sobre a superfcie.
Para ilustrar a forma deste arquivo de pontos, mostraremos aqui um extrato dos pontos de
vrios pases:
//primeiro se declara um objeto
var country = {};
//logo se definem propriedades com as coordenadas para cada pas
//se utilizam cdigos de duas letras para cada pas
country.GU = {
desc: 'GUAM',
coord: [ [new GLatLng(13.235, 144.7094), new GLatLng(13.42778, 144.6552), new GLatLng(13.65229, 144.8761),
new GLatLng(13.235, 144.7094)]]
};
country.PT = {
desc: 'PORTUGAL',
coord: [ [new GLatLng(37.25319, -7.431854), new GLatLng(37.00889, -7.897779), new GLatLng(37.02631,
-8.9892369), new GLatLng(38.71722, -9.118473)], [new GLatLng(37.70555, -25.45611), new GLatLng(37.88389,
-25.85417), new GLatLng(37.70555, -25.45611)], [new GLatLng(32.6375, -16.94361), new GLatLng(32.6375,
-16.94361)]]
};
Escolhi dois pases para mostrar a sintaxe de declarao de pontos de suas silhuetas, embora
tenha tirado muitos pontos a Portugal para que coubesse bem no texto deste artigo de
criarweb.com. Observemos que os pontos se salvam em uma propriedade chamada "coord",
que um array de duas dimenses. Na primeira dimenso tem cada um dos polgonos para
cada um dos territrios separados do pas. Na segunda dimenso tem cada um dos pontos
para fazer o polgono, definidos com objetos GLatLng.
Sendo assim, para criar os polgonos de um pas, por exemplo Portugal, teremos que fazer
algo como isto:
1) Incluir o array com os pontos dos pases.
Para isso, teremos que incluir um cdigo Javascript externo, que est no projeto CountryPoints
de Google Code. (podemos inclu-lo desde o servidor de Google Code ou diretamente baix-lo
e pass-lo ao nosso espao de hosting.
Desenvolvimento com o API de Google Maps: www.criarweb.com/desenvolvimento-google-maps/
Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.
35
Os cdigos de pases de duas letras so por exemplo, PT para Portugal, ES para Espanha e BR
para Brasil... Estes cdigos esto normalizados segundo normativa ISO 3166-1.
3) Percorrer as coordenadas para criar os polgonos
Com um loop percorro os grupos de coordenadas para criar cada um dos polgonos. (Porque
devemos lembrar que o array de coordenadas era de duas dimenses, para cada um dos
territrios separados do pas)
for (i=0; i<coordenadas_portugal.length; i++){
map.addOverlay(new GPolygon(coordenadas_portugal[i],"#669933", 2, 0.7, "#669933", 0.4));
}
36
}
window.onload=load
//]]>
</script>
37