Commit a239546666de3d1e4cfa351694d1abbfa117c9e7

Authored by Edmar Moretti
1 parent 03ae8791

Rotina de agregacao de regioes no sistema de metadados estatisticos

admin/admin.db
No preview for this file type
admin/php/classe_metaestat.php
... ... @@ -235,10 +235,15 @@ class Metaestat{
235 235  
236 236 $todasascolunas - opcional
237 237 */
238   - function sqlMedidaVariavel($id_medida_variavel,$todasascolunas,$agruparpor="",$tipolayer="polygon"){
  238 + function sqlMedidaVariavel($id_medida_variavel,$todasascolunas,$agruparpor="",$tipolayer="polygon",$codigo_tipo_regiao = ""){
239 239 $filtro = false;
240 240 $dados = $this->listaMedidaVariavel("",$id_medida_variavel);
241 241 $dadosgeo = $this->listaTipoRegiao($dados["codigo_tipo_regiao"]);
  242 + $agregaregiao = false;
  243 + if($dados["codigo_tipo_regiao"] != $codigo_tipo_regiao){
  244 + $agregaregiao = true;
  245 + $dadosgeoagregada = $this->listaTipoRegiao($codigo_tipo_regiao);
  246 + }
242 247 if($tipolayer != "point"){
243 248 $colunageo = $dadosgeo["colunageo"];
244 249 }
... ... @@ -250,11 +255,15 @@ class Metaestat{
250 255 if(!empty($agruparpor)){
251 256 $sql .= ",d.".$agruparpor;
252 257 }
253   - $sqlgeo = $sql.",g.".$colunageo;
254 258 }
255 259 else{
256 260 $sql = " SELECT d.* ";
257   - $sqlgeo = $sql.",g.".$colunageo;
  261 + }
  262 + $sqlgeo = $sql.",g.".$colunageo;
  263 + //
  264 + if($agregaregiao == true){
  265 + $dadosAgregacao = $this->listaAgregaRegiaoFilho($dados["codigo_tipo_regiao"], $codigo_tipo_regiao);
  266 + $sqlgeo = "g.".$dadosAgregacao["colunaligacao_regiaopai"].",sum(d.".$dados["colunavalor"].") as ".$dados["colunavalor"];
258 267 }
259 268 if(empty($agruparpor)){
260 269 $sql .= " FROM ".$dados["esquemadb"].".".$dados["tabela"]." as d ";
... ... @@ -279,11 +288,18 @@ class Metaestat{
279 288 $sqlgeo .= " WHERE ".$j;
280 289 }
281 290 //atencao: cuidado ao alterar essa string pois ') as foo' pode ser usado para replace em outras funcoes
282   - $sqlgeo = $colunageo." from ($sqlgeo) as foo using unique ".$dados["colunaidgeo"]." using srid=".$dadosgeo["srid"];
283 291 $colunas = $this->colunasTabela($dados["codigo_estat_conexao"],$dados["esquemadb"],$dados["tabela"]);
  292 + //agregacao com uma regiao maior TODO
  293 + if($agregaregiao == true){
  294 + $sqlgeo = "select pg.*,".$dados["colunavalor"]." from (select ".$sqlgeo." __filtro__ group by g.".$dadosAgregacao["colunaligacao_regiaopai"].") as fg, ".$dadosgeoagregada["esquemadb"].".".$dadosgeoagregada["tabela"]." as pg where fg.".$dadosAgregacao["colunaligacao_regiaopai"]." = pg.".$dadosgeoagregada["identificador"];
  295 + $sqlgeo = $colunageo." from ( $sqlgeo ) as foo using unique ".$dadosAgregacao["colunaligacao_regiaopai"]." using srid=".$dadosgeo["srid"];
  296 + }
  297 + else{
  298 + $sqlgeo = $colunageo." from (".$sqlgeo." __filtro__ ) as foo using unique ".$dados["colunaidgeo"]." using srid=".$dadosgeo["srid"];
  299 + }
284 300 return array("sqlagrupamento"=>$sqlagrupamento,"sql"=>$sql,"sqlmapserver"=>$sqlgeo,"filtro"=>$filtro,"colunas"=>$colunas);
285 301 }
286   - function mapfileMedidaVariavel($id_medida_variavel,$filtro="",$todasascolunas = 0,$tipolayer="polygon",$titulolayer="",$id_classificacao="",$agruparpor=""){
  302 + function mapfileMedidaVariavel($id_medida_variavel,$filtro="",$todasascolunas = 0,$tipolayer="polygon",$titulolayer="",$id_classificacao="",$agruparpor="",$codigo_tipo_regiao=""){
287 303 //$rand = $this->nomeRandomico();
288 304 $arq = $this->dir_tmp."/".$this->nomecache.".map";
289 305 if(!file_exists($arq)){
... ... @@ -298,10 +314,13 @@ class Metaestat{
298 314 $conexao = $this->listaConexao($meta["codigo_estat_conexao"],true);
299 315 $conexao = "user=".$conexao["usuario"]." password=".$conexao["senha"]." dbname=".$conexao["bancodedados"]." host=".$conexao["host"]." port=".$conexao["porta"]."";
300 316 //echo $conexao;exit;
301   - $sql = $this->sqlMedidaVariavel($id_medida_variavel,$todasascolunas,$agruparpor,$tipolayer);
  317 + $sql = $this->sqlMedidaVariavel($id_medida_variavel,$todasascolunas,$agruparpor,$tipolayer,$codigo_tipo_regiao);
302 318 $sqlf = $sql["sqlmapserver"];
303 319 if(!empty($filtro)){
304   - $sqlf = str_replace(") as foo"," AND ".$filtro." ) as foo",$sqlf);
  320 + $sqlf = str_replace("__filtro__"," AND ".$filtro,$sqlf);
  321 + }
  322 + else{
  323 + $sqlf = str_replace("__filtro__","",$sqlf);
305 324 }
306 325 $classes = "";
307 326 if(!empty($id_classificacao)){
... ... @@ -709,7 +728,7 @@ class Metaestat{
709 728 return "Error!: " . $e->getMessage();
710 729 }
711 730 }
712   - function alteraAgregaRegiao($codigo_tipo_regiao,$id_agregaregiao="",$codigo_tipo_regiao_pai="",$coluna_ligacao_regiaopai=""){
  731 + function alteraAgregaRegiao($codigo_tipo_regiao,$id_agregaregiao="",$codigo_tipo_regiao_pai="",$colunaligacao_regiaopai=""){
713 732 try {
714 733 if($id_agregaregiao != ""){
715 734 $this->dbhw->query("UPDATE ".$this->esquemaadmin."i3geoestat_agregaregiao SET colunaligacao_regiaopai = '$colunaligacao_regiaopai', codigo_tipo_regiao_pai = '$codigo_tipo_regiao_pai' WHERE id_agregaregiao = $id_agregaregiao");
... ... @@ -948,12 +967,19 @@ class Metaestat{
948 967 return $this->execSQL($sql,$id_medida_variavel);
949 968 }
950 969 /*
951   - Function: listaRegioesMedidaVariavel
  970 + Function: listaRegioesMedida
952 971  
953 972 Lista as regioes de uma medida variavel
954 973 */
955   - function listaRegioesMedidaVariavel($id_medida_variavel){
956   -
  974 + function listaRegioesMedida($id_medida_variavel){
  975 + $variavel = $this->listaMedidaVariavel("",$id_medida_variavel);
  976 + $codigo_tipo_regiao = $variavel["codigo_tipo_regiao"];
  977 + $regioes[] = $this->listaTipoRegiao($codigo_tipo_regiao);
  978 + $agregacoes = $this->listaAgregaRegiao($codigo_tipo_regiao);
  979 + foreach($agregacoes as $a){
  980 + $regioes[] = $this->listaTipoRegiao($a["codigo_tipo_regiao_pai"]);
  981 + }
  982 + return $regioes;
957 983 }
958 984 /*
959 985 Function: listaConexao
... ... @@ -1039,7 +1065,7 @@ class Metaestat{
1039 1065 /*
1040 1066 Function: listaTipoRegiao
1041 1067  
1042   - Lista os tipos de períodos de tempo cadastrados ou um único período
  1068 + Lista os tipos de regiao cadastrados ou uma unica
1043 1069  
1044 1070 Parametros:
1045 1071  
... ... @@ -1065,6 +1091,12 @@ class Metaestat{
1065 1091 //echo $sql;exit;
1066 1092 return $this->execSQL($sql,$id_agregaregiao);
1067 1093 }
  1094 + function listaAgregaRegiaoFilho($codigo_tipo_regiao,$codigo_tipo_regiao_pai){
  1095 + $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao ";
  1096 + $sql .= "WHERE codigo_tipo_regiao_pai = $codigo_tipo_regiao_pai ";
  1097 + $sql .= "AND codigo_tipo_regiao = $codigo_tipo_regiao";
  1098 + return $this->execSQL($sql,$codigo_tipo_regiao_pai);
  1099 + }
1068 1100 function esquemasConexao($codigo_estat_conexao){
1069 1101 return $this->execSQLDB($codigo_estat_conexao,"SELECT oid,nspname as esquema FROM pg_namespace group by nspname,oid order by nspname");
1070 1102 }
... ...
admin/php/metaestat.php
... ... @@ -208,9 +208,9 @@ switch (strtoupper($funcao))
208 208 retornaJSON($m->listaTipoRegiao($codigo_tipo_regiao));
209 209 exit;
210 210 break;
211   - case "LISTAREGIOESMEDIDAVARIAVEL":
  211 + case "LISTAREGIOESMEDIDA":
212 212 $m = new Metaestat();
213   - retornaJSON($m->listaRegioesMedidaVariavel($id_medida_variavel));
  213 + retornaJSON($m->listaRegioesMedida($id_medida_variavel));
214 214 exit;
215 215 break;
216 216 case "LISTAAGREGAREGIAO":
... ... @@ -414,7 +414,7 @@ switch (strtoupper($funcao))
414 414 $id_agregaregiao = $m->alteraAgregaRegiao($codigo_tipo_regiao);
415 415 }
416 416 else{
417   - $id_agregaregiao = $m->alteraAgregaRegiao("",$id_agregaregiao,$codigo_tipo_regiao_pai,$coluna_ligacao_regiaopai);
  417 + $id_agregaregiao = $m->alteraAgregaRegiao("",$id_agregaregiao,$codigo_tipo_regiao_pai,$colunaligacao_regiaopai);
418 418 $codigo_tipo_regiao = "";
419 419 }
420 420 retornaJSON($m->listaAgregaRegiao($codigo_tipo_regiao,$id_agregaregiao));
... ... @@ -757,8 +757,11 @@ switch (strtoupper($funcao))
757 757 */
758 758 case "MAPFILEMEDIDAVARIAVEL":
759 759 $m = new Metaestat();
  760 + if(!isset($codigo_tipo_regiao)){
  761 + $codigo_tipo_regiao = "";
  762 + }
760 763 if($formato == "json"){
761   - retornaJSON($m->mapfileMedidaVariavel($id_medida_variavel,$filtro,$todasascolunas,$tipolayer,$titulolayer,$id_classificacao,$agruparpor));
  764 + retornaJSON($m->mapfileMedidaVariavel($id_medida_variavel,$filtro,$todasascolunas,$tipolayer,$titulolayer,$id_classificacao,$agruparpor,$codigo_tipo_regiao));
762 765 }
763 766 exit;
764 767 break;
... ...
classesjs/classe_php.js
... ... @@ -1453,7 +1453,7 @@ i3GEO.php = {
1453 1453 Obtém a lista de regioes de uma medida de uma variável do sistema de metadados estatísticos
1454 1454 */
1455 1455 listaRegioesMedidaVariavel: function(id_medida_variavel,funcao){
1456   - var p = i3GEO.configura.locaplic+"/admin/php/metaestat.php?funcao=listaRegioesMedidaVariavel&id_medida_variavel="+id_medida_variavel+"&g_sid="+i3GEO.configura.sid;
  1456 + var p = i3GEO.configura.locaplic+"/admin/php/metaestat.php?funcao=listaRegioesMedida&id_medida_variavel="+id_medida_variavel+"&g_sid="+i3GEO.configura.sid;
1457 1457 i3GEO.util.ajaxGet(p,funcao);
1458 1458 },
1459 1459 /*
... ... @@ -1488,8 +1488,8 @@ i3GEO.php = {
1488 1488  
1489 1489 Adiciona uma camada ao mapa baseado no sistema de metadados estatísticos
1490 1490 */
1491   - mapfileMedidaVariavel: function(funcao,id_medida_variavel,filtro,todasascolunas,tipolayer,titulolayer,id_classificacao,agruparpor){
1492   - var p = i3GEO.configura.locaplic+"/admin/php/metaestat.php?funcao=mapfileMedidaVariavel&formato=json&id_medida_variavel="+id_medida_variavel+"&filtro="+filtro+"&todasascolunas="+todasascolunas+"&tipolayer="+tipolayer+"&titulolayer="+titulolayer+"&id_classificacao="+id_classificacao+"&agruparpor="+agruparpor+"&g_sid="+i3GEO.configura.sid;
  1491 + mapfileMedidaVariavel: function(funcao,id_medida_variavel,filtro,todasascolunas,tipolayer,titulolayer,id_classificacao,agruparpor,codigo_tipo_regiao){
  1492 + var p = i3GEO.configura.locaplic+"/admin/php/metaestat.php?funcao=mapfileMedidaVariavel&formato=json&codigo_tipo_regiao="+codigo_tipo_regiao+"&id_medida_variavel="+id_medida_variavel+"&filtro="+filtro+"&todasascolunas="+todasascolunas+"&tipolayer="+tipolayer+"&titulolayer="+titulolayer+"&id_classificacao="+id_classificacao+"&agruparpor="+agruparpor+"&g_sid="+i3GEO.configura.sid;
1493 1493 i3GEO.util.ajaxGet(p,funcao);
1494 1494 }
1495 1495 };
1496 1496 \ No newline at end of file
... ...
ferramentas/metaestat/dicionario.js
... ... @@ -83,5 +83,12 @@ pt:"Edição",
83 83 en:"",
84 84 es:"",
85 85 it:""
86   -}]
  86 +}],
  87 +"13":[
  88 +{
  89 +pt:"Escolha um tipo de região",
  90 +en:"",
  91 +es:"",
  92 +it:""
  93 +}],
87 94 };
88 95 \ No newline at end of file
... ...
ferramentas/metaestat/index.js
... ... @@ -112,6 +112,7 @@ i3GEOF.metaestat = {
112 112 $i(iddiv).innerHTML = i3GEOF.metaestat.classes.html();
113 113 i3GEOF.metaestat.classes.comboTipoRep();
114 114 i3GEOF.metaestat.classes.comboTipoClassificacao();
  115 + i3GEOF.metaestat.classes.comboRegiao();
115 116 },
116 117 abreJanela: function(){
117 118 var cabecalho,minimiza,imagemxy,janela;
... ... @@ -151,6 +152,8 @@ i3GEOF.metaestat = {
151 152 '</div>' +
152 153 '<div class="paragrafo" id="i3geoCartoTipoClassificacao" >' +
153 154 '</div>' +
  155 + '<div class="paragrafo" id="i3geoCartoRegioesMedidasVariavel" >' +
  156 + '</div>' +
154 157 '</div>';
155 158 return ins;
156 159 },
... ... @@ -200,11 +203,36 @@ i3GEOF.metaestat = {
200 203 }
201 204 return ins;
202 205 };
203   - i3GEOF.metaestat.comum.aguarde(onde);
204   - i3GEO.php.listaClassificacaoMedida(combo.value,temp);
  206 + if(combo.value != ""){
  207 + i3GEOF.metaestat.comum.aguarde(onde);
  208 + i3GEO.php.listaClassificacaoMedida(combo.value,temp);
  209 + }
205 210 },
206 211 comboTipoClassificacaoOnchange: function(){
207 212  
  213 + },
  214 + comboRegiao: function(id_medida_variavel){
  215 + i3GEOF.metaestat.comum.aguarde($i("i3geoCartoRegioesMedidasVariavel"));
  216 + var onde = $i("i3geoCartoRegioesMedidasVariavel"),
  217 + combo = $i("i3geoCartoComboMedidasVariavel"),
  218 + temp = function(dados){
  219 + var n = dados.length,
  220 + ins = '<p class="paragrafo" >'+$trad(13,i3GEOF.metaestat.dicionario)+'</p>',
  221 + i;
  222 + ins += "<select id='i3geoCartoComboRegioesMedidasVariavel' style='width:"+(i3GEOF.metaestat.LARGURA - 20)+"px' ><option value=''>---</option>";
  223 + for(i=0;i<n;i++){
  224 + ins += "<option title='"+dados[i].observacao+"' value='"+dados[i].codigo_tipo_regiao+"'>"+dados[i].nome_tipo_regiao+"</option>";
  225 + }
  226 + ins += "</select>";
  227 + if(onde){
  228 + onde.innerHTML = ins;
  229 + }
  230 + return ins;
  231 + };
  232 + if(combo.value != ""){
  233 + i3GEOF.metaestat.comum.aguarde(onde);
  234 + i3GEO.php.listaRegioesMedidaVariavel(combo.value,temp);
  235 + }
208 236 }
209 237 },
210 238 comum:{
... ... @@ -246,7 +274,8 @@ i3GEOF.metaestat = {
246 274 $i("i3geoCartoComboTipoRep").value,
247 275 i3GEOF.metaestat.comum.defineTitulo(),
248 276 $i("i3geoCartoComboTipoClassificacao").value,
249   - i3GEOF.metaestat.comum.defineAgruparPor()
  277 + i3GEOF.metaestat.comum.defineAgruparPor(),
  278 + $i("i3geoCartoComboRegioesMedidasVariavel").value
250 279 );
251 280 },
252 281 defineTitulo: function(){
... ... @@ -261,7 +290,8 @@ i3GEOF.metaestat = {
261 290 titulo = $i("i3geoCartoComboVariavel").options[$i("i3geoCartoComboVariavel").selectedIndex].label +" - "+
262 291 $i("i3geoCartoComboMedidasVariavel").options[$i("i3geoCartoComboMedidasVariavel").selectedIndex].label +" - "+
263 292 $i("i3geoCartoComboTipoRep").options[$i("i3geoCartoComboTipoRep").selectedIndex].label +" - "+
264   - $i("i3geoCartoComboTipoClassificacao").options[$i("i3geoCartoComboTipoClassificacao").selectedIndex].label;
  293 + $i("i3geoCartoComboTipoClassificacao").options[$i("i3geoCartoComboTipoClassificacao").selectedIndex].label + " - " +
  294 + $i("i3geoCartoComboRegioesMedidasVariavel").options[$i("i3geoCartoComboRegioesMedidasVariavel").selectedIndex].label;
265 295 n = dados.length;
266 296 for(i=0;i<n;i++){
267 297 c = $i("comboparametro_"+dados[i].id_parametro_medida+"_"+dados[i].id_pai);
... ... @@ -591,29 +621,6 @@ i3GEOF.metaestat = {
591 621 return false;
592 622 }
593 623 },
594   - regioes: {
595   - //guarda a lista de parametros
596   - dados: [],
597   - //obtem a lista com as regioes da medida
598   - lista: function(id_medida_variavel){
599   - i3GEOF.metaestat.comum.aguarde($i("i3geoCartoRegioesMedidasVariavel"));
600   - var temp = function(dados){
601   - i3GEOF.metaestat.regioes.dados = dados;
602   - i3GEOF.metaestat.regioes.combo();
603   - i3GEOF.metaestat.comum.aguarde($i("i3geoCartoRegioesMedidasVariavel"));
604   - };
605   - i3GEO.php.listaRegioesMedidaVariavel(id_medida_variavel,temp);
606   - },
607   - combo: function(){
608   - var dados = i3GEOF.metaestat.parametros.dados,
609   - n = dados.length,
610   - onde = $i("i3geoCartoRegioesMedidasVariavel"),
611   - idpar,idcombo,i,novoel,teste;
612   - for(i=0;i<n;i++){
613   -
614   - }
615   - }
616   - },
617 624 principal: {
618 625 inicia: function(iddiv){
619 626 if(!iddiv || !$i(iddiv)){
... ...