From a239546666de3d1e4cfa351694d1abbfa117c9e7 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Mon, 17 Sep 2012 21:10:49 +0000 Subject: [PATCH] Rotina de agregacao de regioes no sistema de metadados estatisticos --- admin/admin.db | Bin 133120 -> 0 bytes admin/php/classe_metaestat.php | 56 ++++++++++++++++++++++++++++++++++++++++++++------------ admin/php/metaestat.php | 11 +++++++---- classesjs/classe_php.js | 6 +++--- ferramentas/metaestat/dicionario.js | 9 ++++++++- ferramentas/metaestat/index.js | 61 ++++++++++++++++++++++++++++++++++--------------------------- 6 files changed, 96 insertions(+), 47 deletions(-) diff --git a/admin/admin.db b/admin/admin.db index 2ca94eb..1d1bb7c 100644 Binary files a/admin/admin.db and b/admin/admin.db differ diff --git a/admin/php/classe_metaestat.php b/admin/php/classe_metaestat.php index e3a9f73..41c50b9 100755 --- a/admin/php/classe_metaestat.php +++ b/admin/php/classe_metaestat.php @@ -235,10 +235,15 @@ class Metaestat{ $todasascolunas - opcional */ - function sqlMedidaVariavel($id_medida_variavel,$todasascolunas,$agruparpor="",$tipolayer="polygon"){ + function sqlMedidaVariavel($id_medida_variavel,$todasascolunas,$agruparpor="",$tipolayer="polygon",$codigo_tipo_regiao = ""){ $filtro = false; $dados = $this->listaMedidaVariavel("",$id_medida_variavel); $dadosgeo = $this->listaTipoRegiao($dados["codigo_tipo_regiao"]); + $agregaregiao = false; + if($dados["codigo_tipo_regiao"] != $codigo_tipo_regiao){ + $agregaregiao = true; + $dadosgeoagregada = $this->listaTipoRegiao($codigo_tipo_regiao); + } if($tipolayer != "point"){ $colunageo = $dadosgeo["colunageo"]; } @@ -250,11 +255,15 @@ class Metaestat{ if(!empty($agruparpor)){ $sql .= ",d.".$agruparpor; } - $sqlgeo = $sql.",g.".$colunageo; } else{ $sql = " SELECT d.* "; - $sqlgeo = $sql.",g.".$colunageo; + } + $sqlgeo = $sql.",g.".$colunageo; + // + if($agregaregiao == true){ + $dadosAgregacao = $this->listaAgregaRegiaoFilho($dados["codigo_tipo_regiao"], $codigo_tipo_regiao); + $sqlgeo = "g.".$dadosAgregacao["colunaligacao_regiaopai"].",sum(d.".$dados["colunavalor"].") as ".$dados["colunavalor"]; } if(empty($agruparpor)){ $sql .= " FROM ".$dados["esquemadb"].".".$dados["tabela"]." as d "; @@ -279,11 +288,18 @@ class Metaestat{ $sqlgeo .= " WHERE ".$j; } //atencao: cuidado ao alterar essa string pois ') as foo' pode ser usado para replace em outras funcoes - $sqlgeo = $colunageo." from ($sqlgeo) as foo using unique ".$dados["colunaidgeo"]." using srid=".$dadosgeo["srid"]; $colunas = $this->colunasTabela($dados["codigo_estat_conexao"],$dados["esquemadb"],$dados["tabela"]); + //agregacao com uma regiao maior TODO + if($agregaregiao == true){ + $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"]; + $sqlgeo = $colunageo." from ( $sqlgeo ) as foo using unique ".$dadosAgregacao["colunaligacao_regiaopai"]." using srid=".$dadosgeo["srid"]; + } + else{ + $sqlgeo = $colunageo." from (".$sqlgeo." __filtro__ ) as foo using unique ".$dados["colunaidgeo"]." using srid=".$dadosgeo["srid"]; + } return array("sqlagrupamento"=>$sqlagrupamento,"sql"=>$sql,"sqlmapserver"=>$sqlgeo,"filtro"=>$filtro,"colunas"=>$colunas); } - function mapfileMedidaVariavel($id_medida_variavel,$filtro="",$todasascolunas = 0,$tipolayer="polygon",$titulolayer="",$id_classificacao="",$agruparpor=""){ + function mapfileMedidaVariavel($id_medida_variavel,$filtro="",$todasascolunas = 0,$tipolayer="polygon",$titulolayer="",$id_classificacao="",$agruparpor="",$codigo_tipo_regiao=""){ //$rand = $this->nomeRandomico(); $arq = $this->dir_tmp."/".$this->nomecache.".map"; if(!file_exists($arq)){ @@ -298,10 +314,13 @@ class Metaestat{ $conexao = $this->listaConexao($meta["codigo_estat_conexao"],true); $conexao = "user=".$conexao["usuario"]." password=".$conexao["senha"]." dbname=".$conexao["bancodedados"]." host=".$conexao["host"]." port=".$conexao["porta"].""; //echo $conexao;exit; - $sql = $this->sqlMedidaVariavel($id_medida_variavel,$todasascolunas,$agruparpor,$tipolayer); + $sql = $this->sqlMedidaVariavel($id_medida_variavel,$todasascolunas,$agruparpor,$tipolayer,$codigo_tipo_regiao); $sqlf = $sql["sqlmapserver"]; if(!empty($filtro)){ - $sqlf = str_replace(") as foo"," AND ".$filtro." ) as foo",$sqlf); + $sqlf = str_replace("__filtro__"," AND ".$filtro,$sqlf); + } + else{ + $sqlf = str_replace("__filtro__","",$sqlf); } $classes = ""; if(!empty($id_classificacao)){ @@ -709,7 +728,7 @@ class Metaestat{ return "Error!: " . $e->getMessage(); } } - function alteraAgregaRegiao($codigo_tipo_regiao,$id_agregaregiao="",$codigo_tipo_regiao_pai="",$coluna_ligacao_regiaopai=""){ + function alteraAgregaRegiao($codigo_tipo_regiao,$id_agregaregiao="",$codigo_tipo_regiao_pai="",$colunaligacao_regiaopai=""){ try { if($id_agregaregiao != ""){ $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{ return $this->execSQL($sql,$id_medida_variavel); } /* - Function: listaRegioesMedidaVariavel + Function: listaRegioesMedida Lista as regioes de uma medida variavel */ - function listaRegioesMedidaVariavel($id_medida_variavel){ - + function listaRegioesMedida($id_medida_variavel){ + $variavel = $this->listaMedidaVariavel("",$id_medida_variavel); + $codigo_tipo_regiao = $variavel["codigo_tipo_regiao"]; + $regioes[] = $this->listaTipoRegiao($codigo_tipo_regiao); + $agregacoes = $this->listaAgregaRegiao($codigo_tipo_regiao); + foreach($agregacoes as $a){ + $regioes[] = $this->listaTipoRegiao($a["codigo_tipo_regiao_pai"]); + } + return $regioes; } /* Function: listaConexao @@ -1039,7 +1065,7 @@ class Metaestat{ /* Function: listaTipoRegiao - Lista os tipos de períodos de tempo cadastrados ou um único período + Lista os tipos de regiao cadastrados ou uma unica Parametros: @@ -1065,6 +1091,12 @@ class Metaestat{ //echo $sql;exit; return $this->execSQL($sql,$id_agregaregiao); } + function listaAgregaRegiaoFilho($codigo_tipo_regiao,$codigo_tipo_regiao_pai){ + $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao "; + $sql .= "WHERE codigo_tipo_regiao_pai = $codigo_tipo_regiao_pai "; + $sql .= "AND codigo_tipo_regiao = $codigo_tipo_regiao"; + return $this->execSQL($sql,$codigo_tipo_regiao_pai); + } function esquemasConexao($codigo_estat_conexao){ return $this->execSQLDB($codigo_estat_conexao,"SELECT oid,nspname as esquema FROM pg_namespace group by nspname,oid order by nspname"); } diff --git a/admin/php/metaestat.php b/admin/php/metaestat.php index f5c7221..603a4a5 100644 --- a/admin/php/metaestat.php +++ b/admin/php/metaestat.php @@ -208,9 +208,9 @@ switch (strtoupper($funcao)) retornaJSON($m->listaTipoRegiao($codigo_tipo_regiao)); exit; break; - case "LISTAREGIOESMEDIDAVARIAVEL": + case "LISTAREGIOESMEDIDA": $m = new Metaestat(); - retornaJSON($m->listaRegioesMedidaVariavel($id_medida_variavel)); + retornaJSON($m->listaRegioesMedida($id_medida_variavel)); exit; break; case "LISTAAGREGAREGIAO": @@ -414,7 +414,7 @@ switch (strtoupper($funcao)) $id_agregaregiao = $m->alteraAgregaRegiao($codigo_tipo_regiao); } else{ - $id_agregaregiao = $m->alteraAgregaRegiao("",$id_agregaregiao,$codigo_tipo_regiao_pai,$coluna_ligacao_regiaopai); + $id_agregaregiao = $m->alteraAgregaRegiao("",$id_agregaregiao,$codigo_tipo_regiao_pai,$colunaligacao_regiaopai); $codigo_tipo_regiao = ""; } retornaJSON($m->listaAgregaRegiao($codigo_tipo_regiao,$id_agregaregiao)); @@ -757,8 +757,11 @@ switch (strtoupper($funcao)) */ case "MAPFILEMEDIDAVARIAVEL": $m = new Metaestat(); + if(!isset($codigo_tipo_regiao)){ + $codigo_tipo_regiao = ""; + } if($formato == "json"){ - retornaJSON($m->mapfileMedidaVariavel($id_medida_variavel,$filtro,$todasascolunas,$tipolayer,$titulolayer,$id_classificacao,$agruparpor)); + retornaJSON($m->mapfileMedidaVariavel($id_medida_variavel,$filtro,$todasascolunas,$tipolayer,$titulolayer,$id_classificacao,$agruparpor,$codigo_tipo_regiao)); } exit; break; diff --git a/classesjs/classe_php.js b/classesjs/classe_php.js index 9ea6aa5..48722d8 100644 --- a/classesjs/classe_php.js +++ b/classesjs/classe_php.js @@ -1453,7 +1453,7 @@ i3GEO.php = { Obtém a lista de regioes de uma medida de uma variável do sistema de metadados estatísticos */ listaRegioesMedidaVariavel: function(id_medida_variavel,funcao){ - var p = i3GEO.configura.locaplic+"/admin/php/metaestat.php?funcao=listaRegioesMedidaVariavel&id_medida_variavel="+id_medida_variavel+"&g_sid="+i3GEO.configura.sid; + var p = i3GEO.configura.locaplic+"/admin/php/metaestat.php?funcao=listaRegioesMedida&id_medida_variavel="+id_medida_variavel+"&g_sid="+i3GEO.configura.sid; i3GEO.util.ajaxGet(p,funcao); }, /* @@ -1488,8 +1488,8 @@ i3GEO.php = { Adiciona uma camada ao mapa baseado no sistema de metadados estatísticos */ - mapfileMedidaVariavel: function(funcao,id_medida_variavel,filtro,todasascolunas,tipolayer,titulolayer,id_classificacao,agruparpor){ - 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; + mapfileMedidaVariavel: function(funcao,id_medida_variavel,filtro,todasascolunas,tipolayer,titulolayer,id_classificacao,agruparpor,codigo_tipo_regiao){ + 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; i3GEO.util.ajaxGet(p,funcao); } }; \ No newline at end of file diff --git a/ferramentas/metaestat/dicionario.js b/ferramentas/metaestat/dicionario.js index 96fce93..5550c00 100644 --- a/ferramentas/metaestat/dicionario.js +++ b/ferramentas/metaestat/dicionario.js @@ -83,5 +83,12 @@ pt:"Edição", en:"", es:"", it:"" -}] +}], +"13":[ +{ +pt:"Escolha um tipo de região", +en:"", +es:"", +it:"" +}], }; \ No newline at end of file diff --git a/ferramentas/metaestat/index.js b/ferramentas/metaestat/index.js index 227dd88..ebe5d8f 100644 --- a/ferramentas/metaestat/index.js +++ b/ferramentas/metaestat/index.js @@ -112,6 +112,7 @@ i3GEOF.metaestat = { $i(iddiv).innerHTML = i3GEOF.metaestat.classes.html(); i3GEOF.metaestat.classes.comboTipoRep(); i3GEOF.metaestat.classes.comboTipoClassificacao(); + i3GEOF.metaestat.classes.comboRegiao(); }, abreJanela: function(){ var cabecalho,minimiza,imagemxy,janela; @@ -151,6 +152,8 @@ i3GEOF.metaestat = { '' + '
' + '
' + + '
' + + '
' + ''; return ins; }, @@ -200,11 +203,36 @@ i3GEOF.metaestat = { } return ins; }; - i3GEOF.metaestat.comum.aguarde(onde); - i3GEO.php.listaClassificacaoMedida(combo.value,temp); + if(combo.value != ""){ + i3GEOF.metaestat.comum.aguarde(onde); + i3GEO.php.listaClassificacaoMedida(combo.value,temp); + } }, comboTipoClassificacaoOnchange: function(){ + }, + comboRegiao: function(id_medida_variavel){ + i3GEOF.metaestat.comum.aguarde($i("i3geoCartoRegioesMedidasVariavel")); + var onde = $i("i3geoCartoRegioesMedidasVariavel"), + combo = $i("i3geoCartoComboMedidasVariavel"), + temp = function(dados){ + var n = dados.length, + ins = '

'+$trad(13,i3GEOF.metaestat.dicionario)+'

', + i; + ins += ""; + if(onde){ + onde.innerHTML = ins; + } + return ins; + }; + if(combo.value != ""){ + i3GEOF.metaestat.comum.aguarde(onde); + i3GEO.php.listaRegioesMedidaVariavel(combo.value,temp); + } } }, comum:{ @@ -246,7 +274,8 @@ i3GEOF.metaestat = { $i("i3geoCartoComboTipoRep").value, i3GEOF.metaestat.comum.defineTitulo(), $i("i3geoCartoComboTipoClassificacao").value, - i3GEOF.metaestat.comum.defineAgruparPor() + i3GEOF.metaestat.comum.defineAgruparPor(), + $i("i3geoCartoComboRegioesMedidasVariavel").value ); }, defineTitulo: function(){ @@ -261,7 +290,8 @@ i3GEOF.metaestat = { titulo = $i("i3geoCartoComboVariavel").options[$i("i3geoCartoComboVariavel").selectedIndex].label +" - "+ $i("i3geoCartoComboMedidasVariavel").options[$i("i3geoCartoComboMedidasVariavel").selectedIndex].label +" - "+ $i("i3geoCartoComboTipoRep").options[$i("i3geoCartoComboTipoRep").selectedIndex].label +" - "+ - $i("i3geoCartoComboTipoClassificacao").options[$i("i3geoCartoComboTipoClassificacao").selectedIndex].label; + $i("i3geoCartoComboTipoClassificacao").options[$i("i3geoCartoComboTipoClassificacao").selectedIndex].label + " - " + + $i("i3geoCartoComboRegioesMedidasVariavel").options[$i("i3geoCartoComboRegioesMedidasVariavel").selectedIndex].label; n = dados.length; for(i=0;i