From ec78cdac40616aeb931c11a645550da0fb830af2 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Tue, 17 Sep 2013 20:15:45 +0000 Subject: [PATCH] inclusao de opcao para calculos nas juncoes de tabelas do sistema metaestat --- admin/admin.db | Bin 210944 -> 0 bytes ferramentas/metaestat/analise.php | 40 ++++++++++++++++++++++++++++++++-------- ferramentas/metaestat/editorlimites.js | 6 +++--- ferramentas/metaestat/index.js | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------- 4 files changed, 114 insertions(+), 45 deletions(-) diff --git a/admin/admin.db b/admin/admin.db index a732a09..9ca46a1 100644 Binary files a/admin/admin.db and b/admin/admin.db differ diff --git a/ferramentas/metaestat/analise.php b/ferramentas/metaestat/analise.php index 021301e..52fd8c2 100644 --- a/ferramentas/metaestat/analise.php +++ b/ferramentas/metaestat/analise.php @@ -125,7 +125,7 @@ switch (strtoupper($funcao)){ $retorno = listaLayersAgrupados($map_file); break; case "JUNTAMEDIDASVARIAVEIS": - $retorno = juntaMedidasVariaveis($map_file,$layerNames,$nome); + $retorno = juntaMedidasVariaveis($map_file,$layerNames,$nome,$colunascalc,$formulas); break; case "ADICIONALIMITEREGIAO": if(empty($outlinecolor)){ @@ -650,7 +650,7 @@ function analise_aplicafiltroregiao($map_file,$codigo_tipo_regiao,$codigo_regiao * @return Nome do layer criado * */ -function juntaMedidasVariaveis($map_file,$layerNames,$nome){ +function juntaMedidasVariaveis($map_file,$layerNames,$nome,$colunascalc,$formulas){ //o sql que faz acesso aos dados e marcado com /*SE*//*SE*/ $mapa = ms_newMapObj($map_file); $layernames = explode(",",$layerNames); @@ -692,12 +692,36 @@ function juntaMedidasVariaveis($map_file,$layerNames,$nome){ $colunasDados = array(); $itens = array($gid,"regiao"); $itensdesc = array("gid","Regiao"); + $tabelaColuna = []; for($i=0;$i<$n;$i++){ $colunasDados[] = "tabela".$i.".".$colunasValor[$i]." as valortema".$i; + $tabelaColuna[valortema.$i] = "tabela".$i.".".$colunasValor[$i]; $itens[] = "valortema".$i; $itensdesc[] = $nomesLayers[$i]; } - $sqlfinal = "SELECT tabela0.".$gid.",tabela0.".$regiao["colunanomeregiao"]." as regiao,tabela0.".$regiao["colunageo"]." as the_geom,".implode(",",$colunasDados)." from ".implode(",",$sqls)." WHERE "; + //pega as colunas e as formulas adicionais + $colunascalc = explode(",",$colunascalc); + $formulas = explode(",",$formulas); + $nformulas = count($formulas); + $complemento = array(); + for($i=0;$i<$nformulas;$i++){ + $complemento[] = "(".$formulas[$i].") as ".$colunascalc[$i]; + } + $complemento = implode(",",$complemento); + //substitui pelo nome correto das colunas + foreach(array_keys($tabelaColuna) as $k){ + $complemento = str_replace($k,$tabelaColuna[$k],$complemento); + } + if($complemento != ""){ + $complemento .= ","; + $itens = array_merge($itens,$colunascalc); + $itensdesc = array_merge($itensdesc,$colunascalc); + $complemento = str_ireplace("select","",$complemento); + $complemento = str_ireplace("update","",$complemento); + $complemento = str_ireplace("delete","",$complemento); + } + //echo $complemento;exit; + $sqlfinal = "SELECT $complemento tabela0.".$gid.",tabela0.".$regiao["colunanomeregiao"]." as regiao,tabela0.".$regiao["colunageo"]." as the_geom,".implode(",",$colunasDados)." from ".implode(",",$sqls)." WHERE "; $sqlfinal .= implode($cwhere," AND "); $sqlfinal = str_replace("/*FA*/","",$sqlfinal); $sqlfinal = str_replace("/*FAT*/","",$sqlfinal); @@ -708,11 +732,11 @@ function juntaMedidasVariaveis($map_file,$layerNames,$nome){ $nlayer->setmetadata("tema",$nome); $nlayer->setmetadata("METAESTAT_DERIVADO","sim"); $nlayer->setmetadata("METAESTAT_ID_MEDIDA_VARIAVEL",""); - $nlayer->setmetadata("TIP",""); - $nlayer->setmetadata("arquivotemaoriginal",""); - $nlayer->setmetadata("nomeoriginal",""); - $nlayer->setmetadata("ITENS",implode(",",$itens)); - $nlayer->setmetadata("ITENSDESC",implode(",",$itensdesc)); + $nlayer->setmetadata("TIP",""); + $nlayer->setmetadata("arquivotemaoriginal",""); + $nlayer->setmetadata("nomeoriginal",""); + $nlayer->setmetadata("ITENS",implode(",",$itens)); + $nlayer->setmetadata("ITENSDESC",implode(",",$itensdesc)); $nclass = $nlayer->numclasses; for($i=1;$i<$nclass;$i++){ $nlayer->getclass($i)->set("status",MS_DELETE); diff --git a/ferramentas/metaestat/editorlimites.js b/ferramentas/metaestat/editorlimites.js index 971fed1..2cae0a2 100644 --- a/ferramentas/metaestat/editorlimites.js +++ b/ferramentas/metaestat/editorlimites.js @@ -274,7 +274,7 @@ i3GEOF.editorlimites = { lista = [], n = i3GEOF.editorlimites.shapes.length, tipo = "", - ps,nps,j,p = {},i; + ps,nps,j,p,i,r = {}; for(i=0;i

Nome da nova camada

' + $inputText("","","i3GEOFjuntaNovoNome","",30,'') + - '

'; + '

' + + '
' + + '

Colunas calculadas (opcional)

' + + '
' ; $i("i3GEOF.junta_corpo").innerHTML = ins; new YAHOO.widget.Button( "i3geojuntaAplica", - {onclick:{fn: aplica}} + {onclick:{fn: i3GEOF.metaestat.analise.juntaMedidasVariaveis.aplica}} + ); + i3GEOF.metaestat.analise.juntaMedidasVariaveis.noNovoCalculo(); + //ajuda para o calculo + i3GEO.util.mensagemAjuda("i3GEOFjuntaColunasCalculadasMensagemAjuda", + "As colunas calculadas são fórmulas que utilizam as colunas que forem juntadas e que serão acrescentadas"+ + "à nova camada. Cada uma dessas colunas receberá um nome sequencial, por exemplo valortema0,valortema1,"+ + "valortema2...
As colunas calculadas podem utilizar essas colunas como entrada em fórmulas."+ + "Cada fórmula irá gerar uma nova coluna na tabela e deve utilizar a sintaxe SQL (SQL no Postgres)"+ + "
Exemplos de uso:
" + + "coluna de nome soma
" + + "valortema0 + valortema1
" + + "coluna de nome taxa
" + + "(valortema0 * 100) / valortema1" ); + }, + noNovoCalculo: function(){ + var no = document.createElement("div"); + no.style.margin = "10px"; + no.style.padding = "5px"; + no.style.backgroundColor = "beige"; + no.style.width = "210px"; + no.innerHTML = '

Nome (apenas letras e números)
' + + '' + + '
Fórmula (padrão sql)
' + + '

'; + $i("i3GEOFjuntaColunasCalculadas").appendChild(no); + }, + pegaCalculos: function(){ + var div = $i("i3GEOFjuntaColunasCalculadas"), + nomes = div.getElementsByTagName("input"), + formulas = div.getElementsByTagName("textarea"), + n = nomes.length, + parnomes = [], + parformulas = [], + i; + for(i=0;i