/* Title: Mapa i3GEO.mapa Executa operações obre o mapa principal Em i3GEO.mapa.dialogo estao as funcoes de abertura dos dialogos para alteracao das propriedades do mapa, como cor de fundo, tipo de imagem, legenda etc. Arquivo: i3geo/classesjs/classe_mapa.js Licença: 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@gmail.com 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 ADEQUACAO 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'){ var i3GEO = {}; } i3GEO.mapa = { /* Propriedade: TEMASINICIAISLIGADOS Lista indicando quais temas serao adicionados ao mapa na inicializacao Esse valor e utilizado para completar a variavel mashuppar utilizada por i3GEO. Os temas sao aqueles que aparecem em i3geo/temas Type: {string} Default: {} */ TEMASINICIAISLIGADOS: "", /* Propriedade: TEMASINICIAISLIGADOS Lista indicando quais temas serao ligados na inicializacao Esse valor e utilizado para completar a variavel mashuppar utilizada por i3GEO. Os temas sao aqueles que aparecem em i3geo/temas Type: {string} Default: {} */ TEMASINICIAIS: "", /* Propriedade: AUTORESIZE Indica se o tamanho do mapa sera ajustado toda vez que o navegador for redimensionado Type: {boolean} Default: {false} */ AUTORESIZE: false, /* Armazena o nome dos objetos geoXml adicionados ao mapa pela API do google maps Tipo: {Array} */ GEOXML: [], /* Function: insereDobraPagina Insere o icone do tipo "dobra de pagina" que permite alterar o renderizador do mapa Parametros: tipo {string} - tipo de icone googlemaps|openlayers imagem {string} - endereco da imagem que sera utilizada no icone */ 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(evt){ i3GEO.Interface.atual2gm.inicia(); }; } if(tipo === "openlayers"){ novoel.onclick = function(evt){ 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"; $i(i3GEO.Interface.IDMAPA).appendChild(novoel); YAHOO.util.Event.addListener("i3GEOdobraPagina", "click", YAHOO.util.Event.stopPropagation); YAHOO.util.Event.addListener("i3GEOdobraPagina", "click", YAHOO.util.Event.preventDefault); }, /* Reposiciona o icone do tipo "dobra de pagina" */ 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"; }, /* Ativa o redimensionamento automatico do mapa sempre que o navegador for redimensionado e 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); }; }, /* Ajusta o posicionamento do corpo do mapa Esse ajuste e necessario na inicializacao, uma vez que o mapa utiliza style.position='absolute' Parameters: elemento {String} - id do elemento HTML que devera ser ajustado e que contem 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){i3GEO.janela.tempoMsg("Ocorreu um erro. i3GEO.mapa.ajustaPosicao "+e);} }, /* Function: ativaTema Altera a variavel i3GEO.temaAtivo e atualiza a interface em funcao do novo tema que for ativado O tema anteriormente ativo tem sua cor alterada para a cor normal e o novo tema e destacado com uma cor diferente Executa tambem as funcoes armazenadas em i3GEO.eventos.ATIVATEMA Parametros: codigo {string} - codigo 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($trad("x21"));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";} } }, /* Verifica se ocorreu algum problema na atualizacao do corpo do mapa e inicia o processo de tentativa de recuperacao Parametro: retorno {string} - objeto recebido da funcao PHP de atualizacao 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){ i3GEO.janela.tempoMsg("Erro no mapa. Sera feita uma tentativa de recuperacao."); i3GEO.mapa.recupera.inicia(); } else{ i3GEO.janela.tempoMsg("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("i3GEO.mapa.verifica "+e);} } }, /* Tenta recuperar o mapa caso ocorra algum problema O i3Geo mantem sempre uma copia do arquivo mapfile em uso. Essa funcao tenta usar essa copia para restaurar o funcionamento do mapa */ recupera:{ /* Armazena a quantidade de tentativas de recuperacao que foram feitas Tipo: {Integer} */ TENTATIVA: 0, /* Inicia a tentativa de recuperacao */ inicia: function(){ i3GEO.mapa.ajustaPosicao(); i3GEO.janela.fechaAguarde(); if(this.recupera.TENTATIVA === 0){ this.recupera.TENTATIVA++; this.recupera.restaura(); } }, /* Restaura o mapa para a copia de seguranca existente no servidor */ restaura: function(){ i3GEO.php.recuperamapa(i3GEO.atualiza); } }, /* Classe: i3GEO.mapa.legendaHTML Controla a obtencao da legenda do mapa formatada em HTML. util para mostrar a legenda na tela */ legendaHTML:{ /* Propriedade: incluiBotaoLibera Define se na legenda sera incluido o botao para liberar a legenda e inclui-la em uma janela flutuante Tipo: {boolean} Default: {true} */ incluiBotaoLibera: false, /* Armazena o id definido na criacao da legenda */ ID: "", /* * Armazena a lista de camadas que devem ficar escondidas na legenda */ CAMADASSEMLEGENDA: [], /* Function: cria Cria a legenda HTML O elemento HTML definido em ID deve ter style=display:block A legenda e incluida no id definido. Se id for igual a "", sera apenas definido o evento de atualizacao, permitindo que seja criada a janela flutuante, por exemplo: i3GEO.mapa.legendaHTML.cria(""); i3GEO.mapa.legendaHTML.libera(); Parametros: id {String} - id do elemento que recebera 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 = $i("wlegenda_corpo"), temp = function(retorno){ var legenda = "",ins,re; re = new RegExp("", "g"); if (retorno.data !== "erro" && retorno.data !== undefined ){ legenda = "
'+$trad("x11")+'