/*jslint plusplus:false,white:false,undef: false, rhino: true, onevar: true, evil: false */
/*
Title: Mapa
Arquivo:
i3geo/classesjs/classe_mapa.js
Licenca:
GPL2
i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
Direitos Autorais Reservados (c) 2006 Minist�rio do Meio Ambiente Brasil
Desenvolvedor: Edmar Moretti edmar.moretti@mma.gov.br
Este programa � software livre; voc� pode redistribu�-lo
e/ou modific�-lo sob os termos da Licen�a P�blica Geral
GNU conforme publicada pela Free Software Foundation;
Este programa � distribu�do na expectativa de que seja �til,
por�m, SEM NENHUMA GARANTIA; nem mesmo a garantia impl�cita
de COMERCIABILIDADE OU ADEQUA��O A UMA FINALIDADE ESPEC�FICA.
Consulte a Licen�a P�blica Geral do GNU para mais detalhes.
Voc� deve ter recebido uma c�pia da Licen�a P�blica Geral do
GNU junto com este programa; se n�o, escreva para a
Free Software Foundation, Inc., no endere�o
59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
*/
if(typeof(i3GEO) === 'undefined'){
i3GEO = [];
}
/*
Classe: i3GEO.mapa
Cria e processa o mapa principal
Em i3GEO.mapa.dialogo est�o as fun��es de abertura dos di�logos para altera��o das propriedades do mapa,
como cor de fundo, tipo de imagem, legenda etc.
*/
i3GEO.mapa = {
/*
Propriedade: AUTORESIZE
Indica se o tamanho do mapa ser� ajustado toda vez que o navegador for redimensionado
Type:
{boolean}
Default:
{false}
*/
AUTORESIZE: false,
/*
Variavel: GEOXML
Armazena o nome dos objetos geoXml adicionados ao mapa pela API do google maps
Tipo:
{Array}
*/
GEOXML: [],
/*
Function: insereDobraPagina
Insere o �cone do tipo "dobra de�p�gina" que permite alterar o renderizador do mapa
Parametros:
tipo {string} - tipo de �cone googlemaps|openlayers
imagem {string} - endere�o da imagem que ser� utilizada no �cone
*/
insereDobraPagina: function(tipo,imagem){
var novoel = $i("i3GEOdobraPagina");
if(!novoel){
novoel = document.createElement("img");
}
novoel.src = imagem;
novoel.id = "i3GEOdobraPagina";
if(tipo === "googlemaps")
{novoel.onclick = function(){i3GEO.Interface.atual2gm.inicia();};}
if(tipo === "openlayers")
{novoel.onclick = function(){i3GEO.Interface.atual2ol.inicia();};}
novoel.style.cursor = "pointer";
novoel.style.position = "absolute";
novoel.style.top = i3GEO.parametros.h - 35 + "px";
novoel.style.zIndex = "50000";
novoel.style.left = i3GEO.parametros.w - 35 + "px";
YAHOO.util.Event.addListener(novoel, "click", YAHOO.util.Event.stopPropagation);
$i(i3GEO.Interface.IDMAPA).appendChild(novoel);
},
/*
Function: reposicionaDobraPagina
Reposiciona o �cone do tipo "dobra de�p�gina"
*/
reposicionaDobraPagina: function(){
var novoel = $i("i3GEOdobraPagina");
if(!novoel){
return;
}
novoel.style.top = i3GEO.parametros.h - 35 + "px";
novoel.style.left = i3GEO.parametros.w - 35 + "px";
},
/*
Function: ativaAutoResize
Ativa o redimensionamento autom�tico do mapa sempre que o navegador for redimensionado
� definido como um evento do elemento window
*/
ativaAutoResize: function(){
window.onresize = function(){
var Dw,Dh, r = false;
Dw = YAHOO.util.Dom.getViewportWidth();
Dh = YAHOO.util.Dom.getViewportHeight();
if(Math.abs(Dw - i3GEO.tamanhodoc[0]) > 50){
r = true;
}
if(Math.abs(Dh - i3GEO.tamanhodoc[1]) > 50){
r = true;
}
if(r === false)
{return;}
i3GEO.tamanhodoc = [Dw,Dh];
setTimeout(function(){
i3GEO.reCalculaTamanho();
i3GEO.barraDeBotoes.recria("i3geo_barra2");
if(i3GEO.Interface.TABLET === true)
{i3GEO.guias.escondeGuias();return;}
if(i3GEO.guias.TIPO === "movel")
{i3GEO.guias.guiaMovel.reposiciona();}
else
{i3GEO.guias.ajustaAltura();}
i3GEO.mapa.reposicionaDobraPagina();
},2000);
};
},
/*
Function: ajustaPosicao
Ajusta o posicionamento do corpo do mapa
Esse ajuste � necess�rio na inicializa��o, uma vez que o mapa utiliza style.position='absolute'
Parameters:
elemento {String} - id do elemento HTML que dever� ser ajustado e que cont�m o mapa
*/
ajustaPosicao: function(elemento){
if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.ajustaPosicao()");}
if(arguments.length === 0){return;}
var imagemxi = 0,
imagemyi = 0,
dc = $i(elemento),
c;
if(!dc){return;}
try{
while ((dc.offsetParent) && (dc.offsetParent.id !== "i3geo")){
dc = dc.offsetParent;
imagemxi += dc.offsetLeft;
imagemyi += dc.offsetTop;
}
c = $i(i3GEO.Interface.IDCORPO);
if (c){
c.style.position="absolute";
if(navm)
{$left(i3GEO.Interface.IDCORPO,imagemxi - 1);}
else
{$left(i3GEO.Interface.IDCORPO,imagemxi);}
$top(i3GEO.Interface.IDCORPO,imagemyi);
}
}
catch(e){alert("Ocorreu um erro. i3GEO.mapa.ajustaPosicao "+e);}
},
/*
Function: ativaTema
Altera a vari�vel i3GEO.temaAtivo e atualiza a interface em fun��o do novo tema que for ativado
O tema anteriormente ativo tem sua cor alterada para a cor normal e o novo tema � destacado com uma cor diferente
Executa tamb�m as fun��es armazenadas em i3GEO.eventos.ATIVATEMA
Parametros:
codigo {string} - c�digo da camada
*/
ativaTema: function(codigo){
if(codigo){
if(codigo === "")
{return;}
if(i3GEO.temaAtivo !== "")
{i3GEO.util.defineValor("ArvoreTituloTema"+i3GEO.temaAtivo,"style.color","");}
i3GEO.temaAtivo = codigo;
i3GEO.util.defineValor("ArvoreTituloTema"+codigo,"style.color","brown");
}
},
/*
Function: ativaLogo
Ativa ou desativa a logo marca.
*/
ativaLogo: function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.ativaLogo()");}
if(i3GEO.Interface.ATUAL === "googlemaps")
{alert("Essa opera��o n�o funciona nessa interface");return;}
i3GEO.php.ativalogo(i3GEO.atualiza);
var cr = $i("i3GEOcopyright");
if(cr){
if(cr.style.display === "block")
{cr.style.display = "none";}
else
{cr.style.display = "block";}
}
},
/*
Function: verifica
Verifica se ocorreu algum problema na atualiza��o do corpo do mapa e inicia o processo de tentativa de recupera��o
Parametro:
retorno {string} - objeto recebido da fun��o PHP de atualiza��o do mapa
*/
verifica:function(retorno){
if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.verifica()");}
try{
if(retorno.data)
{retorno = retorno.data;}
if (retorno.variaveis)
{retorno = retorno.variaveis;}
if ((retorno === "erro") || (typeof(retorno) === 'undefined')){
i3GEO.mapa.ajustaPosicao();
i3GEO.janela.fechaAguarde();
i3GEO.mapa.recupera.inicia();
}
i3GEO.mapa.recupera.TENTATIVA = 0;
}
catch(e){
if(i3GEO.Interface.ATUAL === "openlayers" || i3GEO.Interface.ATUAL === "googlemaps"){
i3GEO.janela.fechaAguarde();
return;
}
if(this.recupera.TENTATIVA === 0){
alert("Erro no mapa. Sera feita uma tentativa de recuperacao.");
i3GEO.mapa.recupera.inicia();
}
else{
alert("Recuperacao impossivel. Sera feita uma tentativa de reiniciar o mapa.");
if (this.recupera.TENTATIVA === 1){
this.recupera.TENTATIVA = 2;
i3GEO.php.reiniciaMapa(i3GEO.atualiza);
}
}
if(typeof(console) !== 'undefined'){console.error(e);}
}
},
/*
Classe: i3GEO.mapa.recupera
Tenta recuperar o mapa caso ocorra algum problema
O i3Geo mant�m sempre uma c�pia do arquivo mapfile em uso. Essa fun��o tenta
usar essa c�pia para restaurar o funcionamento do mapa
*/
recupera:{
/*
Variavel: TENTATIVA
Armazena a quantidade de tentativas de recupera��o que foram feitas
Tipo:
{Integer}
*/
TENTATIVA: 0,
/*
Function: inicia
Inicia a tentativa de recupera��o
*/
inicia: function(){
i3GEO.mapa.ajustaPosicao();
i3GEO.janela.fechaAguarde();
if(this.recupera.TENTATIVA === 0){
this.recupera.TENTATIVA++;
this.recupera.restaura();
}
},
/*
Function: restaura
Restaura o mapa para a c�pia de seguran�a existente no servidor
*/
restaura: function(){
i3GEO.php.recuperamapa(i3GEO.atualiza);
}
},
/*
Classe: i3GEO.mapa.legendaHTML
Controla a obten��o da legenda do mapa formatada em HTML.
�til para mostrar a legenda na tela
*/
legendaHTML:{
/*
Propriedade: incluiBotaoLibera
Define se na legenda ser� incluido o bot�o para liberar a legenda e inclu�-la em uma janela flutuante
Tipo:
{boolean}
Default:
{true}
*/
incluiBotaoLibera: true,
/*
Variavel: ID
Armazena o id definido na cria��o da legenda
*/
ID: "",
/*
Function: cria
Cria a legenda HTML
A legenda � incluida no id definido. Se id for igual a "", ser� apenas definido o evento de atualiza��o
permitindo que seja criada a janela flutuante apenas, por exemplo:
i3GEO.mapa.legendaHTML.cria("");
i3GEO.mapa.legendaHTML.libera();
Parametros:
id {String} - id do elemento que receber� a legenda
*/
cria: function(id){
if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.legendaHTML.cria()");}
if(arguments.length === 0)
{id = "";}
i3GEO.mapa.legendaHTML.ID = id;
if(i3GEO.eventos.NAVEGAMAPA.toString().search("i3GEO.mapa.legendaHTML.atualiza()") < 0)
{i3GEO.eventos.NAVEGAMAPA.push("i3GEO.mapa.legendaHTML.atualiza()");}
i3GEO.mapa.legendaHTML.atualiza();
},
/*
Function: atualiza
Atualiza o elemento HTML do mapa utilizado para mostrar a legenda
*/
atualiza: function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.legendaHTML.atualiza()");}
var idleg,
temp = function(retorno){
var ins,elementos,i,temp,re;
re = new RegExp("", "g");
if(i3GEO.mapa.legendaHTML.ID !== "" && $i(i3GEO.mapa.legendaHTML.ID)){
if ((retorno.data !== "erro") && (retorno.data !== undefined)){
ins = "";
if(i3GEO.mapa.legendaHTML.incluiBotaoLibera === true)
{ins += '
Mostra a legenda em uma janela