/*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; tanto a versão 2 da Licença. 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 = { /* Variavel: GEOXML Armazena o nome dos objetos geoXml adicionados ao mapa pela API do google maps Tipo: {Array} */ GEOXML: [], /* 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;} if(!$i(elemento)){return;} var imagemxi,imagemyi,imagemxref,imagemyref,dc,c; try{ imagemxi = 0; imagemyi = 0; imagemxref = 0; imagemyref = 0; dc = $i(elemento); while ((dc.offsetParent) && (dc.offsetParent.id !== "i3geo")){ dc = dc.offsetParent; imagemxi = imagemxi + dc.offsetLeft; imagemyi = 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 Parametros: codigo {string} - código da camada */ ativaTema: function(codigo){ var noArvoreCamadas = $i("arrastar_"+codigo), noAtualArvoreCamadas = $i("arrastar_"+i3GEO.temaAtivo); i3GEO.temaAtivo = codigo; if(noAtualArvoreCamadas){ noAtualArvoreCamadas.style.textDecoration = ""; } if(noArvoreCamadas){ noArvoreCamadas.style.textDecoration = "underline"; } }, /* Function: ativaLogo Ativa ou desativa a logo marca. */ ativaLogo: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.ativaLogo()");} 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") || (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.janela.fechaAguarde(); return; } if(i3GEO.mapa.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 (i3GEO.mapa.recupera.TENTATIVA === 1){ i3GEO.mapa.recupera.TENTATIVA = 2; i3GEO.contadorAtualiza++; 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(i3GEO.mapa.recupera.TENTATIVA === 0){ i3GEO.mapa.recupera.TENTATIVA++; i3GEO.mapa.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 a legenda do mapa que são utilizados para mostrar a legenda */ atualiza: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.legendaHTML.atualiza()");} var 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/solta.gif"; ins = ""; if(i3GEO.mapa.legendaHTML.incluiBotaoLibera === true) {ins += "
";} ins += "
"+ retorno.data.legenda + "
"; $i(i3GEO.mapa.legendaHTML.ID).innerHTML = ins; } } if ($i("wlegenda")){ $i("wlegenda").innerHTML = retorno.data.legenda; elementos = $i("wlegenda").getElementsByTagName("input"); for(i=0;i   ");}, /* Function: tamanho Abre a janela que muda o tamanho do mapa */ tamanho: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.dialogo.tamanho()");} if(typeof(i3GEOF.opcoesTamanho) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/opcoes_tamanho/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.opcoesTamanho.criaJanelaFlutuante()","i3GEOF.opcoesTamanho_script"); } }, /* Function: tipoimagem Abre a janela que define um filtro gráfico (sépia por exemplo) sobre a imagem gerada alterando suas características */ tipoimagem: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.tipoimagem()");} if(typeof(i3GEOF.tipoimagem) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/tipoimagem/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.tipoimagem.criaJanelaFlutuante()","i3GEOF.tipoimagem_script"); } }, /* Function: corFundo Abre a janela que altera a cor do fundo do mapa atual. */ corFundo: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.dialogo.corFundo()");} if(typeof(i3GEOF.gradeCoord) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/opcoes_fundo/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.opcoesFundo.criaJanelaFlutuante()","i3GEOF.opcoesFundo_script"); } }, /* Function: opcoesEscala Abre a janela para definição das opções da barra de escala. */ opcoesEscala: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.dialogo.opcoesEscala()");} if(typeof(i3GEOF.opcoesEscala) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/opcoes_escala/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.opcoesEscala.criaJanelaFlutuante()","i3GEOF.opcoesEscala_script"); } }, /* Function: opcoesLegenda Abre a janela de configuração da legenda do mapa */ opcoesLegenda: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.dialogo.opcoesLegenda()");} if(typeof(i3GEOF.opcoesLegenda) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/opcoes_legenda/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.opcoesLegenda.criaJanelaFlutuante()","i3GEOF.opcoesLegenda_script"); } }, /* Function: gradeCoord Abre a janela que gera grade de coordenadas */ gradeCoord: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.dialogo.gradeCoord()");} if(typeof(i3GEOF.gradeCoord) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/gradecoord/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.gradeCoord.criaJanelaFlutuante()","i3GEOF.gradeCoord_script"); } }, /* Function: cliqueTexto Abre o diálogo para inclusão de textos diretamente no mapa Registra os eventos que controlam o clique sobre o mapa */ cliqueTexto: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.dialogo.cliqueTexto()");} if(typeof(i3GEOF.inseretxt) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/inseretxt/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.inseretxt.criaJanelaFlutuante()","i3GEOF.inseretxt_script"); } }, /* Function: selecao Abre o diálogo para seleção de elementos */ selecao: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.dialogo.selecao()");} if(typeof(i3GEOF.selecao) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/selecao/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.selecao.criaJanelaFlutuante()","i3GEOF.selecao_script"); } }, /* Function: cliquePonto Abre o diálogo para inclusão de pontos diretamente no mapa Registra os eventos que controlam o clique sobre o mapa */ cliquePonto: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.dialogo.cliquePonto()");} if(typeof(i3GEOF.inserexy) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/inserexy2/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.inserexy.criaJanelaFlutuante()","i3GEOF.inserexy_script"); } }, /* Function: cliqueGrafico Abre o diálogo para inclusão de gráficos diretamente no mapa Registra os eventos que controlam o clique sobre o mapa */ cliqueGrafico: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.dialogo.cliqueGrafico()");} if(typeof(i3GEOF.insereGrafico) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/inseregrafico/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.insereGrafico.criaJanelaFlutuante()","i3GEOF.insereGrafico_script"); } }, /* Function: cliqueIdentificaDefault Abre o diálogo para obtenção de informações quando o usuário clica no mapa. Essa é a função padrão definida em i3GEO.configura */ cliqueIdentificaDefault: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.dialogo.cliqueIdentificaDefault()");} if (g_tipoacao === "identifica"){ i3GEO.eventos.MOUSEPARADO.remove("verificaTip()"); if(typeof(i3GEOF.identifica) === 'undefined'){ //javascript que será carregado var js = i3GEO.configura.locaplic+"/ferramentas/identifica/index.js.php"; //carrega o script i3GEO.util.scriptTag(js,"i3GEOF.identifica.criaJanelaFlutuante()","i3GEOF.identifica_script"); } else{ i3GEOF.identifica.x = objposicaocursor.ddx; i3GEOF.identifica.y = objposicaocursor.ddy; i3GEOF.identifica.buscaDadosTema(i3GEO.temaAtivo); return; } } }, /* Function: verificaTipDefault Mostra etiquetas no mapa com informações sobre os temas com etiquetas ativas Essa é a função padrão definida em i3GEO.configura */ verificaTipDefault: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.dialogo.verificaTipDefault()");} var ntemas,etiquetas,j,retorna; ntemas = i3GEO.arvoreDeCamadas.CAMADAS.length; etiquetas = false; for(j=0;j
";} else {titulo = "";} tips = (temas[j].resultado.tips).split(","); ntips = tips.length; ins = ""; for(r=0;r
";} if(valor !== "" && link !== "") {ins += "" + alias + " : " + valor + "
";} if(img !== "") {ins += img+"
";} mostra = true; } else{ ins += "" + valor + "
"; mostra = true; } } } } catch(e){ if(typeof(console) !== 'undefined'){console.error(e);} } } if(ins !== "") {res += titulo + ins;} } if(!mostra){ if($i("tip")) {$i("tip").style.display="none";} } else{ if(i3GEO.configura.tipotip !== "balao"){ n = i3GEO.janela.tip(); $i(n).style.textAlign="left"; $i(n).innerHTML += res; } else{ if(i3GEO.Interface.ATUAL === "googleearth"){ //res = '
'+res+'
'; i3GEO.Interface.googleearth.balao(res,objposicaocursor.ddx,objposicaocursor.ddy); } else{ i3GEO.util.criaPin('marcaIdentifica',i3GEO.configura.locaplic+"/imagens/grabber.gif","12px","12px"); i3GEO.util.posicionaImagemNoMapa("marcaIdentifica"); balloon = new Balloon(); balloon.delayTime = 0; res = "
"+res+"
"; balloon.showTooltip($i("marcaIdentifica"),res); $i('marcaIdentifica').onclick = $i("closeButton").onclick; } } } } if(i3GEO.Interface.ATUAL==="padrao"){ temp = "zoom"; if(i3GEO.Interface.ATIVAMENUCONTEXTO) {temp = "identifica_contexto";} i3GEO.util.mudaCursor(i3GEO.configura.cursores,temp,"img",i3GEO.configura.locaplic); } } catch(e){ if(i3GEO.Interface.ATUAL==="padrao"){ temp = "identifica"; if(i3GEO.Interface.ATIVAMENUCONTEXTO) {temp = "identifica_contexto";} i3GEO.util.mudaCursor(i3GEO.configura.cursores,temp,"img",i3GEO.configura.locaplic); } if(typeof(console) !== 'undefined'){console.error(e);} } }; i3GEO.php.identifica2(retorna,objposicaocursor.ddx,objposicaocursor.ddy,"5"); } } }; //YAHOO.log("carregou classe mapa", "Classes i3geo");