Commit a239546666de3d1e4cfa351694d1abbfa117c9e7
1 parent
03ae8791
Exists in
master
and in
7 other branches
Rotina de agregacao de regioes no sistema de metadados estatisticos
Showing
6 changed files
with
96 additions
and
47 deletions
Show diff stats
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
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)){ | ... | ... |