/*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: 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 temp = setTimeout(function(){ i3GEO.reCalculaTamanho(); i3GEO.barraDeBotoes.recria("i3geo_barra2"); if(i3GEO.Interface.TABLET === true) {i3GEO.guias.escondeGuias();} else { i3GEO.guias.ajustaAltura(); } },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, imagemxref = 0, imagemyref = 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(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.contadorAtualiza++; i3GEO.php.ativalogo(i3GEO.atualiza); }, /* 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{ i3GEO.janela.abreAguarde("ajaxCorpoMapa",$trad("o3")); 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 s,ins,elementos,i; if(i3GEO.mapa.legendaHTML.ID !== "" && $i(i3GEO.mapa.legendaHTML.ID)){ if ((retorno.data !== "erro") && (retorno.data !== undefined)){ s = i3GEO.configura.locaplic+"/imagens/branco.gif"; ins = ""; if(i3GEO.mapa.legendaHTML.incluiBotaoLibera === true) {ins += '
Mostra a legenda em uma janela