Commit ec78cdac40616aeb931c11a645550da0fb830af2

Authored by Edmar Moretti
1 parent fc51a5cb

inclusao de opcao para calculos nas juncoes de tabelas do sistema metaestat

admin/admin.db
No preview for this file type
ferramentas/metaestat/analise.php
... ... @@ -125,7 +125,7 @@ switch (strtoupper($funcao)){
125 125 $retorno = listaLayersAgrupados($map_file);
126 126 break;
127 127 case "JUNTAMEDIDASVARIAVEIS":
128   - $retorno = juntaMedidasVariaveis($map_file,$layerNames,$nome);
  128 + $retorno = juntaMedidasVariaveis($map_file,$layerNames,$nome,$colunascalc,$formulas);
129 129 break;
130 130 case "ADICIONALIMITEREGIAO":
131 131 if(empty($outlinecolor)){
... ... @@ -650,7 +650,7 @@ function analise_aplicafiltroregiao($map_file,$codigo_tipo_regiao,$codigo_regiao
650 650 * @return Nome do layer criado
651 651 *
652 652 */
653   -function juntaMedidasVariaveis($map_file,$layerNames,$nome){
  653 +function juntaMedidasVariaveis($map_file,$layerNames,$nome,$colunascalc,$formulas){
654 654 //o sql que faz acesso aos dados e marcado com /*SE*//*SE*/
655 655 $mapa = ms_newMapObj($map_file);
656 656 $layernames = explode(",",$layerNames);
... ... @@ -692,12 +692,36 @@ function juntaMedidasVariaveis($map_file,$layerNames,$nome){
692 692 $colunasDados = array();
693 693 $itens = array($gid,"regiao");
694 694 $itensdesc = array("gid","Regiao");
  695 + $tabelaColuna = [];
695 696 for($i=0;$i<$n;$i++){
696 697 $colunasDados[] = "tabela".$i.".".$colunasValor[$i]." as valortema".$i;
  698 + $tabelaColuna[valortema.$i] = "tabela".$i.".".$colunasValor[$i];
697 699 $itens[] = "valortema".$i;
698 700 $itensdesc[] = $nomesLayers[$i];
699 701 }
700   - $sqlfinal = "SELECT tabela0.".$gid.",tabela0.".$regiao["colunanomeregiao"]." as regiao,tabela0.".$regiao["colunageo"]." as the_geom,".implode(",",$colunasDados)." from ".implode(",",$sqls)." WHERE ";
  702 + //pega as colunas e as formulas adicionais
  703 + $colunascalc = explode(",",$colunascalc);
  704 + $formulas = explode(",",$formulas);
  705 + $nformulas = count($formulas);
  706 + $complemento = array();
  707 + for($i=0;$i<$nformulas;$i++){
  708 + $complemento[] = "(".$formulas[$i].") as ".$colunascalc[$i];
  709 + }
  710 + $complemento = implode(",",$complemento);
  711 + //substitui pelo nome correto das colunas
  712 + foreach(array_keys($tabelaColuna) as $k){
  713 + $complemento = str_replace($k,$tabelaColuna[$k],$complemento);
  714 + }
  715 + if($complemento != ""){
  716 + $complemento .= ",";
  717 + $itens = array_merge($itens,$colunascalc);
  718 + $itensdesc = array_merge($itensdesc,$colunascalc);
  719 + $complemento = str_ireplace("select","",$complemento);
  720 + $complemento = str_ireplace("update","",$complemento);
  721 + $complemento = str_ireplace("delete","",$complemento);
  722 + }
  723 + //echo $complemento;exit;
  724 + $sqlfinal = "SELECT $complemento tabela0.".$gid.",tabela0.".$regiao["colunanomeregiao"]." as regiao,tabela0.".$regiao["colunageo"]." as the_geom,".implode(",",$colunasDados)." from ".implode(",",$sqls)." WHERE ";
701 725 $sqlfinal .= implode($cwhere," AND ");
702 726 $sqlfinal = str_replace("/*FA*/","",$sqlfinal);
703 727 $sqlfinal = str_replace("/*FAT*/","",$sqlfinal);
... ... @@ -708,11 +732,11 @@ function juntaMedidasVariaveis($map_file,$layerNames,$nome){
708 732 $nlayer->setmetadata("tema",$nome);
709 733 $nlayer->setmetadata("METAESTAT_DERIVADO","sim");
710 734 $nlayer->setmetadata("METAESTAT_ID_MEDIDA_VARIAVEL","");
711   - $nlayer->setmetadata("TIP","");
712   - $nlayer->setmetadata("arquivotemaoriginal","");
713   - $nlayer->setmetadata("nomeoriginal","");
714   - $nlayer->setmetadata("ITENS",implode(",",$itens));
715   - $nlayer->setmetadata("ITENSDESC",implode(",",$itensdesc));
  735 + $nlayer->setmetadata("TIP","");
  736 + $nlayer->setmetadata("arquivotemaoriginal","");
  737 + $nlayer->setmetadata("nomeoriginal","");
  738 + $nlayer->setmetadata("ITENS",implode(",",$itens));
  739 + $nlayer->setmetadata("ITENSDESC",implode(",",$itensdesc));
716 740 $nclass = $nlayer->numclasses;
717 741 for($i=1;$i<$nclass;$i++){
718 742 $nlayer->getclass($i)->set("status",MS_DELETE);
... ...
ferramentas/metaestat/editorlimites.js
... ... @@ -274,7 +274,7 @@ i3GEOF.editorlimites = {
274 274 lista = [],
275 275 n = i3GEOF.editorlimites.shapes.length,
276 276 tipo = "",
277   - ps,nps,j,p = {},i;
  277 + ps,nps,j,p,i,r = {};
278 278  
279 279 for(i=0;i<n;i++){
280 280 coordenadas = [];
... ... @@ -291,8 +291,8 @@ i3GEOF.editorlimites = {
291 291 lista.push(coordenadas);
292 292 }
293 293 }
294   - p = {"tipo":tipo,"coordenadas":lista};
295   - return p;
  294 + r = {"tipo":tipo,"coordenadas":lista};
  295 + return r;
296 296 },
297 297 /**
298 298 * Converte um objeto shape em uma string WKT
... ...
ferramentas/metaestat/index.js
... ... @@ -339,41 +339,12 @@ i3GEOF.metaestat = {
339 339 i3GEO.janela.abreAguarde("aguardeAnalise","Aguarde...");
340 340 i3GEO.util.ajaxGet(p,i3GEOF.metaestat.analise.juntaMedidasVariaveis.janelaFlutuante);
341 341 },
342   - janelaFlutuante: function(retorno){
  342 + janelaFlutuante: function(retorno){
343 343 i3GEO.janela.fechaAguarde("aguardeAnalise");
344 344 if($i("i3GEOF.junta_corpo")){
345 345 return;
346 346 }
347   - var aplica,minimiza,cabecalho,titulo,ins,n,i,lista = "<table class=lista4 >";
348   - aplica = function(){
349   - if($i("aguardeAnalise_c") && $i("aguardeAnalise_c").style.visibility == "visible"){
350   - return;
351   - };
352   - i3GEO.janela.abreAguarde("aguardeAnalise","Aguarde...");
353   -
354   - var atualiza,p,i,
355   - lista = [],
356   - ics = $i("i3GEOF.junta_corpo").getElementsByTagName("input"),
357   - n = ics.length;
358   - for(i=0;i<n;i++){
359   - if(ics[i].type == "checkbox" && ics[i].checked === true){
360   - lista.push(ics[i].value);
361   - }
362   - }
363   - if(lista.length == 0){
364   - alert("Escolha uma camada");
365   - return;
366   - }
367   - i3GEO.janela.abreAguarde("aguardeAnalise","Aguarde...");
368   - p = i3GEO.configura.locaplic+"/ferramentas/metaestat/analise.php?g_sid="+i3GEO.configura.sid +
369   - "&funcao=juntaMedidasVariaveis&layerNames="+lista.join(",")+"&nome="+$i("i3GEOFjuntaNovoNome").value;
370   - atualiza = function(){
371   - i3GEO.janela.fechaAguarde("aguardeAnalise");
372   - i3GEO.atualiza();
373   - i3GEOF.metaestat.analise.comboCamadas();
374   - };
375   - i3GEO.util.ajaxGet(p,atualiza);
376   - };
  347 + var minimiza,cabecalho,titulo,ins,n,i,lista = "<table class=lista4 >";
377 348 cabecalho = function(){
378 349 };
379 350 minimiza = function(){
... ... @@ -405,12 +376,86 @@ i3GEOF.metaestat = {
405 376 lista +
406 377 '<br><p class=paragrafo >Nome da nova camada</p>' +
407 378 $inputText("","","i3GEOFjuntaNovoNome","",30,'') +
408   - '<br><br><input id=i3geojuntaAplica type="button" value="Aplicar" />';
  379 + '<br><br><input id=i3geojuntaAplica type="button" value="Aplicar" />' +
  380 + '<div id=i3GEOFjuntaColunasCalculadas >' +
  381 + '<br><p class=paragrafo ><b>Colunas calculadas (opcional)</b></p></div>' +
  382 + '<div id=i3GEOFjuntaColunasCalculadasMensagemAjuda ></div>' ;
409 383 $i("i3GEOF.junta_corpo").innerHTML = ins;
410 384 new YAHOO.widget.Button(
411 385 "i3geojuntaAplica",
412   - {onclick:{fn: aplica}}
  386 + {onclick:{fn: i3GEOF.metaestat.analise.juntaMedidasVariaveis.aplica}}
  387 + );
  388 + i3GEOF.metaestat.analise.juntaMedidasVariaveis.noNovoCalculo();
  389 + //ajuda para o calculo
  390 + i3GEO.util.mensagemAjuda("i3GEOFjuntaColunasCalculadasMensagemAjuda",
  391 + "As colunas calculadas s&atilde;o f&oacute;rmulas que utilizam as colunas que forem juntadas e que ser&atilde;o acrescentadas"+
  392 + "&agrave; nova camada. Cada uma dessas colunas receber&aacute; um nome sequencial, por exemplo <i>valortema0,valortema1,"+
  393 + "valortema2...</i><br>As colunas calculadas podem utilizar essas colunas como entrada em f&oacute;rmulas."+
  394 + "Cada f&oacute;rmula ir&aacute; gerar uma nova coluna na tabela e deve utilizar a sintaxe SQL (<a href='http://www.postgresql.org/docs/9.3/static/functions-math.html' target=_blank >SQL no Postgres</a>)"+
  395 + "<br>Exemplos de uso:<br>" +
  396 + "coluna de nome <b>soma</b><br>" +
  397 + "valortema0 + valortema1 <br>" +
  398 + "coluna de nome <b>taxa</b><br>" +
  399 + "(valortema0 * 100) / valortema1"
413 400 );
  401 + },
  402 + noNovoCalculo: function(){
  403 + var no = document.createElement("div");
  404 + no.style.margin = "10px";
  405 + no.style.padding = "5px";
  406 + no.style.backgroundColor = "beige";
  407 + no.style.width = "210px";
  408 + no.innerHTML = '<p class=paragrafo >Nome (apenas letras e n&uacute;meros)<br>' +
  409 + '<input type=text value="" style=width:205px />' +
  410 + '<br>F&oacute;rmula (padr&atilde;o sql)<br>' +
  411 + '<textarea style=width:205px ></textarea></p>';
  412 + $i("i3GEOFjuntaColunasCalculadas").appendChild(no);
  413 + },
  414 + pegaCalculos: function(){
  415 + var div = $i("i3GEOFjuntaColunasCalculadas"),
  416 + nomes = div.getElementsByTagName("input"),
  417 + formulas = div.getElementsByTagName("textarea"),
  418 + n = nomes.length,
  419 + parnomes = [],
  420 + parformulas = [],
  421 + i;
  422 + for(i=0;i<n;i++){
  423 + if(nomes[i].value != "" && formulas[i].value != ""){
  424 + parnomes.push(nomes[i].value);
  425 + parformulas.push(formulas[i].value);
  426 + }
  427 + }
  428 + return "&colunascalc="+parnomes.join(",")+"&formulas="+parformulas.join(",");
  429 + },
  430 + aplica: function(){
  431 + if($i("aguardeAnalise_c") && $i("aguardeAnalise_c").style.visibility == "visible"){
  432 + return;
  433 + };
  434 + i3GEO.janela.abreAguarde("aguardeAnalise","Aguarde...");
  435 + var ps,atualiza,p,i,
  436 + lista = [],
  437 + ics = $i("i3GEOF.junta_corpo").getElementsByTagName("input"),
  438 + n = ics.length;
  439 + for(i=0;i<n;i++){
  440 + if(ics[i].type == "checkbox" && ics[i].checked === true){
  441 + lista.push(ics[i].value);
  442 + }
  443 + }
  444 + if(lista.length == 0){
  445 + alert("Escolha uma camada");
  446 + return;
  447 + }
  448 + i3GEO.janela.abreAguarde("aguardeAnalise","Aguarde...");
  449 + p = i3GEO.configura.locaplic+"/ferramentas/metaestat/analise.php?g_sid="+i3GEO.configura.sid +
  450 + "&funcao=juntaMedidasVariaveis&layerNames="+lista.join(",")+"&nome="+$i("i3GEOFjuntaNovoNome").value;
  451 + ps = i3GEOF.metaestat.analise.juntaMedidasVariaveis.pegaCalculos();
  452 + atualiza = function(){
  453 + i3GEO.janela.fechaAguarde("aguardeAnalise");
  454 + i3GEO.atualiza();
  455 + i3GEOF.metaestat.analise.comboCamadas();
  456 + };
  457 + //i3GEO.util.ajaxGet(p,atualiza);
  458 + cpJSON.call(p,"foo",atualiza,ps);
414 459 }
415 460 },
416 461 /**
... ... @@ -1565,7 +1610,7 @@ i3GEOF.metaestat = {
1565 1610 $i("EcolunaDia").value = "";
1566 1611 $i("EcolunaHora").value = "";
1567 1612 }
1568   - }
  1613 + };
1569 1614 //impede a alteracao do filtro
1570 1615 $i("Efiltro").disabled = "disabled";
1571 1616 //altera a tabela quando escolher
... ...