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)){ | ... | ... |