Commit b673de611af68272fd3c46315609f7ee9044e709
1 parent
cae55a29
Exists in
master
and in
7 other branches
Aprimoramento do gerador de cubos para o SAIKU
Showing
4 changed files
with
466 additions
and
241 deletions
Show diff stats
admin/admin.db
No preview for this file type
admin/php/classe_metaestat.php
... | ... | @@ -528,6 +528,7 @@ class Metaestat{ |
528 | 528 | return array("caminho"=>$caminho,"colunas"=>$colunas); |
529 | 529 | } |
530 | 530 | } |
531 | + return array("caminho"=>$caminho,"colunas"=>$colunas); | |
531 | 532 | } |
532 | 533 | function hierarquiaPath($node){ |
533 | 534 | $query="select codigo_tipo_regiao_pai as parent from ".$this->esquemaadmin."i3geoestat_agregaregiao WHERE codigo_tipo_regiao = $node"; |
... | ... | @@ -2056,6 +2057,10 @@ class Metaestat{ |
2056 | 2057 | } |
2057 | 2058 | return $this->execSQL($sql,""); |
2058 | 2059 | } |
2060 | + function listaHierarquia($codigoregiaopai=""){ | |
2061 | + $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao order by codigo_tipo_regiao"; | |
2062 | + return $this->execSQL($sql,""); | |
2063 | + } | |
2059 | 2064 | /** |
2060 | 2065 | * Lista os registros de um tipo de regiao |
2061 | 2066 | * Se for definido o pai, lista os valores da regiao que e filha |
... | ... | @@ -2132,7 +2137,9 @@ class Metaestat{ |
2132 | 2137 | function listaAgregaRegiaoFilho($codigo_tipo_regiao,$codigo_tipo_regiao_pai){ |
2133 | 2138 | $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao "; |
2134 | 2139 | $sql .= "WHERE codigo_tipo_regiao_pai = $codigo_tipo_regiao_pai "; |
2135 | - $sql .= "AND codigo_tipo_regiao = $codigo_tipo_regiao"; | |
2140 | + if($codigo_tipo_regiao != ""){ | |
2141 | + $sql .= "AND codigo_tipo_regiao = $codigo_tipo_regiao"; | |
2142 | + } | |
2136 | 2143 | return $this->execSQL($sql,$codigo_tipo_regiao_pai); |
2137 | 2144 | } |
2138 | 2145 | /** | ... | ... |
ferramentas/saiku/esquemaxml.php
... | ... | @@ -4,82 +4,253 @@ |
4 | 4 | // |
5 | 5 | //utilize &xmlesquema= caso o XML ja exista |
6 | 6 | // |
7 | -//http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?output=&xmlesquema=http://localhost/i3geo/ferramentas/saiku/testemondrian.xml | |
7 | +//utilize $regiao para obter o xml de uma so regiao | |
8 | +// | |
9 | +/** | |
10 | +http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?output=&xmlesquema=http://localhost/i3geo/ferramentas/saiku/testemondrian.xml&output=xml | |
11 | +http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?xmlesquema=&output=xml®iao=1 | |
12 | +*/ | |
13 | + | |
8 | 14 | // |
9 | 15 | //quando o saiku e iniciado de fora do i3geo, e necessario inicializar um mapfile para uso como base dos mapas |
10 | -if(empty($_GET["g_sid"])){ | |
11 | - include(dirname(__FILE__)."/../../ms_criamapa.php"); | |
12 | - //reinicia a url | |
13 | - $urln = "?g_sid=".session_id()."&locaplic=".$_GET["locaplic"]."&mapext=".$mapext."&origem=".$_GET["origem"]."&output=".$_GET["output"]."&xmlesquema=".$_GET["xmlesquema"]; | |
14 | - header("Location:".$urln); | |
15 | - exit; | |
16 | -} | |
16 | +// | |
17 | +criaMapfileInicial(); | |
17 | 18 | |
18 | 19 | include(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php"); |
19 | 20 | include(dirname(__FILE__)."/../../admin/php/classe_metaestat.php"); |
20 | 21 | if(!isset($dir_tmp)){ |
21 | 22 | include(dirname(__FILE__)."/../../ms_configura.php"); |
22 | 23 | } |
23 | -$nomeConexao = nomeRandomico(); | |
24 | -$nomeDatasource = $dir_tmp."/saiku-datasources/".$nomeConexao; | |
25 | 24 | |
26 | -//pega a sessao PHP aberta pelo i3Geo ou ms_criamapa.php | |
27 | -session_name("i3GeoPHP"); | |
28 | -session_id($_GET["g_sid"]); | |
29 | -session_start(); | |
25 | +$urlXmlEsquema = ""; | |
26 | +$nomeConexao = criaConexaoEsquema(); | |
27 | + | |
30 | 28 | $map_file = $_SESSION["map_file"]; |
31 | -if(empty($_GET["xmlesquema"])){ | |
32 | - $urlXmlEsquema = $_SESSION["tmpurl"].basename(dirname($map_file))."/".$nomeConexao.".xml"; | |
29 | + | |
30 | +$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml"; | |
31 | + | |
32 | +gravaDataSource(); | |
33 | + | |
34 | +if(!empty($_GET["xmlesquema"])){ | |
35 | + imprimeEsquema(); | |
36 | +} | |
37 | + | |
38 | +$m = new Metaestat(); | |
39 | + | |
40 | +// | |
41 | +//obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao | |
42 | +// | |
43 | +if(empty($_GET["regiao"])){ | |
44 | + $s = pegaSelecaoRegioes(); | |
45 | + $selecaoRegiao = $s["selecaoRegiao"]; | |
46 | + $codigo_tipo_regiao = $s["codigo_tipo_regiao"]; | |
33 | 47 | } |
34 | 48 | else{ |
35 | - $urlXmlEsquema = $_GET["xmlesquema"]; | |
49 | + $codigo_tipo_regiao = $_GET["regiao"]; | |
36 | 50 | } |
37 | -$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml"; | |
51 | +//verifica se o cubo usa uma regiao especifica ou todas | |
52 | +if($codigo_tipo_regiao == ""){ | |
53 | + $regioes = $m->listaTipoRegiao(); | |
54 | +} | |
55 | +else{ | |
56 | + $regioes = array($m->listaTipoRegiao($codigo_tipo_regiao)); | |
57 | +} | |
58 | +$s = ""; | |
38 | 59 | |
39 | -/* | |
40 | - $saikuConfigDataSource vem do ms_configura.php | |
41 | - | |
42 | -Exemplo de arquivo de fonte: | |
43 | -type=OLAP | |
44 | -name=i3geo | |
45 | -driver=mondrian.olap4j.MondrianOlap4jDriver | |
46 | -location=jdbc:mondrian:Jdbc=jdbc:postgresql://localhost:5432/i3geosaude;Catalog=http://localhost/i3geo/ferramentas/saiku/esquemaxml.php;JdbcDrivers=org.postgresql.Driver; | |
47 | -username=postgres | |
48 | -password=postgres | |
49 | - | |
50 | -Array com os parametros definidos em ms_configura: | |
51 | - | |
52 | -$saikuConfigDataSource = array( | |
53 | - "type"=>"OLAP", | |
54 | - "driver"=>"mondrian.olap4j.MondrianOlap4jDriver", | |
55 | - "location"=>"jdbc:mondrian:Jdbc=jdbc:postgresql", | |
56 | - "serverdb"=>"localhost", | |
57 | - "port"=>"5432", | |
58 | - "database"=>"i3geosaude", | |
59 | - "JdbcDrivers"=>"org.postgresql.Driver", | |
60 | - "username"=>"postgres", | |
61 | - "password"=>"postgres" | |
62 | -); | |
63 | -*/ | |
64 | -$stringDatasource = " | |
65 | -type={$saikuConfigDataSource["type"]} | |
66 | -name={$nomeConexao} | |
67 | -driver={$saikuConfigDataSource["driver"]} | |
68 | -location={$saikuConfigDataSource["location"]}://{$saikuConfigDataSource["serverdb"]}:{$saikuConfigDataSource["port"]}/{$saikuConfigDataSource["database"]};Catalog={$urlXmlEsquema};JdbcDrivers={$saikuConfigDataSource["JdbcDrivers"]}; | |
69 | -username={$saikuConfigDataSource["username"]} | |
70 | -password={$saikuConfigDataSource["password"]} | |
71 | -"; | |
72 | -//salva o arquivo com a fonte | |
73 | -gravaDados(array($stringDatasource),$nomeDatasource); | |
74 | - | |
75 | -if(empty($_GET["xmlesquema"])){ | |
76 | - $m = new Metaestat(); | |
60 | +if(empty($saikuConfigDataSource['tabelaDimensaoTempo'])){ | |
61 | + $saikuConfigDataSource['tabelaDimensaoTempo'] = "i3geo_metaestat.dim_tempo"; | |
62 | +} | |
77 | 63 | |
78 | - // | |
79 | - //obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao | |
80 | - // | |
81 | - $selecaoRegiao = array(); | |
64 | +$medidas = $m->listaMedidaVariavel(); | |
65 | + | |
66 | +// | |
67 | +//formata o array de regioes colocando na chave o codigo da regiao | |
68 | +// | |
69 | +$chavesRegiao = array(); | |
70 | +$todasAsRegioes = $m->listaTipoRegiao(); | |
71 | +foreach($todasAsRegioes as $R){ | |
72 | + $chavesRegiao[$R["codigo_tipo_regiao"]] = $R; | |
73 | +} | |
74 | + | |
75 | +//inicia montagem do XML | |
76 | + | |
77 | +// | |
78 | +//cria as dimensoes de tipo temporal | |
79 | +// | |
80 | +$xmlTempo = dimensoesTemporais(); | |
81 | + | |
82 | +// | |
83 | +//dimensoes geograficas | |
84 | +//as dimensoes sao duplicadas | |
85 | +//uma delas contem o geocodigo que permite a geracao do mapa | |
86 | +// | |
87 | +//guarda as regioes filhas de uma determinada regiao (chave) | |
88 | +$filhosDaRegiao = array(); | |
89 | +$VirtualCubeDimensionDaRegiao = array(); | |
90 | +$VirtualCubeMeasureDaRegiao = array(); | |
91 | + | |
92 | +$dimRegioes = dimensoesGeo(); | |
93 | + | |
94 | +//var_dump(array_column($dimRegioes,"juncoes","codigo_tipo_regiao"));exit; | |
95 | + | |
96 | +$xmlRegioes = implode(" ",array_column($dimRegioes,"xml")); | |
97 | + | |
98 | +// | |
99 | +//outras dimensoes definidas nos parametros e que nao sejam do tipo tempo | |
100 | +// | |
101 | +$xmlOutrasDim = dimensoesOutras(); | |
102 | + | |
103 | +// | |
104 | +//cria as dimensoes das medidas conforme o nome da tabela utilizada | |
105 | +// | |
106 | +$VirtualCubeDimension = array(); | |
107 | +$VirtualCubeMeasure = array(); | |
108 | +$xmlDimensoesTabelas = dimensoesTabelas(); | |
109 | + | |
110 | +// | |
111 | +//cubo geral, com todas as dimensoes e medidas | |
112 | +// | |
113 | +$xmlCuboTodas = cuboTodas(); | |
114 | +// | |
115 | +//cubos por regiao | |
116 | +// | |
117 | +$xmlCuboRegioes = cuboRegioes(); | |
118 | + | |
119 | +$xml = "<Schema name='i3Geo Metaestat'>"; | |
120 | +$xml .= $xmlTempo.$xmlRegioes.$xmlOutrasDim.$xmlDimensoesTabelas.$xmlCuboRegioes.$xmlCuboTodas; | |
121 | +$xml .= "</Schema>"; | |
122 | + | |
123 | +//xml pronto!!!!! | |
124 | + | |
125 | +error_reporting(0); | |
126 | +ob_end_clean(); | |
127 | +// | |
128 | +//grava os dados em um arquivo. O usuario pode evitar isso e imprimir direto na tela | |
129 | +//usando output "xml" | |
130 | +// | |
131 | +if($_GET["output"] != "xml"){ | |
132 | + gravaDados(array($xml),$arquivoXmlEsquema); | |
133 | +} | |
134 | +imprimeEsquema(); | |
135 | + | |
136 | + | |
137 | +////////////////////////////////////////////////////////////////////////////////////////// | |
138 | +function caminhoRegiao($hs,$chavesRegiao,$h,$regiaoInicial,$caminho) | |
139 | +{ | |
140 | + foreach($hs as $n){ | |
141 | + if($n["codigo_tipo_regiao"] == $regiaoInicial){ | |
142 | + $caminho[] = array("a"=>$regiaoInicial,"join"=>$n["codigo_tipo_regiao_pai"],"ligacao"=>$n["colunaligacao_regiaopai"]); | |
143 | + $caminho = caminhoRegiao($hs,$chavesRegiao,$h, $n["codigo_tipo_regiao_pai"],$caminho); | |
144 | + } | |
145 | + else{ | |
146 | + //$caminho = caminhoRegiao($hs,$chavesRegiao,$h, $n["codigo_tipo_regiao_pai"],$caminho); | |
147 | + } | |
148 | + } | |
149 | + return $caminho; | |
150 | +} | |
151 | +function converte($texto){ | |
152 | + $texto = str_replace("&","&",htmlentities($texto)); | |
153 | + return $texto; | |
154 | +} | |
155 | +function imprimeEsquema(){ | |
156 | + global $saikuUrl,$nomeConexao,$xml; | |
157 | + if($_GET["output"] == "xml"){ | |
158 | + if(!empty($_GET["xmlesquema"])){ | |
159 | + echo header("Content-type: application/xml"); | |
160 | + header("Location:".$_GET["xmlesquema"]); | |
161 | + } | |
162 | + else{ | |
163 | + imprimeXml($xml); | |
164 | + } | |
165 | + } | |
166 | + else{ | |
167 | + header("Location:".$saikuUrl."/?nomeConexao=".$nomeConexao."&locaplic=".$_GET["locaplic"]."&g_sid=".$_GET["g_sid"]."&mapext=".$_GET["mapext"]."&origem=".$_GET["origem"]."®iao=".$_GET["regiao"]); | |
168 | + } | |
169 | +} | |
170 | +function imprimeXml($xml){ | |
171 | + echo header("Content-type: application/xml"); | |
172 | + echo $xml; | |
173 | +} | |
174 | +function criaMapfileInicial(){ | |
175 | + global $mapext; | |
176 | + if(empty($_GET["g_sid"])){ | |
177 | + include(dirname(__FILE__)."/../../ms_configura.php"); | |
178 | + $interface = "mashup"; | |
179 | + include(dirname(__FILE__)."/../../ms_criamapa.php"); | |
180 | + | |
181 | + //reinicia a url | |
182 | + $urln = "?g_sid=".session_id()."&locaplic=".$_GET["locaplic"]."&mapext=".$mapext."&origem=".$_GET["origem"]."&output=".$_GET["output"]."&xmlesquema=".$_GET["xmlesquema"]."®iao=".$_GET["regiao"]; | |
183 | + header("Location:".$urln); | |
184 | + exit; | |
185 | + } | |
186 | +} | |
187 | +function criaConexaoEsquema(){ | |
188 | + global $dir_tmp, $urlXmlEsquema; | |
189 | + $nomeConexao = nomeRandomico(); | |
190 | + //pega a sessao PHP aberta pelo i3Geo ou ms_criamapa.php | |
191 | + session_name("i3GeoPHP"); | |
192 | + session_id($_GET["g_sid"]); | |
193 | + session_start(); | |
194 | + $map_file = $_SESSION["map_file"]; | |
195 | + if(empty($_GET["xmlesquema"])){ | |
196 | + $urlXmlEsquema = $_SESSION["tmpurl"].basename(dirname($map_file))."/".$nomeConexao.".xml"; | |
197 | + } | |
198 | + else{ | |
199 | + $urlXmlEsquema = $_GET["xmlesquema"]; | |
200 | + //cria um nome de arquivo reaproveitável | |
201 | + $nomeConexao = md5($_GET["xmlesquema"]); | |
202 | + } | |
203 | + //$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml"; | |
204 | + return $nomeConexao; | |
205 | +} | |
206 | +function gravaDataSource(){ | |
207 | + /* | |
208 | + $saikuConfigDataSource vem do ms_configura.php | |
209 | + | |
210 | + Exemplo de arquivo de fonte: | |
211 | + type=OLAP | |
212 | + name=i3geo | |
213 | + driver=mondrian.olap4j.MondrianOlap4jDriver | |
214 | + location=jdbc:mondrian:Jdbc=jdbc:postgresql://localhost:5432/i3geosaude;Catalog=http://localhost/i3geo/ferramentas/saiku/esquemaxml.php;JdbcDrivers=org.postgresql.Driver; | |
215 | + username=postgres | |
216 | + password=postgres | |
217 | + | |
218 | + Array com os parametros definidos em ms_configura: | |
219 | + | |
220 | + $saikuConfigDataSource = array( | |
221 | + "type"=>"OLAP", | |
222 | + "driver"=>"mondrian.olap4j.MondrianOlap4jDriver", | |
223 | + "location"=>"jdbc:mondrian:Jdbc=jdbc:postgresql", | |
224 | + "serverdb"=>"localhost", | |
225 | + "port"=>"5432", | |
226 | + "database"=>"i3geosaude", | |
227 | + "JdbcDrivers"=>"org.postgresql.Driver", | |
228 | + "username"=>"postgres", | |
229 | + "password"=>"postgres" | |
230 | + ); | |
231 | + */ | |
232 | + global $arquivoXmlEsquema,$saikuConfigDataSource,$nomeConexao,$urlXmlEsquema,$dir_tmp; | |
233 | + $nomeDatasource = $dir_tmp."/saiku-datasources/".$nomeConexao; | |
234 | + if(!file_exists($arquivoXmlEsquema)){ | |
235 | + $stringDatasource = " | |
236 | + type={$saikuConfigDataSource["type"]} | |
237 | + name={$nomeConexao} | |
238 | + driver={$saikuConfigDataSource["driver"]} | |
239 | + location={$saikuConfigDataSource["location"]}://{$saikuConfigDataSource["serverdb"]}:{$saikuConfigDataSource["port"]}/{$saikuConfigDataSource["database"]};Catalog={$urlXmlEsquema};JdbcDrivers={$saikuConfigDataSource["JdbcDrivers"]}; | |
240 | + username={$saikuConfigDataSource["username"]} | |
241 | + password={$saikuConfigDataSource["password"]} | |
242 | + "; | |
243 | + //salva o arquivo com a fonte | |
244 | + gravaDados(array($stringDatasource),$nomeDatasource); | |
245 | + } | |
246 | +} | |
247 | +function pegaSelecaoRegioes(){ | |
248 | + global $m,$map_file,$postgis_mapa; | |
82 | 249 | $codigo_tipo_regiao = ""; |
250 | + $selecaoRegiao = array(); | |
251 | + $regiao = ""; | |
252 | + $item = ""; | |
253 | + $registros = ""; | |
83 | 254 | if($map_file != ""){ |
84 | 255 | $mapa = ms_newMapObj($map_file); |
85 | 256 | $c = $mapa->numlayers; |
... | ... | @@ -126,28 +297,18 @@ if(empty($_GET["xmlesquema"])){ |
126 | 297 | } |
127 | 298 | } |
128 | 299 | } |
300 | + return array( | |
301 | + "selecaoRegiao"=>$selecaoRegiao, | |
302 | + "codigo_tipo_regiao"=>$codigo_tipo_regiao | |
303 | + ); | |
129 | 304 | } |
130 | - if($codigo_tipo_regiao == ""){ | |
131 | - $regioes = $m->listaTipoRegiao(); | |
132 | - } | |
133 | - else{ | |
134 | - $regioes = array($m->listaTipoRegiao($codigo_tipo_regiao)); | |
135 | - } | |
136 | - //echo "<pre>";var_dump($regioes);exit; | |
137 | - $regiao = ""; | |
138 | - $item = ""; | |
139 | - $registros = ""; | |
140 | - //echo "<pre>";var_dump($regioes);exit; | |
141 | - | |
142 | - $xml = "<Schema name='i3Geo Metaestat'>"; | |
143 | - //cria as dimensoes de tipo temporal | |
144 | - if(empty($saikuConfigDataSource['tabelaDimensaoTempo'])){ | |
145 | - $saikuConfigDataSource['tabelaDimensaoTempo'] = "i3geo_metaestat.dim_tempo"; | |
146 | - } | |
305 | +} | |
306 | +function dimensoesTemporais(){ | |
307 | + global $saikuConfigDataSource; | |
147 | 308 | $sqlAno = "select nu_ano from ".$saikuConfigDataSource['tabelaDimensaoTempo']." group by nu_ano order by nu_ano"; |
148 | 309 | $sqlMes = "select nu_ano::text,nu_mes::text,ds_mes_abreviado as mes,COALESCE (nu_ano::text||'-'||nu_mes::text,nu_ano::text) as nu_anomes from ".$saikuConfigDataSource['tabelaDimensaoTempo']." group by nu_ano,nu_mes,mes,nu_anomes order by nu_ano,nu_mes"; |
149 | 310 | //dimensoes temporais |
150 | - $xml .= " | |
311 | + $xml = " | |
151 | 312 | <Dimension name='Anual' type='TimeDimension' caption='Tempo: Anual'> |
152 | 313 | <Hierarchy hasAll='true' primaryKey='nu_ano'> |
153 | 314 | <view alias='tempo_ano' ><SQL dialect='generic' >$sqlAno</SQL></view> |
... | ... | @@ -169,113 +330,171 @@ if(empty($_GET["xmlesquema"])){ |
169 | 330 | </Hierarchy> |
170 | 331 | </Dimension> |
171 | 332 | "; |
172 | - //global | |
173 | - $medidas = $m->listaMedidaVariavel(); | |
174 | - | |
175 | - //echo "<pre>";var_dump($regioesTabela);exit; | |
176 | - //dimensoes geograficas | |
177 | - //as dimensoes sao duplicadas | |
178 | - //uma delas contem o geocodigo que permite a geracao do mapa | |
179 | - | |
180 | - //guarda as regioes filhas de uma determinada regiao (chave) | |
181 | - $filhosDaRegiao = array(); | |
182 | - $VirtualCubeDimensionDaRegiao = array(); | |
183 | - $VirtualCubeMeasureDaRegiao = array(); | |
333 | + return $xml; | |
334 | +} | |
335 | +function sqlDasRegioes($regiao,$caminho,$chavesRegiao){ | |
336 | + $select = "SELECT tabela{$regiao["codigo_tipo_regiao"]}.{$regiao["identificador"]}::text as codigo, __COLUNAS__ FROM {$regiao['esquemadb']}.{$regiao['tabela']} as tabela{$regiao["codigo_tipo_regiao"]} \n"; | |
337 | + $selectPrincipal = ""; | |
338 | + $juncoes = ""; | |
339 | + $colunas = array(); | |
340 | + $nomesColunas = array(); | |
341 | + $codRegioes = array(); | |
342 | + $ncaminhos = count($caminho); | |
343 | + if($ncaminhos > 0){ | |
344 | + foreach($caminho as $c){ | |
345 | + $regiaoAnterior = $chavesRegiao[$c["a"]]; | |
346 | + $tabelaAnterior = "tabela".$regiaoAnterior["codigo_tipo_regiao"]; | |
347 | + $colunaLigacaoAnterior = $c["ligacao"]; | |
348 | + | |
349 | + $colunas[] = $tabelaAnterior.".".$regiaoAnterior["identificador"]. "::text AS codigo".$regiaoAnterior["codigo_tipo_regiao"]; | |
350 | + $colunas[] = $tabelaAnterior.".".$regiaoAnterior["colunanomeregiao"]. "::text AS nome".$regiaoAnterior["codigo_tipo_regiao"]; | |
351 | + | |
352 | + $regiaoJoin = $chavesRegiao[$c["join"]]; | |
353 | + $tabelaAtual = "tabela".$regiaoJoin["codigo_tipo_regiao"]; | |
354 | + $colunaLigacaoAtual = $regiaoJoin["identificador"]; | |
355 | + | |
356 | + $colunas[] = $tabelaAtual.".".$regiaoJoin["identificador"]. "::text AS codigo".$regiaoJoin["codigo_tipo_regiao"]; | |
357 | + $colunas[] = $tabelaAtual.".".$regiaoJoin["colunanomeregiao"]. "::text AS nome".$regiaoJoin["codigo_tipo_regiao"]; | |
358 | + | |
359 | + $nomesColunas[] = " codigo".$regiaoJoin["codigo_tipo_regiao"]; | |
360 | + $nomesColunas[] = " nome".$regiaoJoin["codigo_tipo_regiao"]; | |
361 | + | |
362 | + $juncoes .= " JOIN {$regiaoJoin['esquemadb']}.{$regiaoJoin['tabela']} as $tabelaAtual ON | |
363 | + $tabelaAtual.$colunaLigacaoAtual::text = $tabelaAnterior.$colunaLigacaoAnterior::text | |
364 | + "; | |
365 | + $codRegioes[] = $regiaoJoin["codigo_tipo_regiao"]; | |
366 | + } | |
367 | + $colunas = array_unique($colunas); | |
368 | + } | |
369 | + else{ | |
370 | + $colunas[] = $regiao["identificador"]. "::text AS codigo".$regiao["codigo_tipo_regiao"]; | |
371 | + $colunas[] = $regiao["colunanomeregiao"]. "::text AS nome".$regiao["codigo_tipo_regiao"]; | |
372 | + | |
373 | + $nomesColunas[] = " codigo".$regiao["codigo_tipo_regiao"]; | |
374 | + $nomesColunas[] = " nome".$regiao["codigo_tipo_regiao"]; | |
375 | + | |
376 | + $codRegioes[] = $regiao["codigo_tipo_regiao"]; | |
377 | + } | |
378 | + $mascara = $select; | |
379 | + $select = str_replace("__COLUNAS__",implode(",",$colunas),$select); | |
380 | + $selectPricipal = $select; | |
381 | + $select .= $juncoes; | |
382 | + return array("codRegioes"=>$codRegioes,"juncoes"=>$juncoes,"mascara"=>$mascara,"principal"=>$selectPricipal,"select"=>$select,"colunas"=>$colunas,"nomesColunas"=>$nomesColunas); | |
383 | +} | |
384 | + | |
385 | +function dimensoesGeo(){ | |
386 | + global $chavesRegiao, $m, $selecaoRegiao, $regioes, $filhosDaRegiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao; | |
387 | + //essas variaveis sao globais e usadas em outras funcoes | |
184 | 388 | foreach($regioes as $regiao){ |
185 | 389 | $filhosDaRegiao[$regiao["codigo_tipo_regiao"]] = array(); |
186 | 390 | $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]] = array(); |
187 | 391 | $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]] = array(); |
188 | 392 | } |
393 | + //xml normal | |
189 | 394 | $xml1 = ""; |
395 | + //xml geocodigo | |
190 | 396 | $xml2 = ""; |
191 | - | |
192 | - foreach($regioes as $regiao){ | |
397 | + // | |
398 | + //sera que e todas mesmo ou so a escolhida????? | |
399 | + // | |
400 | + $todasRegioes = $m->listaTipoRegiao(); | |
401 | + $xmlRegioes = array(); | |
402 | + foreach($todasRegioes as $regiao){ | |
193 | 403 | $sqls = array(); |
194 | - $xml1 .= " | |
195 | - <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='Onde:".converte($regiao["nome_tipo_regiao"])."'> | |
196 | - <Hierarchy hasAll='true' primaryKey='codigo'> | |
404 | + $temp = converte($regiao["nome_tipo_regiao"]); | |
405 | + $xml1 = " | |
406 | + <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='Onde:".$temp."'> | |
407 | + <Hierarchy hasAll='true' primaryKey='codigo{$regiao["codigo_tipo_regiao"]}'> | |
197 | 408 | "; |
198 | - $xml2 .= " | |
199 | - <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_geocod' caption='GeoCod:".converte($regiao["nome_tipo_regiao"])."'> | |
200 | - <Hierarchy hasAll='true' primaryKey='codigo'> | |
409 | + $xml2 = " | |
410 | + <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_geocod' caption='GeoCod:".$temp."'> | |
411 | + <Hierarchy hasAll='true' primaryKey='codigo{$regiao["codigo_tipo_regiao"]}'> | |
201 | 412 | "; |
413 | + // | |
202 | 414 | //cria uma view juntando as tabelas da hierarquia de regioes |
203 | - $caminho = $m->hierarquiaPath($regiao["codigo_tipo_regiao"]); | |
204 | - //$caminho[] = $regiao["codigo_tipo_regiao"]; | |
205 | - | |
206 | - $n = count($caminho); | |
207 | - $regiaoAtual = $regiao; | |
208 | - $niveis1 = array(); | |
209 | - $niveis2 = array(); | |
210 | - $unico = "true"; | |
211 | - for($j=0;$j<=$n;$j++){ | |
212 | - $colunas = array(); | |
213 | - $sql = "SELECT __COLUNAS__ FROM {$regiaoAtual['esquemadb']}.{$regiaoAtual['tabela']} as a$j "; | |
214 | - $colunas[] = "a$j.{$regiaoAtual['identificador']}::text as codigo "; | |
215 | - //inclui campos vazios na sequencia de campos | |
216 | - for($k=0;$k<$j;$k++){ | |
217 | - $colunas[] = "''"; | |
218 | - $colunas[] = "''"; | |
415 | + // | |
416 | + $hs = $m->listaHierarquia(); | |
417 | + //$regiao["codigo_tipo_regiao"] = 2; | |
418 | + foreach($hs as $h){ | |
419 | + if($h["codigo_tipo_regiao"] == $regiao["codigo_tipo_regiao"]){ | |
420 | + $caminho = caminhoRegiao($hs,$chavesRegiao,$h,$regiao["codigo_tipo_regiao"]); | |
219 | 421 | } |
422 | + } | |
423 | + // | |
424 | + //sql da tabela principal da regiao | |
425 | + // | |
426 | + $dadosSelect = sqlDasRegioes($regiao,$caminho,$chavesRegiao); | |
427 | + // | |
428 | + //pega os dados das demais tabelas associadas, menos da primeira | |
429 | + //para unir os dados | |
430 | + // | |
431 | + $niveisXml1 = array(); | |
432 | + $niveisXml2 = array(); | |
433 | + | |
434 | + $temp = converte($regiao["nome_tipo_regiao"]); | |
435 | + $niveisXml1[] = " | |
436 | + <Level name='".$temp."' column='codigo{$regiao["codigo_tipo_regiao"]}' nameColumn='nome".$regiao["codigo_tipo_regiao"]."' | |
437 | + uniqueMembers='true' /> | |
438 | + "; | |
439 | + $niveisXml2[] = " | |
440 | + <Level name='".$temp." - GeoCod #".$regiao["codigo_tipo_regiao"]."' column='codigo{$regiao["codigo_tipo_regiao"]}' nameColumn='nome".$regiao["codigo_tipo_regiao"]."' | |
441 | + uniqueMembers='true' /> | |
442 | + "; | |
443 | + //juncoes | |
444 | + while($caminho){ | |
445 | + $a = array_shift($caminho); | |
446 | + $u = sqlDasRegioes($chavesRegiao[$a["join"]],array(),$chavesRegiao); | |
447 | + //substitui as colunas para obter dados vazios | |
448 | + $colunasVazias = array(); | |
449 | + foreach($dadosSelect["nomesColunas"] as $nomesPrincipais){ | |
450 | + $colunasVazias[$nomesPrincipais] = "'' AS $nomesPrincipais"; | |
451 | + } | |
452 | + $n = count($u["colunas"]); | |
453 | + for($q = 0; $q < $n; $q++){ | |
454 | + $colunasVazias[$u["nomesColunas"][$q]] = $u["colunas"][$q]; | |
455 | + } | |
456 | + // | |
457 | + //inclui as colunas da primeira tabela | |
458 | + // | |
459 | + $colunasPrimeiraTabela = "'' as codigo".$regiao["codigo_tipo_regiao"].","."'' as nome".$regiao["codigo_tipo_regiao"].","; | |
220 | 460 | |
221 | - $colunas[] = "a$j.{$regiaoAtual['identificador']}::text AS {$regiaoAtual['identificador']} "; | |
222 | - $colunas[] = "a$j.{$regiaoAtual['colunanomeregiao']}::text AS {$regiaoAtual['colunanomeregiao']} "; | |
461 | + $mascara = str_replace("__COLUNAS__",$colunasPrimeiraTabela."__COLUNAS__",$u["mascara"]); | |
223 | 462 | |
224 | - for($i=$j;$i<$n;$i++){ | |
225 | - $r = $m->listaTipoRegiao($caminho[$i]); | |
463 | + $u["select"] = str_replace("__COLUNAS__",implode(",",$colunasVazias),$mascara); | |
226 | 464 | |
227 | - if(count($colunas) > ($j + 4)){ | |
228 | - $colunas[] = "''::text AS {$r['identificador']} "; | |
229 | - $colunas[] = "''::text AS {$r['colunanomeregiao']} "; | |
230 | - } | |
231 | - else{ | |
232 | - $colunas[] = "b$i.{$r['identificador']}::text AS {$r['identificador']} "; | |
233 | - $colunas[] = "b$i.{$r['colunanomeregiao']}::text AS {$r['colunanomeregiao']} "; | |
234 | - } | |
235 | - //descobre a coluna de ligacao da regiao | |
236 | - $agr = $m->listaAgregaRegiaoFilho($regiaoAtual['codigo_tipo_regiao'],$r['codigo_tipo_regiao']); | |
465 | + $temp = converte($chavesRegiao[$a["join"]]["nome_tipo_regiao"]); | |
237 | 466 | |
238 | - $sql .= " JOIN {$r['esquemadb']}.{$r['tabela']} as b$i ON | |
239 | - a$j.{$agr['colunaligacao_regiaopai']}::text = b$i.{$r['identificador']}::text | |
240 | - "; | |
241 | - } | |
242 | - | |
243 | - $colunas = implode($colunas,","); | |
244 | - $sql = str_replace("__COLUNAS__",$colunas,$sql); | |
245 | - //inclui a selecao se houver | |
246 | - if(!empty($selecaoRegiao[$regiaoAtual["codigo_tipo_regiao"]])){ | |
247 | - $rs = $selecaoRegiao[$regiaoAtual["codigo_tipo_regiao"]]; | |
248 | - } | |
249 | - $pos = strpos($sql, "regiao.".$rs["item"]." "); | |
250 | - if($rs != "" || !$pos === false){ | |
251 | - $sql .= " WHERE regiao.".$rs["sql"]; | |
252 | - } | |
253 | - $sqls[] = $sql; | |
254 | - | |
255 | - $niveis1[] = " | |
256 | - <Level name='".converte($regiaoAtual["nome_tipo_regiao"])."' column='".$regiaoAtual["colunanomeregiao"]."' nameColumn='".$regiaoAtual["colunanomeregiao"]."' | |
257 | - uniqueMembers='".$unico."' /> | |
467 | + $niveisXml1[] = " | |
468 | + <Level name='".$temp."' column='codigo{$a["join"]}' nameColumn='nome".$a["join"]."' | |
469 | + uniqueMembers='false' /> | |
258 | 470 | "; |
259 | - $niveis2[] = " | |
260 | - <Level name='".$regiaoAtual["nome_tipo_regiao"]." - GeoCod #".$regiaoAtual["codigo_tipo_regiao"]."' column='".$regiaoAtual["identificador"]."' nameColumn='".$regiaoAtual["colunanomeregiao"]."' | |
261 | - uniqueMembers='".$unico."' /> | |
471 | + $niveisXml2[] = " | |
472 | + <Level name='".$temp." - GeoCod #".$a["join"]."' column='codigo{$a["join"]}' nameColumn='nome".$a["join"]."' | |
473 | + uniqueMembers='false' /> | |
262 | 474 | "; |
263 | 475 | $unico = "false"; |
264 | - | |
265 | - $regiaoAtual = $m->listaTipoRegiao($caminho[$j]); | |
266 | 476 | } |
267 | - //echo "<pre>";echo implode("UNION\n\n",$sqls);exit; | |
268 | 477 | |
478 | + //inclui a selecao se houver | |
479 | + $sqlreg = ""; | |
480 | + if(!empty($selecaoRegiao[$regiao["codigo_tipo_regiao"]])){ | |
481 | + $rs = $selecaoRegiao[$regiao["codigo_tipo_regiao"]]; | |
482 | + $sqlreg = " WHERE regiao.".$rs["sql"]; | |
483 | + } | |
269 | 484 | $xml1 .= " |
270 | - <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' ><SQL dialect='generic' >".implode(" UNION ",$sqls)."</SQL></view> | |
485 | + <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' > | |
486 | + <SQL dialect='generic' >".$dadosSelect["select"]."</SQL> | |
487 | + </view> | |
271 | 488 | "; |
272 | 489 | $xml2 .= " |
273 | - <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_GeoCod' ><SQL dialect='generic' >".implode(" UNION ",$sqls)."</SQL></view> | |
490 | + <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_GeoCod' > | |
491 | + <SQL dialect='generic' >".$dadosSelect["select"]."</SQL> | |
492 | + </view> | |
274 | 493 | "; |
275 | - $niveis1 = array_reverse($niveis1); | |
276 | - $niveis2 = array_reverse($niveis2); | |
277 | - $xml1 .= implode(" ",$niveis1); | |
278 | - $xml2 .= implode(" ",$niveis2); | |
494 | + $niveisXml1 = array_reverse($niveisXml1); | |
495 | + $niveisXml2 = array_reverse($niveisXml2); | |
496 | + $xml1 .= implode(" ",$niveisXml1); | |
497 | + $xml2 .= implode(" ",$niveisXml2); | |
279 | 498 | $xml1 .= " |
280 | 499 | </Hierarchy> |
281 | 500 | </Dimension> |
... | ... | @@ -284,11 +503,19 @@ if(empty($_GET["xmlesquema"])){ |
284 | 503 | </Hierarchy> |
285 | 504 | </Dimension> |
286 | 505 | "; |
506 | + $xmlRegioes[$regiao["codigo_tipo_regiao"]] = array( | |
507 | + "xml" => $xml1.$xml2, | |
508 | + "juncoes" => $dadosSelect["juncoes"], | |
509 | + "codigo_tipo_regiao"=> $regiao["codigo_tipo_regiao"], | |
510 | + "colunas" => $dadosSelect["colunas"], | |
511 | + "nomesColunas"=> $dadosSelect["nomesColunas"], | |
512 | + "codRegioes"=>$dadosSelect["codRegioes"] | |
513 | + ); | |
287 | 514 | } |
288 | - //echo header("Content-type: application/xml"); | |
289 | - //echo $xml.$xml1.$xml2;exit; | |
290 | - //echo "<pre>";var_dump($filhosDaRegiao);exit; | |
291 | - //outras dimensoes definidas nos parametros e que nao sejam do tipo tempo | |
515 | + return $xmlRegioes; | |
516 | +} | |
517 | +function dimensoesOutras(){ | |
518 | + global $m; | |
292 | 519 | $parametros = $m->listaTodosParametros(); |
293 | 520 | $dimOutras = array(); |
294 | 521 | foreach($parametros as $p){ |
... | ... | @@ -305,7 +532,7 @@ if(empty($_GET["xmlesquema"])){ |
305 | 532 | } |
306 | 533 | $xml3 = ""; |
307 | 534 | foreach($dimOutras as $d){ |
308 | - $k = $p["esquemadb"]."_".$d["tabela"]."_".$d["coluna"]; | |
535 | + $k = $d["esquemadb"]."_".$d["tabela"]."_".$d["coluna"]; | |
309 | 536 | $xml3 .= " |
310 | 537 | <Dimension name='".$k."' caption='".converte($d["nome"])."'> |
311 | 538 | <Hierarchy hasAll='true' primaryKey='codigo'> |
... | ... | @@ -322,16 +549,17 @@ if(empty($_GET["xmlesquema"])){ |
322 | 549 | $xml3 .= "</Hierarchy> |
323 | 550 | </Dimension>"; |
324 | 551 | } |
325 | - $xml .= $xml1.$xml2.$xml3; | |
326 | - //junta as medidas conforme o nome da tabela utilizada | |
552 | + return $xml3; | |
553 | +} | |
554 | +function dimensoesTabelas(){ | |
555 | + global $dimRegioes, $filhosDaRegiao, $m, $VirtualCubeDimension, $VirtualCubeMeasure, $chavesRegiao, $medidas, $codigo_tipo_regiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao; | |
327 | 556 | |
328 | - //var_dump($medidas);exit; | |
557 | + $xml = ""; | |
329 | 558 | $tbs = array(); |
330 | - //echo $codigo_tipo_regiao;exit; | |
331 | 559 | foreach($medidas as $medida){ |
332 | 560 | if($codigo_tipo_regiao == "" || $medida["codigo_tipo_regiao"] == $codigo_tipo_regiao){ |
333 | 561 | $k = $medida["esquemadb"].$medida["tabela"]; |
334 | - //echo "<pre>".$k; | |
562 | + | |
335 | 563 | if(empty($tbs[$k])){ |
336 | 564 | $tbs[$k] = array($medida); |
337 | 565 | } |
... | ... | @@ -341,13 +569,9 @@ if(empty($_GET["xmlesquema"])){ |
341 | 569 | } |
342 | 570 | } |
343 | 571 | //monta os cubos para cada esquema.tabela diferente |
344 | - $VirtualCubeDimension = array(); | |
345 | - $VirtualCubeMeasure = array(); | |
346 | - | |
347 | 572 | foreach($tbs as $tb){ |
348 | 573 | //cabecalho de cada cubo obtido da primeira medida |
349 | 574 | $c = $tb[0]; |
350 | - | |
351 | 575 | $VirtualCubeDimension[] = " |
352 | 576 | <VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' /> |
353 | 577 | "; |
... | ... | @@ -356,18 +580,17 @@ if(empty($_GET["xmlesquema"])){ |
356 | 580 | "; |
357 | 581 | |
358 | 582 | array_push( |
359 | - $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]], | |
360 | - "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />" | |
361 | - ); | |
583 | + $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]], | |
584 | + "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />" | |
585 | + ); | |
362 | 586 | array_push( |
363 | - $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]], | |
364 | - "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />" | |
365 | - ); | |
587 | + $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]], | |
588 | + "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />" | |
589 | + ); | |
366 | 590 | //verifica as dimensoes do tipo tempo |
367 | 591 | $dimEnsoes = array(); |
368 | - //echo "<pre>";var_dump($tb)."<br>"; | |
592 | + | |
369 | 593 | foreach($tb as $medida){ |
370 | - //echo "<pre>";var_dump($medida)."<br>"; | |
371 | 594 | $parametros = $m->listaParametro($medida["id_medida_variavel"],"","",false,false); |
372 | 595 | $parComposto = array(); //guarda a composicao da chave que liga com a dimensao |
373 | 596 | $colunaAdicionais = array(); |
... | ... | @@ -389,7 +612,7 @@ if(empty($_GET["xmlesquema"])){ |
389 | 612 | } |
390 | 613 | //outros parametros |
391 | 614 | $outrosParametros = array(); |
392 | - //echo "<pre>";var_dump($parametros); | |
615 | + | |
393 | 616 | foreach($parametros as $parametro){ |
394 | 617 | $k = $parametro["esquemadb"]."_".$parametro["tabela"]."_".$parametro["coluna"]; |
395 | 618 | if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){ |
... | ... | @@ -404,8 +627,7 @@ if(empty($_GET["xmlesquema"])){ |
404 | 627 | //$dimEnsoes[] = '<DimensionUsage foreignKey="coduf" name="codigo_tipo_regiao_2" source="codigo_tipo_regiao_2"/>'; |
405 | 628 | |
406 | 629 | $xml .= "<Cube cache='false' name='Tabela: {$c["esquemadb"]}{$c["tabela"]}'>"; |
407 | - $incluirChaves = array("*"); | |
408 | - | |
630 | + $incluirChaves = array("tabelamedida{$c["id_medida_variavel"]}.*"); | |
409 | 631 | if(count($parComposto) > 0){ |
410 | 632 | //$sql = "select *,".implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_ from {$c["esquemadb"]}.{$c["tabela"]}"; |
411 | 633 | $incluirChaves[] = implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_"; |
... | ... | @@ -416,18 +638,39 @@ if(empty($_GET["xmlesquema"])){ |
416 | 638 | } |
417 | 639 | } |
418 | 640 | |
419 | - $sql = "select ".implode(",",$incluirChaves).",{$c["colunaidgeo"]}::text as codigodim from {$c["esquemadb"]}.{$c["tabela"]}"; | |
420 | - //a tabela pode ter dimensoes em diferentes hierarquias | |
641 | + | |
642 | + $r = $chavesRegiao[$c["codigo_tipo_regiao"]]; | |
643 | + $sql = " | |
644 | + select ".implode(",",$incluirChaves).", tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text as codigoreg | |
645 | + "; | |
646 | + if(count($dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]) > 0){ | |
647 | + $sql .= ",".implode(",",$dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]); | |
648 | + } | |
649 | + | |
650 | + $sql .= " | |
651 | + from {$c["esquemadb"]}.{$c["tabela"]} as tabelamedida{$c["id_medida_variavel"]} | |
652 | + JOIN {$r["esquemadb"]}.{$r["tabela"]} as tabela{$r["codigo_tipo_regiao"]} | |
653 | + ON tabela{$r["codigo_tipo_regiao"]}.{$r["identificador"]}::text = tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text | |
654 | + "; | |
655 | + $sql .= $dimRegioes[$c["codigo_tipo_regiao"]]["juncoes"]; | |
656 | + | |
421 | 657 | $xml .= " |
422 | - <view alias='view_{$c["esquemadb"]}{$c["tabela"]}' ><SQL dialect='generic' >$sql</SQL></view> | |
423 | - <DimensionUsage foreignKey='codigodim' name='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."' source='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."'/> | |
424 | - <DimensionUsage foreignKey='codigodim' name='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."_geocod' source='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."_geocod'/> | |
658 | + <view alias='view_{$c["esquemadb"]}{$c["tabela"]}' ><SQL dialect='generic' >$sql</SQL></view> | |
425 | 659 | "; |
660 | + //dimensoes vinculadas | |
661 | + $temp = $dimRegioes[$c["codigo_tipo_regiao"]]["codRegioes"]; | |
662 | + $temp[] = $c["codigo_tipo_regiao"]; | |
663 | + foreach($temp as $cod){ | |
664 | + $xml .= " | |
665 | + <DimensionUsage foreignKey='codigo{$cod}' name='codigo_tipo_regiao_{$cod}' source='codigo_tipo_regiao_{$cod}'/> | |
666 | + <DimensionUsage foreignKey='codigo{$cod}' name='codigo_tipo_regiao_{$cod}_geocod' source='codigo_tipo_regiao_{$cod}_geocod'/> | |
667 | + "; | |
668 | + } | |
426 | 669 | //inclui as dimensoes filhas |
427 | 670 | foreach($filhosDaRegiao[$c["codigo_tipo_regiao"]] as $fr){ |
428 | 671 | $xml .= " |
429 | - <DimensionUsage foreignKey='codigodim' name='codigo_tipo_regiao_".$fr."' source='codigo_tipo_regiao_".$fr."'/> | |
430 | - <DimensionUsage foreignKey='codigodim' name='codigo_tipo_regiao_".$fr."_geocod' source='codigo_tipo_regiao_".$fr."_geocod'/> | |
672 | + <DimensionUsage foreignKey='codigoreg' name='codigo_tipo_regiao_".$fr."' source='codigo_tipo_regiao_".$fr."'/> | |
673 | + <DimensionUsage foreignKey='codigoreg' name='codigo_tipo_regiao_".$fr."_geocod' source='codigo_tipo_regiao_".$fr."_geocod'/> | |
431 | 674 | "; |
432 | 675 | } |
433 | 676 | |
... | ... | @@ -454,60 +697,36 @@ if(empty($_GET["xmlesquema"])){ |
454 | 697 | $xml .= " |
455 | 698 | </Cube> |
456 | 699 | "; |
457 | - | |
458 | 700 | } |
459 | - | |
460 | - $xml .= '<VirtualCube name="Todas as medidas" >'; | |
701 | + return $xml; | |
702 | +} | |
703 | +function cuboTodas(){ | |
704 | + global $VirtualCubeDimension, $VirtualCubeMeasure; | |
705 | + $xml = '<VirtualCube name="Todas as medidas" >'; | |
461 | 706 | $VirtualCubeDimension = array_unique($VirtualCubeDimension); |
462 | 707 | $VirtualCubeMeasure = array_unique($VirtualCubeMeasure); |
463 | 708 | $xml .= implode(" ",$VirtualCubeDimension); |
464 | 709 | $xml .= implode(" ",$VirtualCubeMeasure); |
465 | 710 | $xml .= '</VirtualCube>'; |
466 | - // | |
467 | - //cubos por regiao | |
468 | - // | |
469 | - //$filhosDaRegiao = array(); | |
470 | - //$VirtualCubeDimensionDaRegiao = array(); | |
471 | - //$VirtualCubeMeasureDaRegiao = array(); | |
472 | - | |
711 | + return $xml; | |
712 | +} | |
713 | +function cuboRegioes(){ | |
714 | + global $regioes, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao, $filhosDaRegiao; | |
715 | + $xml = ""; | |
473 | 716 | foreach($regioes as $regiao){ |
474 | 717 | //inclui os parametros para a regiao de acordo com os filhos que possui |
475 | 718 | $d = $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]]; |
476 | - $m = $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]]; | |
719 | + $mm = $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]]; | |
477 | 720 | foreach($filhosDaRegiao[$regiao["codigo_tipo_regiao"]] as $f){ |
478 | - //$d = array_merge($d,$VirtualCubeDimensionDaRegiao[$f]); | |
479 | - $m = array_merge($m,$VirtualCubeMeasureDaRegiao[$f]); | |
721 | + $mm = array_merge($mm,$VirtualCubeMeasureDaRegiao[$f]); | |
480 | 722 | } |
481 | - if(count(array_unique($m)) > 0){ | |
723 | + if(count(array_unique($mm)) > 0){ | |
482 | 724 | $xml .= '<VirtualCube name="Regi&atilde;o: '.converte($regiao["nome_tipo_regiao"]).'" >'; |
483 | 725 | $xml .= implode(" ",array_unique($d)); |
484 | - $xml .= implode(" ",array_unique($m)); | |
726 | + $xml .= implode(" ",array_unique($mm)); | |
485 | 727 | $xml .= '</VirtualCube>'; |
486 | 728 | } |
487 | 729 | } |
488 | - $xml .= "</Schema>"; | |
489 | - error_reporting(0); | |
490 | - ob_end_clean(); | |
491 | - | |
492 | - if($_GET["output"] == "xml"){ | |
493 | - echo header("Content-type: application/xml"); | |
494 | - echo $xml;exit; | |
495 | - } | |
496 | - gravaDados(array($xml),$arquivoXmlEsquema); | |
497 | -} | |
498 | -if($_GET["output"] == "xml"){ | |
499 | - echo header("Content-type: application/xml"); | |
500 | - header("Location:".$_GET["xmlesquema"]); | |
501 | -} | |
502 | -else{ | |
503 | - header("Location:".$saikuUrl."/?nomeConexao=".$nomeConexao."&locaplic=".$_GET["locaplic"]."&g_sid=".$_GET["g_sid"]."&mapext=".$_GET["mapext"]."&origem=".$_GET["origem"]); | |
504 | -} | |
505 | -function converte($texto){ | |
506 | - $texto = str_replace("&","&",htmlentities($texto)); | |
507 | - //$texto = htmlentities($texto); | |
508 | - //$texto = mb_convert_encoding($texto, 'ISO-8859-1', "auto"); | |
509 | - //$texto = utf8_encode($texto); | |
510 | - //$textox = mb_convert_encoding($texto, "UTF-8", mb_detect_encoding($texto, "UTF-8, ISO-8859-1, ISO-8859-15", true)); | |
511 | - return $texto; | |
730 | + return $xml; | |
512 | 731 | } |
513 | 732 | ?> | ... | ... |
ms_criamapa.php
... | ... | @@ -214,7 +214,7 @@ Cria os diretorios tempor&aacute;rios que ser&atilde;o utilizados pelo i3geo par |
214 | 214 | $diretorios = criaDirMapa($dir_tmp,$cachedir); |
215 | 215 | if(!$diretorios) |
216 | 216 | {echo "<p style=color:red ><b>Não foi possível criar os diretórios temporários em $dir_tmp.</b></p>";exit;} |
217 | -criaIndex(); | |
217 | +criaIndex($dir_tmp,$diretorios); | |
218 | 218 | $tmpfname = $diretorios[0]; |
219 | 219 | $protocolo = explode("/",$_SERVER['SERVER_PROTOCOL']); |
220 | 220 | /* |
... | ... | @@ -329,7 +329,6 @@ $_SESSION["contadorsalva"] = 0;//essa variavel e utilizada pela ferramenta telar |
329 | 329 | $_SESSION["i3georendermode"] = $i3georendermode_; |
330 | 330 | $_SESSION["saikuUrl"] = $saikuUrl_; |
331 | 331 | |
332 | - | |
333 | 332 | // |
334 | 333 | //pega todas as variáveis da sessão, mesmo as que foram definidas anteriormente |
335 | 334 | // |
... | ... | @@ -450,6 +449,7 @@ else{ |
450 | 449 | //algumas aplicacoes usam essa variavel (SAIKU) |
451 | 450 | $mapext = $ext->minx." ".$ext->miny." ".$ext->maxx." ".$ext->maxy; |
452 | 451 | } |
452 | + | |
453 | 453 | /* |
454 | 454 | Configura os endereços corretos no mapfile. |
455 | 455 | |
... | ... | @@ -490,20 +490,20 @@ if(isset($poligonos)) |
490 | 490 | if(isset($url_wms)) |
491 | 491 | {incluiTemaWms();} |
492 | 492 | |
493 | -adaptaLayers(); | |
493 | +adaptaLayers($tmpfname,$versao); | |
494 | 494 | |
495 | 495 | if (file_exists($locaplic."/pacotes/geoip") && file_exists($locaplic."/pacotes/geoip/GeoLiteCity.dat")) |
496 | 496 | {require_once(dirname(__FILE__)."/ms_registraip.php");} |
497 | 497 | //echo $tmpfname;exit; |
498 | 498 | if ($interface != "mashup") |
499 | 499 | {abreInterface($interface,$caminho,$tempo);} |
500 | + | |
500 | 501 | /* |
501 | 502 | Adapta os dados de cada layer. |
502 | 503 | |
503 | 504 | Faz alterações em cada layer caso sejam necessárias. |
504 | 505 | */ |
505 | -function adaptaLayers(){ | |
506 | - global $tmpfname,$versao; | |
506 | +function adaptaLayers($tmpfname,$versao){ | |
507 | 507 | $mapa = ms_newMapObj($tmpfname); |
508 | 508 | $path = $mapa->shapepath; |
509 | 509 | $numlayers = $mapa->numlayers; |
... | ... | @@ -749,11 +749,10 @@ function incluiTemasIniciais(){ |
749 | 749 | erroCriacao(); |
750 | 750 | } |
751 | 751 | /* |
752 | -Cria os arquivos vazios index.htm e index.html nos diret�rios temporários | |
752 | +Cria os arquivos vazios index.htm e index.html nos diretorios temporários | |
753 | 753 | */ |
754 | -function criaIndex() | |
754 | +function criaIndex($dir_tmp,$diretorios) | |
755 | 755 | { |
756 | - global $dir_tmp,$diretorios; | |
757 | 756 | if (!file_exists($dir_tmp."/index.htm")) |
758 | 757 | { |
759 | 758 | $f = fopen($dir_tmp."/index.htm","x"); |
... | ... | @@ -771,7 +770,7 @@ function criaIndex() |
771 | 770 | } |
772 | 771 | if (!file_exists($dir_tmp."/index.htm")) |
773 | 772 | { |
774 | - echo "Erro. Não foi possível gravar no diret�rio temporário"; | |
773 | + echo "Erro. Não foi possível gravar no diretório temporário"; | |
775 | 774 | exit; |
776 | 775 | } |
777 | 776 | } | ... | ... |