/* Title: Mapa File: i3geo/classesjs/classe_mapa.js About: Licença 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 = new Array(); } /* Class: 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 = { /* Variable: GEOXML Armazena o nome dos objetos geoXml adicionados ao mapa pela API do google maps Type: {Array} */ GEOXML: new Array(), /* 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(arguments.length == 0){return;} try{ imagemxi = 0; imagemyi = 0; imagemxref = 0; imagemyref = 0; var dc = $i(elemento); while ((dc.offsetParent) && (dc.offsetParent.id != "i3geo")){ dc = dc.offsetParent; imagemxi = imagemxi + dc.offsetLeft; imagemyi = imagemyi + dc.offsetTop; } var c = $i(i3GEO.interface.IDCORPO); if (c){ c.style.position="absolute"; $left(i3GEO.interface.IDCORPO,imagemxi); $top(i3GEO.interface.IDCORPO,imagemyi); /* if($i("i3geo")){ if ($i("i3geo").style.left){$left(i3GEO.interface.IDCORPO,imagemxi + parseInt($i("i3geo").style.left));} if ($i("i3geo").style.top){$top(i3GEO.interface.IDCORPO,imagemyi + parseInt($i("i3geo").style.top));} } */ } } catch(e){alert("Ocorreu um erro. i3GEO.mapa.ajustaPosicao"+e);} }, /* Function: ativaLogo Ativa ou desativa a logo marca. */ ativaLogo: function(){ i3GEO.php.ativalogo(i3GEO.atualiza); }, /* Function: insereToponimo Insere um texto no mapa na posição clicada O ponto é obtido do objeto objposicaocursor e os demais parâmetros da janela interna aberta no iframe "wdocai" */ insereToponimo: function(){ if (g_tipoacao == "textofid"){ // //pega os parâmetros da janela flutuante aberta // var doc = (navm) ? document.frames("wdocai").document : $i("wdocai").contentDocument; texto = doc.getElementById("texto").value; var f = doc.getElementById("fonte").value; var t = doc.getElementById("tamanho").value; var a = doc.getElementById("angulo").value; var cf = doc.getElementById("fundoc").value; if (cf == ""){cf = "off";} var cs = doc.getElementById("sombra").value; if (cs == ""){cs = "off";} var xs = doc.getElementById("sombrax").value; var ys = doc.getElementById("sombray").value; var c = doc.getElementById("frente").value; var m = doc.getElementById("mascara").value; if (m == ""){m = "off";} var fcs = doc.getElementById("frentes").value; if (fcs == ""){fcs = "off";} var fxs = doc.getElementById("frentex").value; var fys = doc.getElementById("frentey").value; var forca = doc.getElementById("force").value; var md = doc.getElementById("mindistance").value; var mf = doc.getElementById("minfeaturesize").value; var ox = doc.getElementById("offsetx").value; var oy = doc.getElementById("offsety").value; var pl = doc.getElementById("partials").value; var pos = doc.getElementById("position").value; //o texto será digitado var digi = function(retorno){ //se texto for igual a vazio é pq o valor foi pego de um atributo if(texto == ""){ i3GEO.janela.fechaAguarde("i3GEO.atualiza"); texto = retorno.data; } if (texto != " "){ i3GEO.janela.abreAguarde("i3GEO.atualiza",$trad("o1")); i3GEO.php.insereAnnotation(i3GEO.atualiza,g_nomepin+"topo",objposicaocursor.ddx+" "+objposicaocursor.ddy,texto,pos,pl,ox,oy,mf,md,forca,fcs,fxs,fys,m,c,ys,xs,cs,cf,a,t,f); } }; if (doc.getElementById("tipoInsere").value == "digitando") {digi.call();} else{ //o texto será capturado de um atributo do elemento texto = ""; if ((doc.getElementById("temasLigados")) && (doc.getElementById("itemsel"))){ var tema = doc.getElementById("temasLigados").value; var item = doc.getElementById("itemsel").value; i3GEO.janela.abreAguarde("i3GEO.atualiza",$trad("o1")); i3GEO.php.identificaunico(digi,objposicaocursor.ddx+","+objposicaocursor.ddy,tema,item); } } } else{i3GEO.eventos.MOUSECLIQUE.remove("i3GEO.mapa.insereToponimo()");} }, /* Function: insereKml Insere no mapa uma camada KML com base na API do Google Maps As camadas adicionadas são crescentadas na árvore de camadas A lista de nomes dos objetos geoXml criados é mantida em i3GEO.mapas.GEOXML Parameters: pan {Boolean} - define se o mapa será deslocado para encaixar o KML url {String} - URL do arquivo KML. Se não for definido, a URL será obtida do INPUT com id = i3geo_urlkml (veja i3GEO.gadgets) */ insereKml: function(pan,url){ if(arguments.length == 1){ var i = $i("i3geo_urlkml"); if(i){var url = i.value;} else{var url = "";} } if(url == ""){return;} //"http://api.flickr.com/services/feeds/geo/?g=322338@N20&lang=en-us&format=feed-georss" var ngeoxml = "geoXml_"+i3GEO.mapa.GEOXML.length; i3GEO.mapa.GEOXML.push(ngeoxml); var zoom = function(){ if(pan){ eval("var ll = "+ngeoxml+".getDefaultCenter()"); eval(ngeoxml+".gotoDefaultViewport(i3GeoMap)"); //i3GeoMap.setCenter(ll); } }; eval(ngeoxml+" = new GGeoXml(url,zoom)"); eval("i3GeoMap.addOverlay("+ngeoxml+")"); i3GEO.mapa.criaNoArvoreGoogle(ngeoxml,ngeoxml); }, criaNoArvoreGoogle: function(url,nomeOverlay){ var root = i3GEO.arvoreDeCamadas.ARVORE.getRoot(); var node = i3GEO.arvoreDeCamadas.ARVORE.getNodeByProperty("idkml","raiz"); if(!node){ var titulo = "
Google Maps
"; var d = {html:titulo,idkml:"raiz"}; var node = new YAHOO.widget.HTMLNode(d, root, true,true); } html = ""; html += " "+url+""; var d = {html:html}; var nodekml = new YAHOO.widget.HTMLNode(d, node, true,true); nodekml.isleaf = true; i3GEO.arvoreDeCamadas.ARVORE.draw(); i3GEO.arvoreDeCamadas.ARVORE.collapseAll(); node.expand(); }, ativaDesativaOverlayGoogle: function(obj){ if(!obj.checked){ eval("i3GeoMap.removeOverlay("+obj.value+")"); } else eval("i3GeoMap.addOverlay("+obj.value+")"); }, /* Function: inserePonto Insere um ponto no mapa na posição clicada O ponto é obtidos do objeto objposicaocursor e os demais parâmetros da janela interna aberta no iframe "wdocai" */ inserePonto: function(){ if (g_tipoacao == "inserexy"){ var doc = (navm) ? document.frames("wdocai").document : $i("wdocai").contentDocument; if(doc.getElementById("resultado")){ var ins = doc.getElementById("resultado").innerHTML; ins = ins + "
" + objposicaocursor.ddx +" " + objposicaocursor.ddy + "

"; doc.getElementById("resultado").innerHTML = ins; } var item = ""; var valoritem = ""; if((doc.getElementById("valorItem")) && (doc.getElementById("itemtema"))){ var item = doc.getElementById("itemtema").value; var valoritem = doc.getElementById("valorItem").value; } if (g_nomepin == ""){alert("Nenhum tema definido para editar");} else{ i3GEO.janela.abreAguarde("i3GEO.atualiza",$trad("o1")); i3GEO.php.insereSHP(i3GEO.atualiza,g_nomepin,item,valoritem,objposicaocursor.ddx+" "+objposicaocursor.ddy); } } }, /* Function: insereGrafico Insere um grafico no mapa na posição clicada O ponto é obtidos do objeto objposicaocursor e os demais parâmetros da janela interna aberta no iframe "wdocai" */ insereGrafico: function(){ if (g_tipoacao == "inseregrafico"){ var doc = (navm) ? document.frames("wdocai").document : $i("wdocai").contentDocument; var tema = doc.getElementById("temasLigados").value; var width = doc.getElementById("w").value; var inclinacao = doc.getElementById("inclinacao").value; var shadow_height = doc.getElementById("sombra").value; if (tema == ""){alert("Nenhum tema definido para pegar os dados");} else{ //pega os itens e as cores definidas var listadeitens = new Array(); var g = doc.getElementById("listai"); var iguias = g.getElementsByTagName("input"); var i = iguias.length-1; if (i >= 0){ do{ if (iguias[i].checked == true){ var it = iguias[i].id; var c = doc.getElementById("cor"+it).value; listadeitens.push(it+","+c); } } while(i--) } var itens = listadeitens.join("*"); if (itens == "") {alert("Nenhum item foi escolhido");} else{ i3GEO.janela.abreAguarde("i3GEO.atualiza",$trad("o1")); i3GEO.php.insereSHPgrafico(i3GEO.atualiza,tema,objposicaocursor.ddx,objposicaocursor.ddy,itens,shadow_height,width,inclinacao); } } } }, /* Class: i3GEO.mapa.recupera Tenta recuperar o mapa de backup 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:{ /* Variable: TENTATIVA Armazena a quantidade de tentativas de recuperação que foram feitas Type: {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); } }, /* Class: i3GEO.mapa.legendaHTML Controla a obtenção da legenda do mapa formatada em HTML. Útil para mostrar a legenda na tela */ legendaHTML:{ /* Variable: ID Armazena o id definido na criação da legenda */ ID: "", /* Property: incluiBotaoLibera Define se na legenda será incluido o botão para liberar a legenda e incluí-la em uma janela flutuante type: {boolean} default: {true} */ incluiBotaoLibera: true, /* 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(); Parameters: id {String} - id do elemento que receberá a legenda */ cria: function(id){ if(arguments.length == 0){var 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(){ var temp = function(retorno){ if(i3GEO.mapa.legendaHTML.ID != "" && $i(i3GEO.mapa.legendaHTML.ID)) { if ((retorno.data != "erro") && (retorno.data != undefined)){ var s = i3GEO.configura.locaplic+"/imagens/solta.gif"; var 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; var elementos = $i("wlegenda").getElementsByTagName("input"); for(i=0;i   ");}, /* Function: salvaMapa Abre a janela para salvar localmente o mapfile utilizado no mapa atual */ salvaMapa: function(){ if(i3GEO.parametros == "") {alert("Essa opcao nao pode ser ativada. Consulte o administrador do sistema. Mapfile nao esta exposto.");return;} i3GEO.janela.cria("300px","180px",i3GEO.configura.locaplic+"/ferramentas/salvamapa/index.htm","","","Salva mapa    "); }, /* Function: carregaMapa Abre a janela para a carga de um mapfile salvo localmente na máquina dousuário. */ carregaMapa: function() {i3GEO.janela.cria("300px","150px",i3GEO.configura.locaplic+"/ferramentas/carregamapa/index.htm?urlatual="+window.location,"","","Carrega mapa    ");}, /* Function: convertews Abre a janela para converter o mapa atual em web service WMS */ convertews: function(){ if(i3GEO.parametros.mapfile == "") {alert("Essa opcao nao pode ser ativada. Consulte o administrador do sistema. Mapfile nao esta exposto.");return;} i3GEO.janela.cria("440px","280px",i3GEO.configura.locaplic+"/ferramentas/convertews/index.htm","","","WMS    "); }, /* Function: convertekml Abre a janela para converter o mapa atual em KML */ convertekml: function(){ if(i3GEO.parametros.mapfile == "") {alert("Essa opcao nao pode ser ativada. Consulte o administrador do sistema. Mapfile nao esta exposto.");return;} i3GEO.janela.cria("440px","280px",i3GEO.configura.locaplic+"/ferramentas/convertemapakml/index.htm","","","Kml    "); }, /* Function: queryMap Abre a janela que altera as propriedades da exibição dos elementos selecionados. */ queryMap: function() {i3GEO.janela.cria("210px","80px",i3GEO.configura.locaplic+"/ferramentas/opcoes_querymap/index.htm","","","Cor da seleção    ");}, /* Function: template Abre a janela que muda o template do mapa atual. */ template: function() {i3GEO.janela.cria("300px","400px",i3GEO.configura.locaplic+"/ferramentas/template/index.htm","","","Template    ");}, /* Function: tamanho Abre a janela que muda o tamanho do mapa */ tamanho: function() {i3GEO.janela.cria("150px","170px",i3GEO.configura.locaplic+"/ferramentas/opcoes_tamanho/index.htm","","","Tamanho    ");}, /* 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() {i3GEO.janela.cria("300px","260px",i3GEO.configura.locaplic+"/ferramentas/tipoimagem/index.htm","","","Tipo de imagem    ");}, /* Function: corFundo Abre a janela que altera a cor do fundo do mapa atual. */ corFundo: function() {i3GEO.janela.cria("210px","80px",i3GEO.configura.locaplic+"/ferramentas/opcoes_fundo/index.htm","","","Cor do fundo    ");}, /* Function: opcoesEscala Abre a janela para definição das opções da barra de escala. */ opcoesEscala: function() {i3GEO.janela.cria("250px","300px",i3GEO.configura.locaplic+"/ferramentas/opcoes_escala/index.htm","center","center","Escala    ");}, /* Function: opcoesLegenda Abre a janela de configuração da legenda do mapa */ opcoesLegenda: function() {i3GEO.janela.cria("320px","300px",i3GEO.configura.locaplic+"/ferramentas/opcoes_legenda/index.htm","","","Legenda    ");}, /* Function: gradeCoord Abre a janela que gera grade de coordenadas */ gradeCoord: function() {i3GEO.janela.cria("350px","330px",i3GEO.configura.locaplic+"/ferramentas/gradecoord/index.htm","","","Grade de coordenadas    ");}, /* 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 (g_tipoacao != "textofid"){ var temp = Math.random() + "b"; temp = temp.split("."); g_nomepin = "pin"+temp[1]; g_tipoacao = "textofid"; var janela = i3GEO.janela.cria("360px","250px",i3GEO.configura.locaplic+"/ferramentas/inseretxt/index.htm","","","Texto"); if(i3GEO.eventos.MOUSECLIQUE.toString().search("i3GEO.mapa.insereToponimo()") < 0) {i3GEO.eventos.MOUSECLIQUE.push("i3GEO.mapa.insereToponimo()");} var temp = function(){ i3GEO.eventos.MOUSECLIQUE.remove("i3GEO.mapa.insereToponimo()"); i3GEO.barraDeBotoes.ativaBotoes(); }; YAHOO.util.Event.addListener(janela[0].close, "click", temp); } }, /* 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 (g_tipoacao != "inserexy"){ g_tipoacao = "inserexy"; var temp = Math.random() + "a"; temp = temp.split("."); g_nomepin = "pin"+temp[1]; var janela = i3GEO.janela.cria("500px","300px",i3GEO.configura.locaplic+'/ferramentas/inserexy2/index.htm',"","","Insere"); if(i3GEO.eventos.MOUSECLIQUE.toString().search("i3GEO.mapa.inserePonto()") < 0) {i3GEO.eventos.MOUSECLIQUE.push("i3GEO.mapa.inserePonto()");} var temp = function(){ i3GEO.eventos.MOUSECLIQUE.remove("i3GEO.mapa.inserePonto()"); i3GEO.barraDeBotoes.ativaBotoes(); }; YAHOO.util.Event.addListener(janela[0].close, "click", temp); } }, /* 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 (g_tipoacao != "inseregrafico"){ g_tipoacao = "inseregrafico"; var temp = Math.random() + "a"; temp = temp.split("."); g_nomepin = "pin"+temp[1]; var janela = i3GEO.janela.cria("400px","300px",i3GEO.configura.locaplic+'/ferramentas/inseregrafico/index.htm',"","","Insere"); if(i3GEO.eventos.MOUSECLIQUE.toString().search("i3GEO.mapa.insereGrafico()") < 0) {i3GEO.eventos.MOUSECLIQUE.push("i3GEO.mapa.insereGrafico()");} var temp = function(){ i3GEO.eventos.MOUSECLIQUE.remove("i3GEO.mapa.insereGrafico()"); i3GEO.barraDeBotoes.ativaBotoes(); }; YAHOO.util.Event.addListener(janela[0].close, "click", temp); } } }, corpo:{ verifica:function(retorno){ try{ i3GEO.janela.abreAguarde("ajaxCorpoMapa",$trad("o3")); if(retorno.data){var retorno = retorno.data;} if (retorno.variaveis){var 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.php.reiniciaMapa(i3GEO.atualiza); } } } } } }; //YAHOO.log("carregou classe mapa", "Classes i3geo");