/*jslint white:false,undef: false, rhino: true, onevar: true, evil: false */ /* Title: Análise geográfica Arquivo: i3geo/classesjs/classe_analise.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.analise Funções de geração das análises e abertura dos diálogos das opções de análise espacial Em i3GEO.analise.dialogo estão as funções de abertura dos diálogos */ i3GEO.analise = { /* Classe: i3GEO.analise.dialogo Abre as telas de diálogo das opções de análise Exemplo: Para abrir a mensagem de diálogo de geração de buffer, utilize i3GEO.analise.dialogo.buffer() */ dialogo:{ /* Function: gradePontos Abre a janela que gera grade de pontos */ gradePontos: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.dialogo.gradePontos()");} if(typeof(i3GEOF.gradeDePontos) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/gradepontos/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.gradeDePontos.criaJanelaFlutuante()","i3GEOF.gradeDePontos_script"); } }, /* Function: gradePol Abre a janela que gera grade de poligonos */ gradePol: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.dialogo.gradePol()");} if(typeof(i3GEOF.gradeDePontos) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/gradepol/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.gradeDePoligonos.criaJanelaFlutuante()","i3GEOF.gradeDePoligonos_script"); } }, /* Function: gradeHex Abre a janela que gera grade de hexágonos */ gradeHex: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.dialogo.gradeHex()");} if(typeof(i3GEOF.gradeDeHex) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/gradehex/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.gradeDeHex.criaJanelaFlutuante()","i3GEOF.gradeDePoligonos_script"); } }, /* Function: analisaGeometrias Abre a janela com o sistema de análise de geometrias */ analisaGeometrias: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.dialogo.analisaGeometrias()");} if(typeof(i3GEOF.analisaGeometrias) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/analisageometrias/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.analisaGeometrias.criaJanelaFlutuante()","i3GEOF.analisaGeometrias_script"); } }, /* Function: pontosdistri Abre a janela para executar análises de distribuição de pontos */ pontosdistri: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.dialogo.pontosdistri()");} if (i3GEO.parametros.r == "nao") {alert("Opção não disponível");} else{ if(typeof(i3GEOF.pontosDistri) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/pontosdistri/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.pontosDistri.criaJanelaFlutuante()","i3GEOF.pontosDistri_script"); } } }, /* Function: pontoempoligono Abre a janela para cruzar um tema de pontos com um ou mais temas poligonais e gerar um novo tema */ pontoempoligono: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.dialogo.pontoempoligono()");} if(typeof(i3GEOF.pontoEmPoligono) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/pontoempoligono/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.pontoEmPoligono.criaJanelaFlutuante()","i3GEOF.pontoEmPoligono_script"); } }, /* Function: nptPol Abre a janela para cruzar um tema de pontos com um ou tema poligona e gerar um novo tema com o número de pontos em cada polígono */ nptPol: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.dialogo.nptpol()");} if(typeof(i3GEOF.nptpol) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/nptpol/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.nptpol.criaJanelaFlutuante()","i3GEOF.nptpol_script"); } }, /* Function: buffer Gera um buffer em elementos selecionados */ buffer: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.dialogo.buffer()");} if(typeof(i3GEOF.buffer) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/buffer/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.buffer.criaJanelaFlutuante()","i3GEOF.buffer_script"); } }, /* Function: distanciaptpt Abre a janela para calcular a distância entre um ponto e outros pontos próximos */ distanciaptpt: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.dialogo.distanciaptpt()");} if(typeof(i3GEOF.distanciaptpt) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/distanciaptpt/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.distanciaptpt.criaJanelaFlutuante()","i3GEOF.distanciaptpt_script"); } }, /* Function: centroide Abre a janela que gera um tema com os centroides dos elementos selecionados */ centroide: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.dialogo.centroide()");} if(typeof(i3GEOF.centroide) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/centroide/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.centroide.criaJanelaFlutuante()","i3GEOF.centroide_script"); } }, /* Function: dissolve Abre a janela que gera um tema dissolvendo as divisas entre polígonos. */ dissolve: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.dialogo.dissolve()");} if(typeof(i3GEOF.agrupaElementos) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/dissolve/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.dissolve.criaJanelaFlutuante()","i3GEOF.dissolve_script"); } }, /* Function: agrupaElementos Abre a janela que gera um tema poligonal agrupando elementos de um tema. */ agrupaElementos: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.dialogo.agrupaElementos()");} if(typeof(i3GEOF.agrupaElementos) === 'undefined'){ var js = i3GEO.configura.locaplic+"/ferramentas/agrupaelementos/index.js.php"; i3GEO.util.scriptTag(js,"i3GEOF.agrupaElementos.criaJanelaFlutuante()","i3GEOF.agrupaElementos_script"); } } }, /* Classe: i3GEO.analise.medeDistancia Ativa e controla a opção de medição de distâncias. A medida é feita quando o usuário clica no mapa com esta opção ativa Quando o botão é acionado, abre-se a janela que mostra o resultado da medida, o ícone que segue o mouse é alterado. Para mostrar o resultado do cálculo, é incluído um div específico. */ medeDistancia:{ /* Function: inicia Inicia a operação de medição, abrindo a janela de resultados e criando os componentes necessários São registrados os eventos de clique sobre o mapa e fechamento da janela de resultados */ inicia: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.medeDistancia.inicia()");} pontosdistobj = []; i3GEO.analise.medeDistancia.criaJanela(); if (g_tipoacao != "mede"){ if(i3GEO.eventos.MOUSECLIQUE.toString().search("i3GEO.analise.medeDistancia.clique()") < 0) {i3GEO.eventos.MOUSECLIQUE.push("i3GEO.analise.medeDistancia.clique()");} if(i3GEO.eventos.MOUSEMOVE.toString().search("i3GEO.analise.medeDistancia.movimento()") < 0) {i3GEO.eventos.MOUSEMOVE.push("i3GEO.analise.medeDistancia.movimento()");} $i("mostradistancia").style.display="block"; i3GEO.desenho.criaContainerRichdraw(); i3GEO.desenho.richdraw.lineColor = "black"; i3GEO.desenho.richdraw.lineWidth = "1px"; g_tipoacao = "mede"; } else{ i3GEO.desenho.richdraw.fecha(); if($i("mostradistancia")){$i("mostradistancia").style.display="none";} if($i("pontosins")){$i("pontosins").style.display="none";} } }, /* Function: criaJanela Cria a janela para mostrar os resultados da medição */ criaJanela: function(){ var novoel,ins,imagemxy; if (!$i("mostradistancia")){ novoel = document.createElement("div"); novoel.id = "mostradistancia"; ins = '
     
'; ins += '
'; ins += '
'; ins += '
'; ins += ""; ins += ""; ins += "
Raios Textos
"; ins += '
'; ins += '
'; //ins += "sobre o cálculo"; novoel.innerHTML = ins; novoel.style.borderColor="gray"; document.body.appendChild(novoel); } else{ if ($i("mostradistancia_calculo")) {$i("mostradistancia_calculo").innerHTML = "";} } YAHOO.namespace("janelaDocamede.xp"); YAHOO.janelaDocamede.xp.panel = new YAHOO.widget.Panel("mostradistancia", {width:300,fixedcenter: false, constraintoviewport: true, underlay:"none", close:true, visible:true, draggable:true, modal:false } ); YAHOO.janelaDocamede.xp.panel.render(); imagemxy = i3GEO.util.pegaPosicaoObjeto($i(i3GEO.Interface.IDCORPO)); YAHOO.janelaDocamede.xp.panel.moveTo(imagemxy[0]+150,imagemxy[1]); YAHOO.util.Event.addListener(YAHOO.janelaDocamede.xp.panel.close, "click", i3GEO.analise.medeDistancia.fechaJanela); }, /* Function: fechaJanela Fecha a janela e os elementos gráficos criados para a ferramenta de medição */ fechaJanela: function(){ i3GEO.desenho.richdraw.fecha(); if($i("pontosins")){document.body.removeChild($i("pontosins"));} YAHOO.util.Event.removeListener(YAHOO.janelaDocamede.xp.panel.close, "click"); i3GEO.eventos.MOUSECLIQUE.remove("i3GEO.analise.medeDistancia.clique()"); i3GEO.eventos.MOUSEMOVE.remove("i3GEO.analise.medeDistancia.movimento()"); i3GEO.barraDeBotoes.ativaBotoes(); }, /* Function: clique Adiciona uma marca na tela e realiza o cálculo de distância dos pontos inseridos */ clique: function(){ var n,d; if (g_tipoacao == "mede"){ n = pontosdistobj.xpt.length; pontosdistobj.xpt[n] = objposicaocursor.ddx; pontosdistobj.ypt[n] = objposicaocursor.ddy; pontosdistobj.xtela[n] = objposicaocursor.telax; pontosdistobj.ytela[n] = objposicaocursor.telay; pontosdistobj.ximg[n] = objposicaocursor.imgx; pontosdistobj.yimg[n] = objposicaocursor.imgy; pontosdistobj.dist[n] = 0; try{ if (navn) {pontosdistobj.linhas[n] = i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, (pontosdistobj.ximg[n]-1),(pontosdistobj.yimg[n]-1),(pontosdistobj.ximg[n]-1),(pontosdistobj.yimg[n]-1));} else {pontosdistobj.linhas[n] = i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, (pontosdistobj.ximg[n])-(i3GEO.parametros.w/2),pontosdistobj.yimg[n],(pontosdistobj.ximg[n])-(i3GEO.parametros.w/2),pontosdistobj.yimg[n]);} } catch(e){ if(typeof(console) !== 'undefined'){console.error("i3GEO.desenho.richdraw "+e);} } if (n > 0){ d = parseInt(i3GEO.calculo.distancia(pontosdistobj.xpt[n-1],pontosdistobj.ypt[n-1],objposicaocursor.ddx,objposicaocursor.ddy),10); pontosdistobj.dist[n] = d + pontosdistobj.dist[n-1]; if($i("pararraios") && $i("pararraios").checked === true ){ i3GEO.desenho.aplica("insereCirculo","",n); if(navm) {pontosdistobj.linhas[n] = i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, (pontosdistobj.ximg[n-1])-(i3GEO.parametros.w/2),pontosdistobj.yimg[n-1],(pontosdistobj.ximg[n])-(i3GEO.parametros.w/2),pontosdistobj.yimg[n]);} } if($i("parartextos") && $i("parartextos").checked === true ){ i3GEO.desenho.aplica("insereTexto","",n,d+" km"); } } i3GEO.util.insereMarca.cria(objposicaocursor.imgx,objposicaocursor.imgy,i3GEO.analise.medeDistancia.fechaJanela,"divGeometriasTemp"); } }, /* Function: movimento Realiza os cálculos e desenho da linha conforme o usuário movimenta o mouse */ movimento: function(){ var n,d,r,decimal,da,mostra; if (g_tipoacao == "mede"){ if($i("mostradistancia")) {$i("mostradistancia").style.display="block";} n = pontosdistobj.xpt.length; if (n > 0){ d = i3GEO.calculo.distancia(pontosdistobj.xpt[n-1],pontosdistobj.ypt[n-1],objposicaocursor.ddx,objposicaocursor.ddy); r = i3GEO.calculo.direcao(pontosdistobj.xpt[n-1],pontosdistobj.ypt[n-1],objposicaocursor.ddx,objposicaocursor.ddy); r = i3GEO.calculo.dd2dms(r,r); r = r[0]; if (i3GEO.parametros.mapscale > 500000) {d = parseInt(d,10);} else{ d = d + ""; d = d.split("."); decimal = d[1].substr(0,3); d = d[0]+"."+decimal; d = d * 1; } da = d + pontosdistobj.dist[n-1]; mostra = $i("mostradistancia_calculo"); if (mostra){ mostra.innerHTML = " Dist acum.= "+da+" atual= "+d+" km
Direção (DMS)= "+r; } i3GEO.desenho.aplica("resizeLinha",pontosdistobj.linhas[n-1],n); } } } }, /* Classe: i3GEO.analise.medeArea Ativa e controla a opção de medição de área. A medida é feita quando o usuário clica no mapa com esta opção ativa Quando o botão é acionado, abre-se a janela que mostra o resultado da medida, o ícone que segue o mouse é alterado. Para mostrar o resultado do cálculo, é incluído um div específico. */ medeArea:{ /* Function: inicia Inicia a operação de medição, abrindo a janela de resultados e criando os componentes necessários São registrados os eventos de clique sobre o mapa e fechamento da janela de resultados */ inicia: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.medeArea.inicia()");} var temp; i3GEO.analise.medeArea.criaJanela(); if (g_tipoacao != "area"){ $i("mostraarea_calculo").innerHTML = ""; if(i3GEO.eventos.MOUSECLIQUE.toString().search("i3GEO.analise.medeArea.clique()") < 0) {i3GEO.eventos.MOUSECLIQUE.push("i3GEO.analise.medeArea.clique()");} if(i3GEO.eventos.MOUSEMOVE.toString().search("i3GEO.analise.medeArea.movimento()") < 0) {i3GEO.eventos.MOUSEMOVE.push("i3GEO.analise.medeArea.movimento()");} YAHOO.util.Event.addListener(YAHOO.janelaDocaarea.xp.panel.close, "click", i3GEO.analise.medeArea.fechaJanela); temp = function(retorno){ i3GEO.janela.fechaAguarde("i3GEO.atualiza"); g_areapixel = retorno.data; if (g_areapixel < 0) {alert("Nao e possivel calcular a area. Entre em contato com o administrador do sistema.");} else{ alert("Clique no mapa para desenhar o poligono. Clique duas vezes para concluir"); i3GEO.barraDeBotoes.ativaIcone("area"); g_tipoacao = "area"; i3GEO.desenho.criaContainerRichdraw(); i3GEO.desenho.richdraw.lineColor = "green"; i3GEO.desenho.richdraw.lineWidth = "2px"; } }; if(i3GEO.Interface.ATUAL == "padrao"){ i3GEO.janela.abreAguarde("i3GEO.atualiza",$trad("o1")); i3GEO.php.areaPixel(temp,i3GEO.parametros.pixelsize); } else {alert("Operacao nao disponivel");} } else{i3GEO.desenho.richdraw.fecha();} }, /* Function: criaJanela Cria a janela para mostrar os resultados da medição */ criaJanela: function(){ var novoel,ins,imagemxy; if (!$i("mostraarea")){ novoel = document.createElement("div"); novoel.id = "mostraarea"; ins = "
Área aproximada    
"; ins += '
'; ins += '
'; ins+= '
'; novoel.innerHTML = ins; novoel.style.borderColor="gray"; document.body.appendChild(novoel); } YAHOO.namespace("janelaDocaarea.xp"); YAHOO.janelaDocaarea.xp.panel = new YAHOO.widget.Panel("mostraarea", {width:220,fixedcenter: false, constraintoviewport: true, underlay:"none", close:true, visible:true, draggable:true, modal:false } ); YAHOO.janelaDocaarea.xp.panel.render(); imagemxy = i3GEO.util.pegaPosicaoObjeto($i(i3GEO.Interface.IDCORPO)); YAHOO.janelaDocaarea.xp.panel.moveTo(imagemxy[0]+150,imagemxy[1]); }, /* Function: fechaJanela Fecha a janela e os elementos gráficos criados para a ferramenta de medição */ fechaJanela: function(){ i3GEO.desenho.richdraw.fecha(); if($i("pontosArea")){document.body.removeChild($i("pontosArea"));} i3GEO.eventos.MOUSECLIQUE.remove("cliqueArea()"); i3GEO.eventos.MOUSEMOVE.remove("moveArea()"); i3GEO.barraDeBotoes.ativaBotoes(); }, /* Function: clique Adiciona uma marca na tela e realiza o cálculo de distância dos pontos inseridos */ clique: function(){ var n,m; if (g_tipoacao == "area"){ n = pontosdistobj.xpt.length; pontosdistobj.xpt[n] = objposicaocursor.ddx; pontosdistobj.ypt[n] = objposicaocursor.ddy; pontosdistobj.xtela[n] = objposicaocursor.telax; pontosdistobj.ytela[n] = objposicaocursor.telay; pontosdistobj.ximg[n] = objposicaocursor.imgx; pontosdistobj.yimg[n] = objposicaocursor.imgy; pontosdistobj.dist[n] = 0; //inclui a linha para ligar com o ponto inicial if (n === 0){ try { if (navn) {pontosdistobj.linhastemp = i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, pontosdistobj.ximg[n]-1,pontosdistobj.yimg[n]-1,pontosdistobj.ximg[0]-1,pontosdistobj.yimg[0]-1);} else {pontosdistobj.linhastemp = i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, (pontosdistobj.ximg[n])-(i3GEO.parametros.w/2),pontosdistobj.yimg[n],(pontosdistobj.ximg[0])-(i3GEO.parametros.w/2),pontosdistobj.yimg[0]); } } catch(e){ if(typeof(console) !== 'undefined'){console.error(e);} } } try{ if (navn) {pontosdistobj.linhas[n] = i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, pontosdistobj.ximg[n]-1,pontosdistobj.yimg[n]-1,pontosdistobj.ximg[n]-1,pontosdistobj.yimg[n]-1);} else {pontosdistobj.linhas[n] = i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, (pontosdistobj.ximg[n])-(i3GEO.parametros.w/2),pontosdistobj.yimg[n],(pontosdistobj.ximg[n])-(i3GEO.parametros.w/2),pontosdistobj.yimg[n]);} } catch(e){ if(typeof(console) !== 'undefined'){console.error(e);} } m = i3GEO.calculo.area(pontosdistobj,g_areapixel); if($i("mostraarea_calculo")) {$i("mostraarea_calculo").innerHTML = "
m2= "+m.toFixed(2)+"
km2= "+(m/1000000).toFixed(2)+"
ha= "+(m/10000).toFixed(2);} if (n > 3){ //var d = parseInt(i3GEO.util.distancia(pontosdistobj.xpt[n-1],pontosdistobj.ypt[n-1],objposicaocursor.ddx,objposicaocursor.ddy)); //pontosdistobj.dist[n] = d + pontosdistobj.dist[n-1]; } i3GEO.util.insereMarca.cria(objposicaocursor.imgx,objposicaocursor.imgy,i3GEO.analise.medeArea.fechaJanela,"pontosArea"); } }, /* Function: movimento Realiza os cálculos e desenho da linha conforme o usuário movimenta o mouse */ movimento: function(){ var n,d,decimal,da; if (g_tipoacao == "area"){ n = pontosdistobj.xpt.length; if (n > 0){ // //conforme a escala, os dados são arredondados // d = i3GEO.calculo.distancia(pontosdistobj.xpt[n-1],pontosdistobj.ypt[n-1],objposicaocursor.ddx,objposicaocursor.ddy); if (i3GEO.parametros.mapscale > 500000) {d = parseInt(d,10);} else{ d= d + ""; d = d.split("."); decimal = d[1].substr(0,3); d = d[0]+"."+decimal; d = d * 1; } da = d + pontosdistobj.dist[n-1]; // //desenha as linhas na tela com o objeto richdraw // if(navn){i3GEO.desenho.aplica("resizePoligono",pontosdistobj.linhastemp,0);} i3GEO.desenho.aplica("resizeLinha",pontosdistobj.linhas[n-1],n); } } } } }; //YAHOO.log("carregou classe analise", "Classes i3geo");