Commit ec78cdac40616aeb931c11a645550da0fb830af2
1 parent
fc51a5cb
Exists in
master
and in
7 other branches
inclusao de opcao para calculos nas juncoes de tabelas do sistema metaestat
Showing
4 changed files
with
114 additions
and
45 deletions
Show diff stats
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ão fórmulas que utilizam as colunas que forem juntadas e que serão acrescentadas"+ | |
| 392 | + "à nova camada. Cada uma dessas colunas receberá um nome sequencial, por exemplo <i>valortema0,valortema1,"+ | |
| 393 | + "valortema2...</i><br>As colunas calculadas podem utilizar essas colunas como entrada em fórmulas."+ | |
| 394 | + "Cada fórmula irá 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úmeros)<br>' + | |
| 409 | + '<input type=text value="" style=width:205px />' + | |
| 410 | + '<br>Fórmula (padrã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 | ... | ... |