/*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 = { /* 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 O tema anteriormente ativo tem sua cor alterada para a cor normal e o novo tema é destacado com uma cor diferente 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.color = ""; } if(noArvoreCamadas){ noArvoreCamadas.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") || (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(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 o elemento HTML do mapa utilizado 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 de diálogo da ferramenta opcoes_tamanho */ tamanho: function(){ i3GEO.util.dialogoFerramenta("i3GEO.mapa.dialogo.tamanho()","opcoes_tamanho","opcoesTamanho"); }, /* Function: tipoimagem Abre a janela de diálogo da ferramenta tipoimagem */ tipoimagem: function(){ i3GEO.util.dialogoFerramenta("i3GEO.mapa.dialogo.tipoimagem()","tipoimagem","tipoimagem"); }, /* Function: corFundo Abre a janela de diálogo da ferramenta opcoes_fundo */ corFundo: function(){ i3GEO.util.dialogoFerramenta("i3GEO.mapa.dialogo.corFundo()","opcoes_fundo","opcoesFundo"); }, /* Function: opcoesEscala Abre a janela de diálogo da ferramenta opcoes_escala */ opcoesEscala: function(){ i3GEO.util.dialogoFerramenta("i3GEO.mapa.dialogo.opcoesEscala()","opcoes_escala","opcoesEscala"); }, /* Function: opcoesLegenda Abre a janela de diálogo da ferramenta opcoes_legenda */ opcoesLegenda: function(){ i3GEO.util.dialogoFerramenta("i3GEO.mapa.dialogo.opcoesLegenda()","opcoes_legenda","opcoesLegenda"); }, /* Function: gradeCoord Abre a janela de diálogo da ferramenta gradecoord */ gradeCoord: function(){ i3GEO.util.dialogoFerramenta("i3GEO.mapa.dialogo.gradeCoord()","gradecoord","gradeCoord"); }, /* Function: cliqueTexto Abre a janela de diálogo da ferramenta inseretxt */ cliqueTexto: function(){ i3GEO.util.dialogoFerramenta("i3GEO.mapa.dialogo.cliqueTexto()","inseretxt","inseretxt"); }, /* Function: selecao Abre a janela de diálogo da ferramenta selecao */ selecao: function(){ i3GEO.util.dialogoFerramenta("i3GEO.mapa.dialogo.selecao()","selecao","selecao"); }, /* Function: cliquePonto Abre a janela de diálogo da ferramenta inserexy2 */ cliquePonto: function(){ i3GEO.util.dialogoFerramenta("i3GEO.mapa.dialogo.cliquePonto()","inserexy2","inserexy"); }, /* Function: cliqueGrafico Abre a janela de diálogo da ferramenta inseregrafico */ cliqueGrafico: function(){ i3GEO.util.dialogoFerramenta("i3GEO.mapa.dialogo.cliqueGrafico()","inseregrafico","insereGrafico"); }, /* Function: cliqueIdentificaDefault Abre a janela de diálogo da ferramenta identifica */ 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 = ""; ds = temas[j].resultado.dados; if(ds !== " "){ try{ nds = ds.length; for(s=0;s
";} if(valor !== "" && link !== "") {ins += "" + alias + " : " + valor + "
";} if(img !== "") {ins += img+"
";} ins += ""; mostra = true; } else{ ins += "" + valor + "
"; mostra = true; } } catch(e){} } } } 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"){ i3GEO.Interface.googleearth.balao(res,objposicaocursor.ddx,objposicaocursor.ddy); i3GEO.Interface.googleearth.aguarde.visibility = "hidden"; } 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($i(i3GEO.Interface.IDMAPA)){ $i(i3GEO.Interface.IDMAPA).title = ""; temp = "identifica"; if(i3GEO.Interface.ATIVAMENUCONTEXTO) {temp = "identifica_contexto";} i3GEO.util.mudaCursor(i3GEO.configura.cursores,temp,i3GEO.Interface.IDMAPA,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(i3GEO.Interface.ATUAL === "googleearth") {i3GEO.Interface.googleearth.aguarde.visibility = "hidden";} if(typeof(console) !== 'undefined'){console.error(e);} } }; i3GEO.php.identifica2(retorna,objposicaocursor.ddx,objposicaocursor.ddy,"5","tip",i3GEO.configura.locaplic,i3GEO.configura.sid,"ligados",i3GEO.parametros.mapexten); } } }; //YAHOO.log("carregou classe mapa", "Classes i3geo");