From b7292fed97e58aa1b6ae682fd37bd5b47afe49bb Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Tue, 8 Feb 2011 20:58:39 +0000 Subject: [PATCH] Ferramenta Gráfico de perfil --- classesjs/classe_analise.js | 25 +++++++++++++++++++++++-- classesjs/classe_janela.js | 18 ++++++++++-------- classesjs/classe_php.js | 15 ++++++++++++++- classesjs/dicionario_ajuda.js | 9 +++++++++ classesphp/graficos.php | 15 +++++++++++++++ classesphp/mapa_controle.php | 15 ++++++++++++++- ferramentas/graficointerativo/index.js.php | 20 ++++++++++++++------ ferramentas/perfil/index.js.php | 225 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 324 insertions(+), 18 deletions(-) create mode 100644 ferramentas/perfil/index.js.php diff --git a/classesjs/classe_analise.js b/classesjs/classe_analise.js index d39971d..81cdb36 100644 --- a/classesjs/classe_analise.js +++ b/classesjs/classe_analise.js @@ -58,8 +58,7 @@ i3GEO.analise = { Abre a janela de diálogo da ferramenta graficointerativo */ graficoInterativo: function(){ - if(typeof(i3GEOF.graficointerativo) === 'undefined') - {i3GEO.util.dialogoFerramenta("i3GEO.analise.dialogo.graficoInterativo()","graficointerativo","graficointerativo");} + i3GEO.util.dialogoFerramenta("i3GEO.analise.dialogo.graficoInterativo()","graficointerativo","graficointerativo"); }, /* Function: linhaDoTempo @@ -91,6 +90,14 @@ i3GEO.analise = { {i3GEO.eventos.NAVEGAMAPA.push("atualizaLinhaDoTempo()");} }, /* + Function: perfil + + Abre a janela de diálogo da ferramenta perfil + */ + perfil: function(){ + i3GEO.util.dialogoFerramenta("i3GEO.analise.dialogo.perfil()","perfil","perfil"); + }, + /* Function: gradePontos Abre a janela de diálogo da ferramenta gradepontos @@ -269,6 +276,7 @@ i3GEO.analise = { '' + '' + 'Textos' + + ' ' + '' + '' + ''; @@ -285,6 +293,17 @@ i3GEO.analise = { 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); + // + //botao que abre a ferramenta de cálculo de perfis. + //pontosdistobj contém as coordenadas dos pontos + // + new YAHOO.widget.Button( + "i3GEObotaoPerfil", + {onclick:{fn: function(){ + var js = i3GEO.configura.locaplic+"/ferramentas/perfil/index.js.php"; + i3GEO.util.scriptTag(js,"i3GEOF.perfil.criaJanelaFlutuante(pontosdistobj)","i3GEOF.perfil_script"); + }}} + ); }, /* Function: fechaJanela @@ -295,6 +314,8 @@ i3GEO.analise = { i3GEO.Interface.ATUAL !== "googleearth" ? i3GEO.desenho.richdraw.fecha() : i3GEO.Interface.googleearth.removePlacemark("divGeometriasTemp"); i3GEO.util.removeChild("pontosins"); i3GEO.util.removeChild("mostradistancia_c"); + if($i("divGeometriasTemp")) + {i3GEO.desenho.richdraw.fecha();} 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()"); diff --git a/classesjs/classe_janela.js b/classesjs/classe_janela.js index db603cc..b9004b6 100644 --- a/classesjs/classe_janela.js +++ b/classesjs/classe_janela.js @@ -313,11 +313,15 @@ i3GEO.janela = { if(ifr == true) {YAHOO.janelaDoca.xp.panel.iframe.style.zIndex = 0;} if(modal === true){ - if($i(id+"_mask")) - {$i(id+"_mask").style.zIndex = 9000 + i3GEO.janela.ULTIMOZINDEX + 1;} + if($i(id+"_mask")){ + $i(id+"_mask").style.zIndex = 9000 + i3GEO.janela.ULTIMOZINDEX + 1; + i3GEO.janela.ULTIMOZINDEX = 9000 + i3GEO.janela.ULTIMOZINDEX + 1; + } + } + if($i(id+"_c")){ + $i(id+"_c").style.zIndex = 23000 + i3GEO.janela.ULTIMOZINDEX + 1; + i3GEO.janela.ULTIMOZINDEX = 23000 + i3GEO.janela.ULTIMOZINDEX + 1; } - if($i(id+"_c")) - {$i(id+"_c").style.zIndex = 23000 + i3GEO.janela.ULTIMOZINDEX + 1;} if(funcaoCabecalho) {$i(id+'_cabecalho').onclick = funcaoCabecalho;} if(funcaoMinimiza) @@ -381,10 +385,8 @@ i3GEO.janela = { i3GEO.util.escondePin(); i3GEO.util.escondeBox(); //fecha o container de desenho de elementos na tela - if($i("divGeometriasTemp")) - {i3GEO.desenho.richdraw.fecha();} - //if($i("flamingoi")) - //{$i("flamingoi").style.display="block";} + //if($i("divGeometriasTemp")) + //{i3GEO.desenho.richdraw.fecha();} //executa as funções de fechamento if(i3GEO.janela.ANTESFECHA){ for(i=0;i + */ + dadosPerfilRelevo: function(funcao,opcao,pontos,amostragem){ + i3GEO.php.verifica(); + var p = i3GEO.configura.locaplic+"/classesphp/mapa_controle.php?g_sid="+i3GEO.configura.sid+"&funcao=dadosPerfilRelevo&opcao="+opcao; + var cp = new cpaint(); + cp.set_transfer_mode('POST'); + cp.set_response_type("JSON"); + cp.call(p,"foo",funcao,"&pontos="+pontos+"&amostragem="+amostragem); + } }; \ No newline at end of file diff --git a/classesjs/dicionario_ajuda.js b/classesjs/dicionario_ajuda.js index e4804f7..f203e1e 100644 --- a/classesjs/dicionario_ajuda.js +++ b/classesjs/dicionario_ajuda.js @@ -812,6 +812,15 @@ g_traducao_ajuda = { complemento:"", tela:"", apijs:"i3GEO.arvoreDeTemas" + }, + "96": { + titulo: "Gráfico de perfil", + diretorio:"", + categoria:"3", + pt:"Cria um gráfico de perfil com base em um conjunto de dados contendo os valores de Z.", + complemento:"Os valores de Z podem ser obtidos de um tema ou de um serviço do tipo Google API", + tela:"", + apijs:"i3GEO.analise" } } }; diff --git a/classesphp/graficos.php b/classesphp/graficos.php index a298a65..7eff56e 100644 --- a/classesphp/graficos.php +++ b/classesphp/graficos.php @@ -520,4 +520,19 @@ function dadosLinhaDoTempo($map_file,$tema,$ext="") "events"=>$eventos ); } +function dadosPerfilRelevo($pontos,$opcao,$amostragem){ + if($opcao == "google"){ + $urlGoogle = "http://maps.google.com/maps/api/elevation/json?sensor=false&path="; + $pontos = str_replace(",","|",$pontos); + $pontos = str_replace(" ",",",$pontos); + $urlGoogle .= $pontos."&samples=".$amostragem; + $curl = curl_init(); + curl_setopt ($curl, CURLOPT_URL, $urlGoogle); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + $result = curl_exec($curl); + curl_close ($curl); + $result = json_decode( $result, true ); + } + return $result; +} ?> \ No newline at end of file diff --git a/classesphp/mapa_controle.php b/classesphp/mapa_controle.php index e754c53..458a1e5 100644 --- a/classesphp/mapa_controle.php +++ b/classesphp/mapa_controle.php @@ -1769,7 +1769,7 @@ Valor: DADOSLINHADOTEMPO Pega os dados de um tema para geração do gráfico de linha do tempo. - + */ case "DADOSLINHADOTEMPO": include_once("graficos.php"); @@ -1778,6 +1778,19 @@ Pega os dados de um tema para geração do gráfico de linha do tempo. $retorno = dadosLinhaDoTempo($map_file,$tema,$ext); break; /* +Valor: DADOSPERFILRELEVO + +Pega os dados para elaboração de gráfico de perfil do relevo + + +*/ + case "DADOSPERFILRELEVO": + include_once("graficos.php"); + if(!isset($ext)) + {$ext = "";} + $retorno = dadosPerfilRelevo($pontos,$opcao,$amostragem); + break; +/* Section: Menu de temas Obtém a lista de temas, grupos e sub-grupos. diff --git a/ferramentas/graficointerativo/index.js.php b/ferramentas/graficointerativo/index.js.php index 7fd0c20..6b1a7dd 100644 --- a/ferramentas/graficointerativo/index.js.php +++ b/ferramentas/graficointerativo/index.js.php @@ -55,6 +55,12 @@ i3GEOF.graficointerativo = { */ aguarde: "", /* + Propriedade: titulo + + Título do gráfico. Se for vazio, será obtido do nome do tema selecionado + */ + titulo: "", + /* Propriedade: tipo Tipo de gráfico escolhido pelo usuário. @@ -117,10 +123,10 @@ i3GEOF.graficointerativo = { iddiv {String} - id do div que receberá o conteudo HTML da ferramenta - dados {JSON} - dados para o gráfico (opcional) + dados {JSON} - dados para o gráfico (opcional) exemplo ["n;x","'Argentina';33796870","'Paraguay';4773464","'Brazil';151525400","'Chile';13772710"] */ inicia: function(iddiv,dados){ - try{ + //try{ $i(iddiv).innerHTML += i3GEOF.graficointerativo.html(); $i("i3GEOgraficointerativoAcumula").checked = i3GEOF.graficointerativo.acumula; $i("i3GEOgraficointerativoRelativa").checked = i3GEOF.graficointerativo.relativa; @@ -202,8 +208,8 @@ i3GEOF.graficointerativo = { i3GEOF.graficointerativo.montaTabelaDados(dados); $i("i3GEOgraficointerativoguia4").onclick.call(); } - } - catch(erro){alert(erro);} + //} + //catch(erro){alert(erro);} }, /* Function: html @@ -350,7 +356,7 @@ i3GEOF.graficointerativo = { i3GEO.barraDeBotoes.ativaIcone("graficointerativo"); var i = $i("i3GEOF.graficointerativo_c").style; i3GEO.janela.ULTIMOZINDEX++; - i.zIndex = 21000 + i3GEO.janela.ULTIMOZINDEX; + i.zIndex = i3GEO.janela.ULTIMOZINDEX; }, /* Function: ativaTipo @@ -478,7 +484,7 @@ i3GEOF.graficointerativo = { i, id, cor = "#d01f3c"; - if(!retorno.dados) + if(!retorno.dados && retorno.data != undefined) {dados = retorno.data.dados;} else {dados = retorno;} @@ -556,6 +562,8 @@ i3GEOF.graficointerativo = { legendaY = "", fill = "#C4B86A", pointSize = 2; + if(i3GEOF.graficointerativo.titulo != "") + {titulo = i3GEOF.graficointerativo.titulo} if($i("i3GEOgraficointerativoComboXid")) {legendaX = $i("i3GEOgraficointerativoComboXid").value;} if($i("i3GEOgraficointerativoComboYid")) diff --git a/ferramentas/perfil/index.js.php b/ferramentas/perfil/index.js.php new file mode 100644 index 0000000..0c846ed --- /dev/null +++ b/ferramentas/perfil/index.js.php @@ -0,0 +1,225 @@ + +/*jslint plusplus:false,white:false,undef: false, rhino: true, onevar: true, evil: true */ + +/* +Title: Perfil + +Cria um gráfico de perfil do "relevo" + +Veja: + + + +Arquivo: + +i3geo/ferramentas/perfil/index.js.php + +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(i3GEOF) === 'undefined'){ + i3GEOF = []; +} +/* +Class: i3GEOF.perfil +*/ +i3GEOF.perfil = { + /* + Variavel: pontos + + Objeto com a lista de pontos iniciais enviadas como parâmetro na inicialização da ferramenta + */ + pontos: "", + /* + Variavel: dadosGrafico + + Dados no formato aceito pela ferramenta i3GEOF.graficointerativo + */ + dadosGrafico: [], + /* + Variavel: aguarde + + Objeto DOM com a imagem de aguarde existente no cabeçalho da janela. + */ + aguarde: "", + /* + Function: inicia + + Inicia a ferramenta. É chamado por criaJanelaFlutuante + + Parametro: + + iddiv {String} - id do div que receberá o conteudo HTML da ferramenta + */ + inicia: function(iddiv){ + try{ + $i(iddiv).innerHTML += i3GEOF.perfil.html(); + new YAHOO.widget.Button( + "i3GEOperfilbotao1", + {onclick:{fn: i3GEOF.perfil.criaPerfil}} + ); + } + catch(erro){alert(erro);} + }, + /* + Function: html + + Gera o código html para apresentação das opções da ferramenta + + Retorno: + + String com o código html + */ + html:function(){ + var ins = "

Escolha qual será a fonte dos dados de Z:"; + ins += "

Google"; + ins += "

Número de pontos que serão obtidos ao longo da linha"; + ins += "

"; + ins += "

"; + return ins; + }, + /* + Function: criaJanelaFlutuante + + Cria a janela flutuante para controle da ferramenta. + + Parametro: + + pontos {objeto} - contém as coordenadas dos pontos que serão usados nos cálculos, como no exemplo + + pontos = {xpt: [],ypt:[]}; //xpt são os valores de x (array) e ypt os valores de y (array) + */ + criaJanelaFlutuante: function(pontos){ + var minimiza,cabecalho,janela,divid,temp,titulo,cabecalho,minimiza; + i3GEOF.perfil.pontos = pontos; + //cria a janela flutuante + titulo = "Perfil    "; + cabecalho = function(){}; + minimiza = function(){ + i3GEO.janela.minimiza("i3GEOF.perfil"); + }; + janela = i3GEO.janela.cria( + "400px", + "200px", + "", + "", + "", + titulo, + "i3GEOF.perfil", + false, + "hd", + cabecalho, + minimiza + ); + divid = janela[2].id; + i3GEOF.perfil.aguarde = $i("i3GEOF.perfil_imagemCabecalho").style; + i3GEOF.perfil.inicia(divid); + }, + /* + Function: criaPerfil + + Executa a operação de geração do perfil + + Veja: + + + */ + criaPerfil: function(){ + try{ + if(i3GEOF.perfil.aguarde.visibility === "visible") + {return;} + var p, + cp; + + i3GEOF.perfil.aguarde.visibility = "visible"; + fim = function(retorno){ + i3GEOF.perfil.aguarde.visibility = "hidden"; + if (retorno.data === undefined ) + {$i("i3GEOperfilfim").innerHTML = "Erro.";return;} + else{ + if(retorno.data.status != "OK") + {$i("i3GEOperfilfim").innerHTML = "Erro ao acessar o serviço de fornecimento dos dados";return;} + i3GEOF.perfil.converteDados(retorno.data.results); + if(!$i("i3GEOF.graficointerativo_script")){ + var js = i3GEO.configura.locaplic+"/ferramentas/graficointerativo/index.js.php"; + i3GEO.util.scriptTag(js,"i3GEOF.perfil.iniciaGrafico()","i3GEOF.graficointerativo_script"); + } + } + }; + var pontos = i3GEOF.perfil.listaPontos(); + i3GEO.php.dadosPerfilRelevo(fim,"google",pontos,$i("i3GEOFperfilAmostragem").value); + } + catch(e){$i("i3GEOperfilfim").innerHTML = "

Erro. "+e;i3GEO.janela.fechaAguarde();i3GEOF.perfil.aguarde.visibility = "hidden";} + }, + /* + Function: iniciaGrafico + + Inicializa o gráfico de perfil definindo os parâmetros da ferramenta i3GEOF.graficointerativo + */ + iniciaGrafico: function(){ + i3GEOF.graficointerativo.tipo = "line"; + i3GEOF.graficointerativo.titulo = "Perfil"; + i3GEOF.graficointerativo.criaJanelaFlutuante(i3GEOF.perfil.dadosGrafico); + }, + /* + Function: listaPontos + + Converte o objeto i3GEOF.perfil.pontos em uma string com a lista de pontos + + Retorno: + {string} - x y,x y,x y + */ + listaPontos: function(){ + var n = i3GEOF.perfil.pontos.xpt.length, + i = 0, + lista = [], + xs = i3GEOF.perfil.pontos.xpt, + ys = i3GEOF.perfil.pontos.ypt; + for(i=0;i \ No newline at end of file -- libgit2 0.21.2