Commit a121d47c30e521b41ce8cabc13c75bbb18fc446a

Authored by Edmar Moretti
1 parent 32a8cf6d

Correção na formação do título de uma camada advinda do sistema de metadados

Showing 58 changed files with 2093 additions and 2078 deletions   Show diff stats
classesphp/classe_metaestatinfo.php
... ... @@ -3,2095 +3,2095 @@
3 3 * Classe metaestatInfo
4 4 * O construtor da classe faz o include do programa conexao.php que por sua vez faz o include
5 5 * de i3geo/ms_configura.php. Com base nesses programas sao definidas algumas das variaveis globais
6   -*/
  6 + */
7 7 class MetaestatInfo{
8   - /**
9   - * Nome do esquema no banco de dados utilizado para armazenar as tabelas
10   - * do sistema de admnistracao. Obtido de ms_configura.php
11   - */
12   - protected $esquemaadmin;
13   - /**
14   - * Objeto PDO obtido com new PDO com direito de leitura no banco de dados de administracao
15   - */
16   - public $dbh;
17   - /**
18   - * Indica se e necessario converter para UTF strings obtidas do banco de administracao
19   - */
20   - public $convUTF;
21   - /**
22   - * Pasta temporaria utilizada pelo mapserver
23   - */
24   - public $dir_tmp;
25   - /**
26   - * Pasta onde e feito o cache de imagens do i3Geo
27   - */
28   - public $nomecache;
29   - /**
30   - * Grava ou nao o log de transacoes
31   - */
32   - public $logTransacoes;
33   - /**
34   - * Construtor
35   - * Faz o include de conexao.php que por sua vez faz o include de i3geo/ms_configura.php
36   - */
37   - function __construct(){
38   - include(dirname(__FILE__)."/conexao.php");
39   - //vem do include
40   - $this->dir_tmp = $dir_tmp;
41   - $this->logTransacoes = $logTransacoes;
42   - $this->locaplic = $locaplic;
43   - $this->base = $base;
44   - if(!isset($convUTF)){
45   - $convUTF = true;
46   - }
47   - $this->convUTF = $convUTF;
48   - $this->dbh = $dbh;
49   - $this->esquemaadmin = "";
50   - if(!empty($esquemaadmin)){
51   - $this->esquemaadmin = str_replace(".","",$esquemaadmin).".";
52   - }
53   - $this->nomecache = $this->nomeCache();
54   - }
55   - function __destruct(){
56   - $this->fechaConexao();
57   - }
58   - /**
59   - * Cria um nome de arquivo concatenando $_request
60   - * @return string
61   - */
62   - function nomeCache(){
63   - return "AAAA".md5(implode("x",$_REQUEST));
64   - }
65   - /**
66   - * Cria um nome aleatorio
67   - * @param numero de caracteres
68   - * @return string
69   - */
70   - function nomeRandomico($n=10){
71   - $nomes = "";
72   - $a = 'azertyuiopqsdfghjklmwxcvbnABCDEFGHIJKLMNOPQRSTUVWXYZ';
73   - $max = 51;
74   - for($i=0; $i < $n; ++$i)
75   - {
76   - $nomes .= $a{mt_rand(0, $max)};
77   - }
78   - return $nomes;
79   - }
80   - /**
81   - * Fecha a conexao com o banco de dados de administracao
82   - */
83   - function fechaConexao(){
84   - $this->dbh = null;
85   - }
86   - /**
87   - * Aplica a conversao de caracteres em um array ou string conforme o padrao do banco de administracao
88   - * Verifica se o parametro e um array ou um texto e executa converteTexto()
89   - * @param string|array
90   - * @return string|array
91   - */
92   - function converteTextoArray($texto){
93   - try {
94   - if(empty($texto) || (!is_array($texto) && strtoupper($texto) == "NULL")){
95   - return "";
96   - }
97   - if(!is_array($texto)){
98   - return $this->converteTexto($texto);
99   - }
100   - $chaves = array_keys($texto);
101   - if($chaves[0] != "0"){
102   - foreach($chaves as $chave){
103   - $texto[$chave] = $this->converteTexto($texto[$chave]);
104   - }
105   - }
106   - else{
107   - $n = count($texto);
108   - for($i=0;$i<$n;$i++){
109   - $chaves = array_keys($texto[$i]);
110   - foreach($chaves as $chave){
111   - if(is_string($texto[$i][$chave])){
112   - $t = $this->converteTexto($texto[$i][$chave]);
113   - $texto[$i][$chave] = $t;
114   - }
115   - }
116   - }
117   - }
118   - return $texto;
119   - }
120   - catch (Exception $e) {
121   - return $texto;
122   - }
123   - }
124   - /**
125   - * Converte a codificacao de caracteres de uma string conforme o padrao do banco de admnistracao
126   - * @param string
127   - * @return string
128   - */
129   - function converteTexto($texto){
130   - if($texto == "0"){
131   - return "0";
132   - }
133   - if(empty($texto)){
134   - return "";
135   - }
136   - if($this->convUTF == true){
137   - $texto = mb_convert_encoding($texto,mb_detect_encoding($texto),"UTF-8");
138   - }
139   - else{
140   - $texto = mb_convert_encoding($texto,mb_detect_encoding($texto),"ISO-8859-1");
141   - }
142   - return $texto;
143   - }
144   - /**
145   - * Executa um SQL no banco de administracao
146   - * Utiliza fetchAll() para obter os dados
147   - * O resultado e processado por converteTextoArray se for desejado
148   - * @param string sql
149   - * @param se for vazio retorna todos os registros, caso contrario, retorna apenas o primeiro
150   - * @param indica se deve ser feita a conversao de caracteres
151   - * @return Array
152   - */
153   - function execSQL($sql,$id="",$convTexto=true){
154   - $sql = str_ireplace(array("update","delete","insert","--","drop",";"),"",$sql);
155   - try {
156   - $q = $this->dbh->query($sql,PDO::FETCH_ASSOC);
157   - }
158   - catch (PDOException $e) {
159   - return "Error!: ";
160   - }
161   - if($q){
162   - $r = $q->fetchAll();
163   - if($convTexto == false){
164   - return $r;
165   - }
166   - if($r){
167   - if($id != ""){
168   - if(count($r) == 1){
169   - $r = $r[0];
170   - }
171   - else{
172   - $r = array();
173   - }
174   - }
175   - if($r != false && count($r) > 0){
176   - $r = $this->converteTextoArray($r);
177   - }
178   - return $r;
179   - }
180   - else{
181   - return array();
182   - }
183   - }
184   - else{
185   - return false;
186   - }
187   - }
188   - /**
189   - * Executa um SQL no banco de dados definido em uma conexao cadastrada no sistema de admnistracao
190   - * @param codigo da conexao
191   - * @param tring sql
192   - * @return string
193   - */
194   - function execSQLDB($codigo_estat_conexao,$sql){
195   - $buscar = array("drop","update","insert","delete");
196   - $sql = str_ireplace($buscar,"",$sql);
197   - $c = $this->listaConexao($codigo_estat_conexao,true);
198   - $dbhold = $this->dbh;
199   - $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
200   - $this->dbh = $dbh;
201   - $res = $this->execSQL($sql,"",false);
202   - $this->dbh = $dbhold;
203   - return $res;
204   - }
205   - /**
206   - * Monta o sql que permite acessar os dados de uma media de uma variavel
207   - * @param id da medida da variavel
208   - * @param inclui todas as colunas da tabela com os dados ou nao
209   - * @param coluna que sera usada para agrupar os dados
210   - * @param tipo de layer. Usado para escolher qual coluna com as geometrias sera incluida no sql
211   - * @param codigo do tipo de regiao. Se nao for definido, utiliza-se o default da variavel
212   - * @param le os dados diretamente da tabela sem nenhum tipo de agrupamento, seja por data ou outro parametro
213   - * @return array("sqlagrupamento"=>,"sql"=>,"sqlmapserver"=>,"filtro"=>,"colunas"=>,"alias"=>,"colunavalor"=>,"titulo"=>,"nomeregiao"=>)
214   - */
215   - function sqlMedidaVariavel($id_medida_variavel,$todasascolunas,$agruparpor="",$tipolayer="polygon",$codigo_tipo_regiao = "",$suportaWMST = false,$filtro = "",$direto=false){
216   - //
217   - //o sql que faz acesso aos dados e marcado com /*SE*//*SE*/ na string que sera usada nos mapfiles
218   - //a parte que contem referencias a coluna com a geometria e marcada com /*SG*//*SG*/
219   - //
220   - //registros da medida da variavel
221   - $dados = $this->listaMedidaVariavel("",$id_medida_variavel);
222   - if(!empty($dados["filtro"])){
223   - if($filtro == ""){
224   - $filtro = $dados["filtro"];
225   - }
226   - else{
227   - $filtro = $filtro." AND (".$dados["filtro"].")";
228   - }
229   - }
  8 + /**
  9 + * Nome do esquema no banco de dados utilizado para armazenar as tabelas
  10 + * do sistema de admnistracao. Obtido de ms_configura.php
  11 + */
  12 + protected $esquemaadmin;
  13 + /**
  14 + * Objeto PDO obtido com new PDO com direito de leitura no banco de dados de administracao
  15 + */
  16 + public $dbh;
  17 + /**
  18 + * Indica se e necessario converter para UTF strings obtidas do banco de administracao
  19 + */
  20 + public $convUTF;
  21 + /**
  22 + * Pasta temporaria utilizada pelo mapserver
  23 + */
  24 + public $dir_tmp;
  25 + /**
  26 + * Pasta onde e feito o cache de imagens do i3Geo
  27 + */
  28 + public $nomecache;
  29 + /**
  30 + * Grava ou nao o log de transacoes
  31 + */
  32 + public $logTransacoes;
  33 + /**
  34 + * Construtor
  35 + * Faz o include de conexao.php que por sua vez faz o include de i3geo/ms_configura.php
  36 + */
  37 + function __construct(){
  38 + include(dirname(__FILE__)."/conexao.php");
  39 + //vem do include
  40 + $this->dir_tmp = $dir_tmp;
  41 + $this->logTransacoes = $logTransacoes;
  42 + $this->locaplic = $locaplic;
  43 + $this->base = $base;
  44 + if(!isset($convUTF)){
  45 + $convUTF = true;
  46 + }
  47 + $this->convUTF = $convUTF;
  48 + $this->dbh = $dbh;
  49 + $this->esquemaadmin = "";
  50 + if(!empty($esquemaadmin)){
  51 + $this->esquemaadmin = str_replace(".","",$esquemaadmin).".";
  52 + }
  53 + $this->nomecache = $this->nomeCache();
  54 + }
  55 + function __destruct(){
  56 + $this->fechaConexao();
  57 + }
  58 + /**
  59 + * Cria um nome de arquivo concatenando $_request
  60 + * @return string
  61 + */
  62 + function nomeCache(){
  63 + return "AAAA".md5(implode("x",$_REQUEST));
  64 + }
  65 + /**
  66 + * Cria um nome aleatorio
  67 + * @param numero de caracteres
  68 + * @return string
  69 + */
  70 + function nomeRandomico($n=10){
  71 + $nomes = "";
  72 + $a = 'azertyuiopqsdfghjklmwxcvbnABCDEFGHIJKLMNOPQRSTUVWXYZ';
  73 + $max = 51;
  74 + for($i=0; $i < $n; ++$i)
  75 + {
  76 + $nomes .= $a{mt_rand(0, $max)};
  77 + }
  78 + return $nomes;
  79 + }
  80 + /**
  81 + * Fecha a conexao com o banco de dados de administracao
  82 + */
  83 + function fechaConexao(){
  84 + $this->dbh = null;
  85 + }
  86 + /**
  87 + * Aplica a conversao de caracteres em um array ou string conforme o padrao do banco de administracao
  88 + * Verifica se o parametro e um array ou um texto e executa converteTexto()
  89 + * @param string|array
  90 + * @return string|array
  91 + */
  92 + function converteTextoArray($texto){
  93 + try {
  94 + if(empty($texto) || (!is_array($texto) && strtoupper($texto) == "NULL")){
  95 + return "";
  96 + }
  97 + if(!is_array($texto)){
  98 + return $this->converteTexto($texto);
  99 + }
  100 + $chaves = array_keys($texto);
  101 + if($chaves[0] != "0"){
  102 + foreach($chaves as $chave){
  103 + $texto[$chave] = $this->converteTexto($texto[$chave]);
  104 + }
  105 + }
  106 + else{
  107 + $n = count($texto);
  108 + for($i=0;$i<$n;$i++){
  109 + $chaves = array_keys($texto[$i]);
  110 + foreach($chaves as $chave){
  111 + if(is_string($texto[$i][$chave])){
  112 + $t = $this->converteTexto($texto[$i][$chave]);
  113 + $texto[$i][$chave] = $t;
  114 + }
  115 + }
  116 + }
  117 + }
  118 + return $texto;
  119 + }
  120 + catch (Exception $e) {
  121 + return $texto;
  122 + }
  123 + }
  124 + /**
  125 + * Converte a codificacao de caracteres de uma string conforme o padrao do banco de admnistracao
  126 + * @param string
  127 + * @return string
  128 + */
  129 + function converteTexto($texto){
  130 + if($texto == "0"){
  131 + return "0";
  132 + }
  133 + if(empty($texto)){
  134 + return "";
  135 + }
  136 + if($this->convUTF == true){
  137 + $texto = mb_convert_encoding($texto,mb_detect_encoding($texto),"UTF-8");
  138 + }
  139 + else{
  140 + $texto = mb_convert_encoding($texto,mb_detect_encoding($texto),"ISO-8859-1");
  141 + }
  142 + return $texto;
  143 + }
  144 + /**
  145 + * Executa um SQL no banco de administracao
  146 + * Utiliza fetchAll() para obter os dados
  147 + * O resultado e processado por converteTextoArray se for desejado
  148 + * @param string sql
  149 + * @param se for vazio retorna todos os registros, caso contrario, retorna apenas o primeiro
  150 + * @param indica se deve ser feita a conversao de caracteres
  151 + * @return Array
  152 + */
  153 + function execSQL($sql,$id="",$convTexto=true){
  154 + $sql = str_ireplace(array("update","delete","insert","--","drop",";"),"",$sql);
  155 + try {
  156 + $q = $this->dbh->query($sql,PDO::FETCH_ASSOC);
  157 + }
  158 + catch (PDOException $e) {
  159 + return "Error!: ";
  160 + }
  161 + if($q){
  162 + $r = $q->fetchAll();
  163 + if($convTexto == false){
  164 + return $r;
  165 + }
  166 + if($r){
  167 + if($id != ""){
  168 + if(count($r) == 1){
  169 + $r = $r[0];
  170 + }
  171 + else{
  172 + $r = array();
  173 + }
  174 + }
  175 + if($r != false && count($r) > 0){
  176 + $r = $this->converteTextoArray($r);
  177 + }
  178 + return $r;
  179 + }
  180 + else{
  181 + return array();
  182 + }
  183 + }
  184 + else{
  185 + return false;
  186 + }
  187 + }
  188 + /**
  189 + * Executa um SQL no banco de dados definido em uma conexao cadastrada no sistema de admnistracao
  190 + * @param codigo da conexao
  191 + * @param tring sql
  192 + * @return string
  193 + */
  194 + function execSQLDB($codigo_estat_conexao,$sql){
  195 + $buscar = array("drop","update","insert","delete");
  196 + $sql = str_ireplace($buscar,"",$sql);
  197 + $c = $this->listaConexao($codigo_estat_conexao,true);
  198 + $dbhold = $this->dbh;
  199 + $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
  200 + $this->dbh = $dbh;
  201 + $res = $this->execSQL($sql,"",false);
  202 + $this->dbh = $dbhold;
  203 + return $res;
  204 + }
  205 + /**
  206 + * Monta o sql que permite acessar os dados de uma media de uma variavel
  207 + * @param id da medida da variavel
  208 + * @param inclui todas as colunas da tabela com os dados ou nao
  209 + * @param coluna que sera usada para agrupar os dados
  210 + * @param tipo de layer. Usado para escolher qual coluna com as geometrias sera incluida no sql
  211 + * @param codigo do tipo de regiao. Se nao for definido, utiliza-se o default da variavel
  212 + * @param le os dados diretamente da tabela sem nenhum tipo de agrupamento, seja por data ou outro parametro
  213 + * @return array("sqlagrupamento"=>,"sql"=>,"sqlmapserver"=>,"filtro"=>,"colunas"=>,"alias"=>,"colunavalor"=>,"titulo"=>,"nomeregiao"=>)
  214 + */
  215 + function sqlMedidaVariavel($id_medida_variavel,$todasascolunas,$agruparpor="",$tipolayer="polygon",$codigo_tipo_regiao = "",$suportaWMST = false,$filtro = "",$direto=false){
  216 + //
  217 + //o sql que faz acesso aos dados e marcado com /*SE*//*SE*/ na string que sera usada nos mapfiles
  218 + //a parte que contem referencias a coluna com a geometria e marcada com /*SG*//*SG*/
  219 + //
  220 + //registros da medida da variavel
  221 + $dados = $this->listaMedidaVariavel("",$id_medida_variavel);
  222 + if(!empty($dados["filtro"])){
  223 + if($filtro == ""){
  224 + $filtro = $dados["filtro"];
  225 + }
  226 + else{
  227 + $filtro = $filtro." AND (".$dados["filtro"].")";
  228 + }
  229 + }
230 230  
231   - //parametros da medida da variavel
232   - $parametrosMedida = array();
233   - $pp = $this->listaParametro($id_medida_variavel,"",0);
234   - foreach($pp as $p){
235   - $parametrosMedida[] = $p["coluna"];
236   - }
  231 + //parametros da medida da variavel
  232 + $parametrosMedida = array();
  233 + $pp = $this->listaParametro($id_medida_variavel,"",0);
  234 + foreach($pp as $p){
  235 + $parametrosMedida[] = $p["coluna"];
  236 + }
237 237  
238   - //titulo da medida de variavel
239   - $titulo = $dados["nomemedida"];
240   - //indica se os dados devem ser agregados a uma regiao de nivel superior
241   - $agregaregiao = false;
242   - //nome da coluna que contem os limites geograficos da regiao desejada pelo usuario
243   - $colunageo = "";
  238 + //titulo da medida de variavel
  239 + $titulo = $dados["nomemedida"];
  240 + //indica se os dados devem ser agregados a uma regiao de nivel superior
  241 + $agregaregiao = false;
  242 + //nome da coluna que contem os limites geograficos da regiao desejada pelo usuario
  243 + $colunageo = "";
244 244  
245   - //se a regiao definida para a medida da variavel for diferente da regiao indicada pelo usuario
246   - //significa que a regiao indicada pelo usuario e uma agragacao
247   - if($codigo_tipo_regiao != "" && $dados["codigo_tipo_regiao"] != $codigo_tipo_regiao){
248   - $agregaregiao = true;
249   - //guarda os dados da regiao que agrega a regiao original da medida variavel
250   - $dadosgeo = $this->listaTipoRegiao($codigo_tipo_regiao);
251   - }
252   - else{
253   - $dadosgeo = $this->listaTipoRegiao($dados["codigo_tipo_regiao"]);
254   - }
255   - if(empty($dadosgeo)){
256   - echo "Erro ao obter os dados do tipo de regiao";
257   - exit;
258   - }
259   - if($tipolayer != "point"){
260   - $colunageo = $dadosgeo["colunageo"];
261   - $titulo .= " (pol) ";
262   - }
263   - else{
264   - $colunageo = $dadosgeo["colunacentroide"];
265   - $titulo .= " (pt) ";
266   - }
267   - $titulo .= $dadosgeo["nome_tipo_regiao"];
  245 + //se a regiao definida para a medida da variavel for diferente da regiao indicada pelo usuario
  246 + //significa que a regiao indicada pelo usuario e uma agragacao
  247 + if($codigo_tipo_regiao != "" && $dados["codigo_tipo_regiao"] != $codigo_tipo_regiao){
  248 + $agregaregiao = true;
  249 + //guarda os dados da regiao que agrega a regiao original da medida variavel
  250 + $dadosgeo = $this->listaTipoRegiao($codigo_tipo_regiao);
  251 + }
  252 + else{
  253 + $dadosgeo = $this->listaTipoRegiao($dados["codigo_tipo_regiao"]);
  254 + }
  255 + if(empty($dadosgeo)){
  256 + echo "Erro ao obter os dados do tipo de regiao";
  257 + exit;
  258 + }
  259 + if($tipolayer != "point"){
  260 + $colunageo = $dadosgeo["colunageo"];
  261 + $titulo .= " (pol) ";
  262 + }
  263 + else{
  264 + $colunageo = $dadosgeo["colunacentroide"];
  265 + $titulo .= " (pt) ";
  266 + }
  267 + $titulo .= $dadosgeo["nome_tipo_regiao"];
268 268  
269   - $vis = $dadosgeo["colunasvisiveis"];
270   - if(!empty($vis) && $suportaWMST == false){
271   - $vis = $vis.",".$dadosgeo["identificador"];
272   - $vis = str_replace(" ",",",$vis);
273   - $vis = str_replace(",,",",",$vis);
274   - $vis = str_replace(";",",",$vis);
  269 + $vis = $dadosgeo["colunasvisiveis"];
  270 + if(!empty($vis) && $suportaWMST == false){
  271 + $vis = $vis.",".$dadosgeo["identificador"];
  272 + $vis = str_replace(" ",",",$vis);
  273 + $vis = str_replace(",,",",",$vis);
  274 + $vis = str_replace(";",",",$vis);
275 275  
276   - $colunasSemGeo = explode(",",$vis);
277   - $colunasSemGeo = array_unique($colunasSemGeo);
  276 + $colunasSemGeo = explode(",",$vis);
  277 + $colunasSemGeo = array_unique($colunasSemGeo);
278 278  
279   - if($dadosgeo["apelidos"] != ""){
280   - $alias = "Valor,".$dadosgeo["apelidos"].",".$dadosgeo["identificador"];
281   - $alias = mb_convert_encoding($alias,"ISO-8859-1",mb_detect_encoding($alias));
282   - $alias = str_replace(";",",",$alias);
283   - $alias = str_replace(",,",",",$alias);
284   - $alias = explode(",",$alias);
285   - $alias = array_unique($alias);
286   - }
287   - else{
288   - $alias = $colunasSemGeo;
289   - }
290   - if(count($alias)-1 != count($colunasSemGeo)){
291   - $alias = array();
292   - }
293   - }
294   - else{
295   - //colunas da tabela geometria sem as colunas GEOMETRY
296   - $colunasSemGeo = $this->colunasTabela($dadosgeo["codigo_estat_conexao"], $dadosgeo["esquemadb"], $dadosgeo["tabela"],"geometry","!=");
297   - $alias = array();
298   - if($suportaWMST == true){
299   - $sqlWMST = $this->listaParametroTempo2CampoData($id_medida_variavel);
300   - $colunasSemGeo[] = "dimtempo";
301   - }
302   - }
303   - //verifica o tipo de calculo para agragacao de valores
304   - $tipoconta = "";
305   - if($dados["permitesoma"] == 1 && $direto == false){
306   - $tipoconta = "sum";
307   - if($agregaregiao == true){
308   - $titulo .= " - soma";
309   - }
310   - }
311   - elseif($dados["permitemedia"] == 1 && $direto == false){
312   - $tipoconta = "avg";
313   - if($agregaregiao == true){
314   - $titulo .= " - media";
315   - }
316   - }
  279 + if($dadosgeo["apelidos"] != ""){
  280 + $alias = "Valor,".$dadosgeo["apelidos"].",".$dadosgeo["identificador"];
  281 + $alias = mb_convert_encoding($alias,"ISO-8859-1",mb_detect_encoding($alias));
  282 + $alias = str_replace(";",",",$alias);
  283 + $alias = str_replace(",,",",",$alias);
  284 + $alias = explode(",",$alias);
  285 + $alias = array_unique($alias);
  286 + }
  287 + else{
  288 + $alias = $colunasSemGeo;
  289 + }
  290 + if(count($alias)-1 != count($colunasSemGeo)){
  291 + $alias = array();
  292 + }
  293 + }
  294 + else{
  295 + //colunas da tabela geometria sem as colunas GEOMETRY
  296 + $colunasSemGeo = $this->colunasTabela($dadosgeo["codigo_estat_conexao"], $dadosgeo["esquemadb"], $dadosgeo["tabela"],"geometry","!=");
  297 + $alias = array();
  298 + if($suportaWMST == true){
  299 + $sqlWMST = $this->listaParametroTempo2CampoData($id_medida_variavel);
  300 + $colunasSemGeo[] = "dimtempo";
  301 + }
  302 + }
  303 + //verifica o tipo de calculo para agragacao de valores
  304 + $tipoconta = "";
  305 + if($dados["permitesoma"] == 1 && $direto == false){
  306 + $tipoconta = "sum";
  307 + if($agregaregiao == true){
  308 + $titulo .= " - soma";
  309 + }
  310 + }
  311 + elseif($dados["permitemedia"] == 1 && $direto == false){
  312 + $tipoconta = "avg";
  313 + if($agregaregiao == true){
  314 + $titulo .= " - media";
  315 + }
  316 + }
317 317  
318   - //obtem o SQL que faz o acesso aos dados da media da variavel
319   - if($dados["colunavalor"] == ""){
320   - $nomevalorcalculado = "'1'::numeric";
321   - }
322   - else{
323   - $nomevalorcalculado = $dados["colunavalor"];
324   - }
  318 + //obtem o SQL que faz o acesso aos dados da media da variavel
  319 + if($dados["colunavalor"] == ""){
  320 + $nomevalorcalculado = "'1'::numeric";
  321 + }
  322 + else{
  323 + $nomevalorcalculado = $dados["colunavalor"];
  324 + }
325 325  
326   - $sqlDadosMedidaVariavel = "SELECT ".$dados["colunaidgeo"]." AS cod_regiao,$tipoconta(".$nomevalorcalculado.") AS valorcalculado FROM ".$dados["esquemadb"].".".$dados["tabela"];
327   - if($suportaWMST == true && $direto == false){
328   - $sqlDadosMedidaVariavel = "SELECT $sqlWMST as dimtempo,".$dados["colunaidgeo"]." AS cod_regiao,".$nomevalorcalculado." AS valorcalculado FROM ".$dados["esquemadb"].".".$dados["tabela"];
329   - }
330   - if(!empty ($filtro)){
331   - $sqlDadosMedidaVariavel .= " WHERE ".$filtro . " AND ".$nomevalorcalculado." IS NOT NULL ";
332   - }
333   - else{
334   - $sqlDadosMedidaVariavel .= " WHERE ".$nomevalorcalculado." IS NOT NULL ";
335   - }
336   - if($suportaWMST != true && $direto == false && $tipoconta != ""){
337   - $sqlDadosMedidaVariavel .= " /*FA*//*FA*/ /*FAT*//*FAT*/ GROUP BY cod_regiao ";
338   - }
339   - $sqlagrupamento = "";
340   - //sql que retorna a lista de ocorrencias agrupados de uma coluna especifica
341   - if(!empty($agruparpor) && $direto == false){
342   - $sqlagrupamento = " SELECT $agruparpor FROM ".$dados["esquemadb"].".".$dados["tabela"];
343   - if(!empty ($filtro)){
344   - $sqlagrupamento .= " WHERE ".$filtro;
345   - }
346   - $sqlagrupamento .= " /*FA*//*FA*/ /*FAT*//*FAT*/ GROUP BY ".$agruparpor." ORDER BY ".$agruparpor;
347   - }
348   - if($dados["colunavalor"] == ""){
349   - $nomeColunaValor = "contagem";
350   - }
351   - else{
352   - $nomeColunaValor = $dados["colunavalor"];
353   - }
354   - $sqlIntermediario = "SELECT (j.valorcalculado) AS ".$nomeColunaValor.", __COLUNASSEMGEO__".
355   - " FROM ".$dadosgeo["esquemadb"].".".$dadosgeo["tabela"]." AS regiao ".
356   - " INNER JOIN ( __SQLDADOS__ ) ".
357   - " AS j ON j.cod_regiao::text = regiao.".$dadosgeo["identificador"]."::text";
358   - //inclui os sqls de regioes de niveis inferiores
359   - if($agregaregiao == true && $direto == false){
360   - $hierarquia = $this->regiaoFilhaAoPai($dados["codigo_tipo_regiao"],$codigo_tipo_regiao);
361   - $caminho = $hierarquia["caminho"];
362   - $dadosColunas = $hierarquia["colunas"];
363   - //var_dump($hierarquia);exit;
364   - if(count($caminho) > 0){
365   - $caminho = array_reverse($caminho);
366   - foreach($caminho as $idregiao){
367   - if($idregiao != $codigo_tipo_regiao){//a regiao pai ja esta no sql
368   - $tempDadosRegiao = $this->listaTipoRegiao($idregiao);
369   - //para contador forcado
370   - if($dados["colunavalor"] == ""){
371   - $nomevalorcalculado = "'1'::numeric";
372   - }
373   - else{
374   - $nomevalorcalculado = "j.valorcalculado";
375   - }
376   - $temp = "SELECT regiao.".$dadosColunas[$idregiao]["colunaligacao_regiaopai"]." AS cod_regiao,sum(".$nomevalorcalculado.") AS valorcalculado ".
377   - "FROM ".$tempDadosRegiao["esquemadb"].".".$tempDadosRegiao["tabela"]." AS regiao ".
378   - "INNER JOIN ".
379   - "( __SQLDADOS__ )".
380   - " AS j ON j.cod_regiao::text = regiao.".$tempDadosRegiao["identificador"]."::text GROUP BY regiao.".$dadosColunas[$idregiao]["colunaligacao_regiaopai"];
381   - $sqlIntermediario = str_replace("__SQLDADOS__",$temp,$sqlIntermediario);
382   - }
383   - }
384   - }
385   - }
386   - //sql final que retorna os dados
387   - //contem todas as colunas da tabela regiao, menos as que contem geometria
388   - $sql = str_replace("__SQLDADOS__",$sqlDadosMedidaVariavel,$sqlIntermediario);
389   - $sql = str_replace("__COLUNASSEMGEO__",implode(",",$colunasSemGeo),$sql);
  326 + $sqlDadosMedidaVariavel = "SELECT ".$dados["colunaidgeo"]." AS cod_regiao,$tipoconta(".$nomevalorcalculado.") AS valorcalculado FROM ".$dados["esquemadb"].".".$dados["tabela"];
  327 + if($suportaWMST == true && $direto == false){
  328 + $sqlDadosMedidaVariavel = "SELECT $sqlWMST as dimtempo,".$dados["colunaidgeo"]." AS cod_regiao,".$nomevalorcalculado." AS valorcalculado FROM ".$dados["esquemadb"].".".$dados["tabela"];
  329 + }
  330 + if(!empty ($filtro)){
  331 + $sqlDadosMedidaVariavel .= " WHERE ".$filtro . " AND ".$nomevalorcalculado." IS NOT NULL ";
  332 + }
  333 + else{
  334 + $sqlDadosMedidaVariavel .= " WHERE ".$nomevalorcalculado." IS NOT NULL ";
  335 + }
  336 + if($suportaWMST != true && $direto == false && $tipoconta != ""){
  337 + $sqlDadosMedidaVariavel .= " /*FA*//*FA*/ /*FAT*//*FAT*/ GROUP BY cod_regiao ";
  338 + }
  339 + $sqlagrupamento = "";
  340 + //sql que retorna a lista de ocorrencias agrupados de uma coluna especifica
  341 + if(!empty($agruparpor) && $direto == false){
  342 + $sqlagrupamento = " SELECT $agruparpor FROM ".$dados["esquemadb"].".".$dados["tabela"];
  343 + if(!empty ($filtro)){
  344 + $sqlagrupamento .= " WHERE ".$filtro;
  345 + }
  346 + $sqlagrupamento .= " /*FA*//*FA*/ /*FAT*//*FAT*/ GROUP BY ".$agruparpor." ORDER BY ".$agruparpor;
  347 + }
  348 + if($dados["colunavalor"] == ""){
  349 + $nomeColunaValor = "contagem";
  350 + }
  351 + else{
  352 + $nomeColunaValor = $dados["colunavalor"];
  353 + }
  354 + $sqlIntermediario = "SELECT (j.valorcalculado) AS ".$nomeColunaValor.", __COLUNASSEMGEO__".
  355 + " FROM ".$dadosgeo["esquemadb"].".".$dadosgeo["tabela"]." AS regiao ".
  356 + " INNER JOIN ( __SQLDADOS__ ) ".
  357 + " AS j ON j.cod_regiao::text = regiao.".$dadosgeo["identificador"]."::text";
  358 + //inclui os sqls de regioes de niveis inferiores
  359 + if($agregaregiao == true && $direto == false){
  360 + $hierarquia = $this->regiaoFilhaAoPai($dados["codigo_tipo_regiao"],$codigo_tipo_regiao);
  361 + $caminho = $hierarquia["caminho"];
  362 + $dadosColunas = $hierarquia["colunas"];
  363 + //var_dump($hierarquia);exit;
  364 + if(count($caminho) > 0){
  365 + $caminho = array_reverse($caminho);
  366 + foreach($caminho as $idregiao){
  367 + if($idregiao != $codigo_tipo_regiao){//a regiao pai ja esta no sql
  368 + $tempDadosRegiao = $this->listaTipoRegiao($idregiao);
  369 + //para contador forcado
  370 + if($dados["colunavalor"] == ""){
  371 + $nomevalorcalculado = "'1'::numeric";
  372 + }
  373 + else{
  374 + $nomevalorcalculado = "j.valorcalculado";
  375 + }
  376 + $temp = "SELECT regiao.".$dadosColunas[$idregiao]["colunaligacao_regiaopai"]." AS cod_regiao,sum(".$nomevalorcalculado.") AS valorcalculado ".
  377 + "FROM ".$tempDadosRegiao["esquemadb"].".".$tempDadosRegiao["tabela"]." AS regiao ".
  378 + "INNER JOIN ".
  379 + "( __SQLDADOS__ )".
  380 + " AS j ON j.cod_regiao::text = regiao.".$tempDadosRegiao["identificador"]."::text GROUP BY regiao.".$dadosColunas[$idregiao]["colunaligacao_regiaopai"];
  381 + $sqlIntermediario = str_replace("__SQLDADOS__",$temp,$sqlIntermediario);
  382 + }
  383 + }
  384 + }
  385 + }
  386 + //sql final que retorna os dados
  387 + //contem todas as colunas da tabela regiao, menos as que contem geometria
  388 + $sql = str_replace("__SQLDADOS__",$sqlDadosMedidaVariavel,$sqlIntermediario);
  389 + $sql = str_replace("__COLUNASSEMGEO__",implode(",",$colunasSemGeo),$sql);
390 390  
391   - //sql para o mapserver
392   - $sqlgeo = str_replace("__SQLDADOS__",$sqlDadosMedidaVariavel,$sqlIntermediario);
393   - $colunasComGeo = $colunasSemGeo;
394   - //$colunasComGeo[] = "/*SG*/st_setsrid(".$colunageo.",".$dadosgeo["srid"].") as ".$colunageo." /*SG*/";
395   - $colunasComGeo[] = "/*SG*/".$colunageo." as ".$colunageo." /*SG*/";
396   - $sqlgeo = str_replace("__COLUNASSEMGEO__",implode(",",$colunasComGeo),$sqlgeo);
397   - $sqlgeo = $colunageo." from /*SE*/(".$sqlgeo." /*FR*//*FR*/ )/*SE*/ as foo using unique ".$dadosgeo["identificador"]." using srid=".$dadosgeo["srid"];
  391 + //sql para o mapserver
  392 + $sqlgeo = str_replace("__SQLDADOS__",$sqlDadosMedidaVariavel,$sqlIntermediario);
  393 + $colunasComGeo = $colunasSemGeo;
  394 + //$colunasComGeo[] = "/*SG*/st_setsrid(".$colunageo.",".$dadosgeo["srid"].") as ".$colunageo." /*SG*/";
  395 + $colunasComGeo[] = "/*SG*/".$colunageo." as ".$colunageo." /*SG*/";
  396 + $sqlgeo = str_replace("__COLUNASSEMGEO__",implode(",",$colunasComGeo),$sqlgeo);
  397 + $sqlgeo = $colunageo." from /*SE*/(".$sqlgeo." /*FR*//*FR*/ )/*SE*/ as foo using unique ".$dadosgeo["identificador"]." using srid=".$dadosgeo["srid"];
398 398  
399   - //o SQL com os dados contem um filtro ou nao?
400   - $contemfiltro = false;
401   - if(!empty($filtro) && $direto == false){
402   - $contemfiltro = true;
403   - $titulo .= " ".$filtro;
404   - }
405   - //adiciona a coluna com os valores no inicio do array()
406   - $colunasSemGeo = array_merge(array($dados["colunavalor"]),$colunasSemGeo);
407   - $buscar = array("drop","update","insert","create","alter","delete");
408   - $sql = str_ireplace($buscar,"",$sql);
409   - $sqlagrupamento = str_ireplace($buscar,"",$sqlagrupamento);
410   - $sqlgeo = str_ireplace($buscar,"",$sqlgeo);
411   - return array(
412   - "nomeregiao"=>$dadosgeo["colunanomeregiao"],
413   - "titulo"=>$titulo,
414   - "colunavalor"=>$dados["colunavalor"],
415   - "sqlagrupamento"=>$sqlagrupamento,
416   - "sql"=>$sql,
417   - "sqlmapserver"=>$sqlgeo,
418   - "filtro"=>$contemfiltro,
419   - "colunas"=>$colunasSemGeo,
420   - "alias"=>$alias,
421   - "srid"=>$dadosgeo["srid"]
422   - );
423   - }
424   - /**
425   - * Retorna o sql de uma string obtida do elemento data de um layer mapserver
426   - * Remove a referencia a coluna geo
427   - * @param string obtida de DATA de um LAYER mapserver
428   - */
429   - function dataLayer2sql ($data){
430   - //remove marcadores geo
431   - $sqlf = explode("/*SE*/",$data);
432   - $sqlf = explode("/*SG*/",$sqlf[1]);
433   - $sqlf = $sqlf[0]." ".$sqlf[2];
434   - $sqlf = str_replace(", FROM"," FROM",$sqlf);
435   - return $sqlf;
436   - }
437   - /**
438   - * Retorna os ids das regioes que permitem partir de uma regiao filha chegar a uma regiao pai
439   - * Usado para descobrir que regioes devem ser sequencialmente agregadas
440   - * @param partir da regiao
441   - * @param chegar na regiao
442   - * @return array lista de ids de regioes sequenciais do filho ate chegar ao pai indicado
443   - */
444   - function regiaoFilhaAoPai($codigo_tipo_regiao,$codigo_tipo_regiao_pai=""){
445   - $pais = $this->listaAgregaRegiao($codigo_tipo_regiao);
446   - $caminho = array($codigo_tipo_regiao);
447   - $colunas = array();
448   - if(count($pais) == 0){
449   - return $caminho;
450   - }
451   - foreach($pais as $pai){
452   - $caminho[] = $pai["codigo_tipo_regiao_pai"];
453   - $colunas[$pai["codigo_tipo_regiao"]] = $pai;
454   - if($pai["codigo_tipo_regiao_pai"] == $codigo_tipo_regiao_pai){
455   - return array("caminho"=>$caminho,"colunas"=>$colunas);
456   - }
457   - }
458   - return array("caminho"=>$caminho,"colunas"=>$colunas);
459   - }
460   - function hierarquiaPath($node){
461   - $query="select codigo_tipo_regiao_pai as parent from ".$this->esquemaadmin."i3geoestat_agregaregiao WHERE codigo_tipo_regiao = $node";
462   - $result=$this->execSQL($query,"",false);
463   - $row = $result[0];
464   - // save the path in this array
465   - $path = array();
466   - // only continue if this $node isn't the root node
467   - // (that's the node with no parent)
468   - if ($row['parent']!='') {
469   - // the last part of the path to $node, is the name
470   - // of the parent of $node
471   - $path[] = $row['parent'];
472   - // we should add the path to the parent of this node
473   - // to the path
474   - $path = array_merge($this->hierarquiaPath($row['parent']), $path);
475   - }
476   - // return the path
477   - sort($path);
478   - return $path;
479   - }
480   - /**
481   - * Cria um arquivo mapfile para uma medida de variavel
482   - * Inclui no arquivo o layer de acesso aos dados
483   - * O mapfile contem apenas o layer
484   - * O arquivo e armazenado em uma pasta temporaria
485   - * O sql e obtido com o metodo sqlMedidaVariavel
486   - * @param id da medida da variavel
487   - * @param filtro que sera concatenado ao sql padrao da medida
488   - * @param 0|1 indica se todas as colunas da tabela original dos dados sera incluida no sql
489   - * @param tipo de layer
490   - * @param titulo do layer
491   - * @param id da classificacao cadastrada,se for vazio usa o primeiro
492   - * @param coluna que sera usada como agrupamento no sql
493   - * @param codigo do tipo de regiao cadastrada
494   - * @param valor de opacidade do layer
495   - * @param o layer deve suportar WMS-T ou nao
496   - * @param faz o cache do mapfile
497   - * @return array("mapfile"=>,"layer"=>,"titulolayer"=>)
498   - */
499   - function mapfileMedidaVariavel($id_medida_variavel,$filtro="",$todasascolunas = 0,$tipolayer="polygon",$titulolayer="",$id_classificacao="",$agruparpor="",$codigo_tipo_regiao="",$opacidade="",$suportaWMST=false,$cachemapfile=true){
500   - //para permitir a inclusao de filtros, o fim do sql e marcado com /*FW*//*FW*/
501   - //indicando onde deve comecar e terminar uma possivel clausula where
502   - //ou com /*FA*//*FA*/
503   - //para marcar que deve ser utilizado AND ao adicionar o filtro
504   - //utiliza-se da mesma forma /*FAT*//*FAT*/ e /*FWT*//*FWT*/ para os filtros de tempo
505   - //Layers adicionados aqui sao marcados com o metadata METAESTAT "SIM"
506   - //O codigo_tipo_regiao e marcado com o metadata METAESTAT_CODIGO_TIPO_REGIAO
507   - //O id da medida da variavel e marcado com o metadata METAESTAT_ID_MEDIDA_VARIAVEL
  399 + //o SQL com os dados contem um filtro ou nao?
  400 + $contemfiltro = false;
  401 + if(!empty($filtro) && $direto == false){
  402 + $contemfiltro = true;
  403 + $titulo .= " ".$filtro;
  404 + }
  405 + //adiciona a coluna com os valores no inicio do array()
  406 + $colunasSemGeo = array_merge(array($dados["colunavalor"]),$colunasSemGeo);
  407 + $buscar = array("drop","update","insert","create","alter","delete");
  408 + $sql = str_ireplace($buscar,"",$sql);
  409 + $sqlagrupamento = str_ireplace($buscar,"",$sqlagrupamento);
  410 + $sqlgeo = str_ireplace($buscar,"",$sqlgeo);
  411 + return array(
  412 + "nomeregiao"=>$dadosgeo["colunanomeregiao"],
  413 + "titulo"=>$titulo,
  414 + "colunavalor"=>$dados["colunavalor"],
  415 + "sqlagrupamento"=>$sqlagrupamento,
  416 + "sql"=>$sql,
  417 + "sqlmapserver"=>$sqlgeo,
  418 + "filtro"=>$contemfiltro,
  419 + "colunas"=>$colunasSemGeo,
  420 + "alias"=>$alias,
  421 + "srid"=>$dadosgeo["srid"]
  422 + );
  423 + }
  424 + /**
  425 + * Retorna o sql de uma string obtida do elemento data de um layer mapserver
  426 + * Remove a referencia a coluna geo
  427 + * @param string obtida de DATA de um LAYER mapserver
  428 + */
  429 + function dataLayer2sql ($data){
  430 + //remove marcadores geo
  431 + $sqlf = explode("/*SE*/",$data);
  432 + $sqlf = explode("/*SG*/",$sqlf[1]);
  433 + $sqlf = $sqlf[0]." ".$sqlf[2];
  434 + $sqlf = str_replace(", FROM"," FROM",$sqlf);
  435 + return $sqlf;
  436 + }
  437 + /**
  438 + * Retorna os ids das regioes que permitem partir de uma regiao filha chegar a uma regiao pai
  439 + * Usado para descobrir que regioes devem ser sequencialmente agregadas
  440 + * @param partir da regiao
  441 + * @param chegar na regiao
  442 + * @return array lista de ids de regioes sequenciais do filho ate chegar ao pai indicado
  443 + */
  444 + function regiaoFilhaAoPai($codigo_tipo_regiao,$codigo_tipo_regiao_pai=""){
  445 + $pais = $this->listaAgregaRegiao($codigo_tipo_regiao);
  446 + $caminho = array($codigo_tipo_regiao);
  447 + $colunas = array();
  448 + if(count($pais) == 0){
  449 + return $caminho;
  450 + }
  451 + foreach($pais as $pai){
  452 + $caminho[] = $pai["codigo_tipo_regiao_pai"];
  453 + $colunas[$pai["codigo_tipo_regiao"]] = $pai;
  454 + if($pai["codigo_tipo_regiao_pai"] == $codigo_tipo_regiao_pai){
  455 + return array("caminho"=>$caminho,"colunas"=>$colunas);
  456 + }
  457 + }
  458 + return array("caminho"=>$caminho,"colunas"=>$colunas);
  459 + }
  460 + function hierarquiaPath($node){
  461 + $query="select codigo_tipo_regiao_pai as parent from ".$this->esquemaadmin."i3geoestat_agregaregiao WHERE codigo_tipo_regiao = $node";
  462 + $result=$this->execSQL($query,"",false);
  463 + $row = $result[0];
  464 + // save the path in this array
  465 + $path = array();
  466 + // only continue if this $node isn't the root node
  467 + // (that's the node with no parent)
  468 + if ($row['parent']!='') {
  469 + // the last part of the path to $node, is the name
  470 + // of the parent of $node
  471 + $path[] = $row['parent'];
  472 + // we should add the path to the parent of this node
  473 + // to the path
  474 + $path = array_merge($this->hierarquiaPath($row['parent']), $path);
  475 + }
  476 + // return the path
  477 + sort($path);
  478 + return $path;
  479 + }
  480 + /**
  481 + * Cria um arquivo mapfile para uma medida de variavel
  482 + * Inclui no arquivo o layer de acesso aos dados
  483 + * O mapfile contem apenas o layer
  484 + * O arquivo e armazenado em uma pasta temporaria
  485 + * O sql e obtido com o metodo sqlMedidaVariavel
  486 + * @param id da medida da variavel
  487 + * @param filtro que sera concatenado ao sql padrao da medida
  488 + * @param 0|1 indica se todas as colunas da tabela original dos dados sera incluida no sql
  489 + * @param tipo de layer
  490 + * @param titulo do layer
  491 + * @param id da classificacao cadastrada,se for vazio usa o primeiro
  492 + * @param coluna que sera usada como agrupamento no sql
  493 + * @param codigo do tipo de regiao cadastrada
  494 + * @param valor de opacidade do layer
  495 + * @param o layer deve suportar WMS-T ou nao
  496 + * @param faz o cache do mapfile
  497 + * @return array("mapfile"=>,"layer"=>,"titulolayer"=>)
  498 + */
  499 + function mapfileMedidaVariavel($id_medida_variavel,$filtro="",$todasascolunas = 0,$tipolayer="polygon",$titulolayer="",$id_classificacao="",$agruparpor="",$codigo_tipo_regiao="",$opacidade="",$suportaWMST=false,$cachemapfile=true){
  500 + //para permitir a inclusao de filtros, o fim do sql e marcado com /*FW*//*FW*/
  501 + //indicando onde deve comecar e terminar uma possivel clausula where
  502 + //ou com /*FA*//*FA*/
  503 + //para marcar que deve ser utilizado AND ao adicionar o filtro
  504 + //utiliza-se da mesma forma /*FAT*//*FAT*/ e /*FWT*//*FWT*/ para os filtros de tempo
  505 + //Layers adicionados aqui sao marcados com o metadata METAESTAT "SIM"
  506 + //O codigo_tipo_regiao e marcado com o metadata METAESTAT_CODIGO_TIPO_REGIAO
  507 + //O id da medida da variavel e marcado com o metadata METAESTAT_ID_MEDIDA_VARIAVEL
508 508  
509   - $arq = $this->dir_tmp."/".$this->nomecache.".map";
510   - if(!file_exists($arq)){
511   - $meta = $this->listaMedidaVariavel("",$id_medida_variavel);
512   - //evita agregar regioes qd nao e necessario
513   - if($meta["codigo_tipo_regiao"] == $codigo_tipo_regiao || empty($codigo_tipo_regiao) ){
514   - $agruparpor = "";
515   - }
516   - $dconexao = $this->listaConexao($meta["codigo_estat_conexao"],true);
517   - $conexao = "user=".$dconexao["usuario"]." password=".$dconexao["senha"]." dbname=".$dconexao["bancodedados"]." host=".$dconexao["host"]." port=".$dconexao["porta"]."";
518   - $sql = $this->sqlMedidaVariavel(
519   - $id_medida_variavel,
520   - $todasascolunas,
521   - $agruparpor,
522   - $tipolayer,
523   - $codigo_tipo_regiao,
524   - $suportaWMST,
525   - $filtro
526   - );
527   - if(empty($codigo_tipo_regiao)){
528   - $d = $this->listaMedidaVariavel("",$id_medida_variavel);
529   - $codigo_tipo_regiao = $d["codigo_tipo_regiao"];
530   - }
531   - //define o tipo correto de layer
532   - $dg = $this->listaDadosGeometriaRegiao($codigo_tipo_regiao);
533   - if(empty($tipolayer)){
534   - $tipolayer = "polygon";
535   - }
536   - if($dg["dimension"] == 0){
537   - $tipolayer = "point";
538   - }
539   - if($dg["dimension"] == 1){
540   - $tipolayer = "line";
541   - }
542   - $sqlf = $sql["sqlmapserver"];
  509 + $arq = $this->dir_tmp."/".$this->nomecache.".map";
  510 + if(!file_exists($arq)){
  511 + $meta = $this->listaMedidaVariavel("",$id_medida_variavel);
  512 + //evita agregar regioes qd nao e necessario
  513 + if($meta["codigo_tipo_regiao"] == $codigo_tipo_regiao || empty($codigo_tipo_regiao) ){
  514 + $agruparpor = "";
  515 + }
  516 + $dconexao = $this->listaConexao($meta["codigo_estat_conexao"],true);
  517 + $conexao = "user=".$dconexao["usuario"]." password=".$dconexao["senha"]." dbname=".$dconexao["bancodedados"]." host=".$dconexao["host"]." port=".$dconexao["porta"]."";
  518 + $sql = $this->sqlMedidaVariavel(
  519 + $id_medida_variavel,
  520 + $todasascolunas,
  521 + $agruparpor,
  522 + $tipolayer,
  523 + $codigo_tipo_regiao,
  524 + $suportaWMST,
  525 + $filtro
  526 + );
  527 + if(empty($codigo_tipo_regiao)){
  528 + $d = $this->listaMedidaVariavel("",$id_medida_variavel);
  529 + $codigo_tipo_regiao = $d["codigo_tipo_regiao"];
  530 + }
  531 + //define o tipo correto de layer
  532 + $dg = $this->listaDadosGeometriaRegiao($codigo_tipo_regiao);
  533 + if(empty($tipolayer)){
  534 + $tipolayer = "polygon";
  535 + }
  536 + if($dg["dimension"] == 0){
  537 + $tipolayer = "point";
  538 + }
  539 + if($dg["dimension"] == 1){
  540 + $tipolayer = "line";
  541 + }
  542 + $sqlf = $sql["sqlmapserver"];
543 543  
544   - $classes = "";
545   - if(!empty($id_classificacao)){
546   - $classes = $this->listaClasseClassificacao($id_classificacao);
547   - }
548   - else{
549   - $classificacoes = $this->listaClassificacaoMedida($id_medida_variavel);
550   - $classes = $this->listaClasseClassificacao($classificacoes[0]["id_classificacao"]);
551   - }
552   - if($classes == false){
553   - $valores = $this->dadosMedidaVariavel($id_medida_variavel,$filtro." AND ".$meta["colunavalor"]." > 0 ");
554   - $valores = array_column($valores,$meta["colunavalor"]);
555   - $item = $meta["colunavalor"];
556   - $classes = array();
557   - $cores = array();
558   - //cores baseadas em colorbrewer
559   - $cores[] = array(array(179,205,227),array(140,150,198),array(136,86,167),array(129,15,124));
560   - $cores[] = array(array(178,226,226),array(102,194,164),array(44,162,95),array(0,109,44));
561   - $cores[] = array(array(186,228,188),array(123,204,196),array(67,162,202),array(8,104,172));
562   - $cores[] = array(array(253,204,138),array(252,141,89),array(227,74,51),array(179,0,0));
563   - $cores[] = array(array(189,201,225),array(116,169,207),array(43,140,190),array(4,90,141));
564   - $cores[] = array(array(189,201,225),array(103,169,207),array(28,144,153),array(1,108,89));
565   - $cores[] = array(array(215,181,216),array(223,101,176),array(221,28,119),array(152,0,67));
566   - $cores[] = array(array(251,180,185),array(247,104,161),array(197,27,138),array(122,1,119));
567   - $cores[] = array(array(194,230,153),array(120,198,121),array(49,163,84),array(0,104,55));
568   - $cores[] = array(array(255,255,178),array(254,204,92),array(253,141,60),array(240,59,32));
569   - $cores = $cores[mt_rand(0,9)];
570   - include_once("classe_estatistica.php");
571   - $estat = new estatistica();
572   - $estat->calcula($valores);
573   - $calc = $estat->resultado;
574   - $titulo = array();
575   - //adiciona as classes novas
576   - $expressao[] = "([".$item."]<=".($calc["quartil1"]).")";
577   - $titulo[] = "Quartil 1: <=".$calc["quartil1"];
578   - $expressao[] = "(([".$item."]>".($calc["quartil1"]).")and([".$item."]<=".($calc["quartil2"])."))";
579   - $titulo[] = "Quartil 2: >".$calc["quartil1"]." e <= ".$calc["quartil2"];
580   - if($calc["quartil3"] != 0){
581   - $expressao[] = "(([".$item."]>".($calc["quartil2"]).")and([".$item."]<=".($calc["quartil3"])."))";
582   - $titulo[] = "Quartil 3: >".$calc["quartil2"]." e <= ".$calc["quartil3"];
583   - $expressao[] = "([".$item."]>".($calc["quartil3"]).")";
584   - $titulo[] = "Quartil 4: >".$calc["quartil3"];
585   - }
586   - if($calc["quartil1"] > 0){
587   - $classes[] = array(
588   - "expressao"=>"([".$item."] = 0)",
589   - "titulo"=>"0",
590   - "verde"=>100,
591   - "vermelho"=>100,
592   - "azul"=>100
593   - );
594   - }
595   - for ($i=0;$i < count($expressao);++$i){
596   - $classes[] = array(
597   - "expressao"=>$expressao[$i],
598   - "titulo"=>$titulo[$i],
599   - "verde"=>$cores[$i][1],
600   - "vermelho"=>$cores[$i][0],
601   - "azul"=>$cores[$i][2]
602   - );
603   - }
604   - }
605   - if(!empty($titulolayer)){
606   - $titulolayer = mb_convert_encoding($titulolayer,"ISO-8859-1",mb_detect_encoding($titulolayer));
607   - }
608   - else{
609   - $titulolayer = mb_convert_encoding($sql["titulo"],"ISO-8859-1",mb_detect_encoding($sql["titulo"]));
610   - }
611   - //necessario para evitar problemas com ITENSDESC
612   - $titulolayer = str_replace(","," ",$titulolayer);
613   - $titulolayer = str_replace("=",": ",$titulolayer);
614   - //pega os parametros caso seja um mapfile para WMS-time
615   - if($suportaWMST == true){
616   - $sqlMinMax = "select min(dimtempo) as min,max(dimtempo) as max from(".$sql["sql"].") as x";
617   - $minmaxdata = $this->execSQLDB($meta["codigo_estat_conexao"],$sqlMinMax );
618   - $fontemeta = $this->listaFonteinfoMedida($id_medida_variavel);
619   - if(count($fontemeta) > 0){
620   - $fontemeta = $fontemeta[0]["link"];
621   - }
622   - else{
623   - $fontemeta = "";
624   - }
625   - }
626   - $dados[] = "MAP";
627   - $dados[] = 'SYMBOLSET "'.$this->locaplic.'/symbols/simbolosv6.sym"';
628   - $dados[] = 'FONTSET "'.$this->locaplic.'/symbols/fontes.txt"';
629   - //inclui os simbolos que podem ser definidos como imagens
630   - foreach($classes as $classe){
631   - if(!empty($classe["simbolo"])){
632   - if(file_exists($classe["simbolo"])){
633   - $dados[] = "SYMBOL";
634   - $dados[] = ' NAME "'.$classe["simbolo"].'"';
635   - $dados[] = ' TYPE pixmap';
636   - $dados[] = ' IMAGE "'.$classe["simbolo"].'"';
637   - $dados[] = "END";
638   - }
639   - }
640   - }
641   - $dados[] = "LAYER";
642   - $dados[] = ' NAME "'.$this->nomecache.'"';
643   - $dados[] = " TYPE $tipolayer";
644   - $dados[] = ' DATA "'.$sqlf.'"';
645   - $dados[] = ' CONNECTION "'.$conexao.'"';
646   - $dados[] = ' CONNECTIONTYPE POSTGIS';
647   - $dados[] = ' STATUS OFF';
648   - $dados[] = ' TEMPLATE "none.htm"';
649   - if($opacidade != ""){
650   - $dados[] = ' OPACITY '.$opacidade;
651   - }
652   - $dados[] = ' METADATA';
653   - $dados[] = ' TEMA "'.$titulolayer.'"';
654   - $dados[] = ' tme "{\"titulo\":\"'.$titulolayer.'\",\"colnome\":\"'.$sql["nomeregiao"].'\",\"colsdata\":[\"'.$sql["colunavalor"].'\"],\"lmax\":\"8000\",\"amax\":\"500000\",\"outlinecolor\":\"-1,-1,-1\",\"numvertices\":\"4\",\"auto\":\"nao\",\"exec\":\"nao\"}"';
  544 + $classes = "";
  545 + if(!empty($id_classificacao)){
  546 + $classes = $this->listaClasseClassificacao($id_classificacao);
  547 + }
  548 + else{
  549 + $classificacoes = $this->listaClassificacaoMedida($id_medida_variavel);
  550 + $classes = $this->listaClasseClassificacao($classificacoes[0]["id_classificacao"]);
  551 + }
  552 + if($classes == false){
  553 + $valores = $this->dadosMedidaVariavel($id_medida_variavel,$filtro." AND ".$meta["colunavalor"]." > 0 ");
  554 + $valores = array_column($valores,$meta["colunavalor"]);
  555 + $item = $meta["colunavalor"];
  556 + $classes = array();
  557 + $cores = array();
  558 + //cores baseadas em colorbrewer
  559 + $cores[] = array(array(179,205,227),array(140,150,198),array(136,86,167),array(129,15,124));
  560 + $cores[] = array(array(178,226,226),array(102,194,164),array(44,162,95),array(0,109,44));
  561 + $cores[] = array(array(186,228,188),array(123,204,196),array(67,162,202),array(8,104,172));
  562 + $cores[] = array(array(253,204,138),array(252,141,89),array(227,74,51),array(179,0,0));
  563 + $cores[] = array(array(189,201,225),array(116,169,207),array(43,140,190),array(4,90,141));
  564 + $cores[] = array(array(189,201,225),array(103,169,207),array(28,144,153),array(1,108,89));
  565 + $cores[] = array(array(215,181,216),array(223,101,176),array(221,28,119),array(152,0,67));
  566 + $cores[] = array(array(251,180,185),array(247,104,161),array(197,27,138),array(122,1,119));
  567 + $cores[] = array(array(194,230,153),array(120,198,121),array(49,163,84),array(0,104,55));
  568 + $cores[] = array(array(255,255,178),array(254,204,92),array(253,141,60),array(240,59,32));
  569 + $cores = $cores[mt_rand(0,9)];
  570 + include_once("classe_estatistica.php");
  571 + $estat = new estatistica();
  572 + $estat->calcula($valores);
  573 + $calc = $estat->resultado;
  574 + $titulo = array();
  575 + //adiciona as classes novas
  576 + $expressao[] = "([".$item."]<=".($calc["quartil1"]).")";
  577 + $titulo[] = "Quartil 1: <=".$calc["quartil1"];
  578 + $expressao[] = "(([".$item."]>".($calc["quartil1"]).")and([".$item."]<=".($calc["quartil2"])."))";
  579 + $titulo[] = "Quartil 2: >".$calc["quartil1"]." e <= ".$calc["quartil2"];
  580 + if($calc["quartil3"] != 0){
  581 + $expressao[] = "(([".$item."]>".($calc["quartil2"]).")and([".$item."]<=".($calc["quartil3"])."))";
  582 + $titulo[] = "Quartil 3: >".$calc["quartil2"]." e <= ".$calc["quartil3"];
  583 + $expressao[] = "([".$item."]>".($calc["quartil3"]).")";
  584 + $titulo[] = "Quartil 4: >".$calc["quartil3"];
  585 + }
  586 + if($calc["quartil1"] > 0){
  587 + $classes[] = array(
  588 + "expressao"=>"([".$item."] = 0)",
  589 + "titulo"=>"0",
  590 + "verde"=>100,
  591 + "vermelho"=>100,
  592 + "azul"=>100
  593 + );
  594 + }
  595 + for ($i=0;$i < count($expressao);++$i){
  596 + $classes[] = array(
  597 + "expressao"=>$expressao[$i],
  598 + "titulo"=>$titulo[$i],
  599 + "verde"=>$cores[$i][1],
  600 + "vermelho"=>$cores[$i][0],
  601 + "azul"=>$cores[$i][2]
  602 + );
  603 + }
  604 + }
  605 + if(!empty($titulolayer)){
  606 + //$titulolayer = mb_convert_encoding($titulolayer,"ISO-8859-1",mb_detect_encoding($titulolayer));
  607 + }
  608 + else{
  609 + $titulolayer = mb_convert_encoding($sql["titulo"],"ISO-8859-1",mb_detect_encoding($sql["titulo"]));
  610 + }
  611 + //necessario para evitar problemas com ITENSDESC
  612 + $titulolayer = str_replace(","," ",$titulolayer);
  613 + $titulolayer = str_replace("=",": ",$titulolayer);
  614 + //pega os parametros caso seja um mapfile para WMS-time
  615 + if($suportaWMST == true){
  616 + $sqlMinMax = "select min(dimtempo) as min,max(dimtempo) as max from(".$sql["sql"].") as x";
  617 + $minmaxdata = $this->execSQLDB($meta["codigo_estat_conexao"],$sqlMinMax );
  618 + $fontemeta = $this->listaFonteinfoMedida($id_medida_variavel);
  619 + if(count($fontemeta) > 0){
  620 + $fontemeta = $fontemeta[0]["link"];
  621 + }
  622 + else{
  623 + $fontemeta = "";
  624 + }
  625 + }
  626 + $dados[] = "MAP";
  627 + $dados[] = 'SYMBOLSET "'.$this->locaplic.'/symbols/simbolosv6.sym"';
  628 + $dados[] = 'FONTSET "'.$this->locaplic.'/symbols/fontes.txt"';
  629 + //inclui os simbolos que podem ser definidos como imagens
  630 + foreach($classes as $classe){
  631 + if(!empty($classe["simbolo"])){
  632 + if(file_exists($classe["simbolo"])){
  633 + $dados[] = "SYMBOL";
  634 + $dados[] = ' NAME "'.$classe["simbolo"].'"';
  635 + $dados[] = ' TYPE pixmap';
  636 + $dados[] = ' IMAGE "'.$classe["simbolo"].'"';
  637 + $dados[] = "END";
  638 + }
  639 + }
  640 + }
  641 + $dados[] = "LAYER";
  642 + $dados[] = ' NAME "'.$this->nomecache.'"';
  643 + $dados[] = " TYPE $tipolayer";
  644 + $dados[] = ' DATA "'.$sqlf.'"';
  645 + $dados[] = ' CONNECTION "'.$conexao.'"';
  646 + $dados[] = ' CONNECTIONTYPE POSTGIS';
  647 + $dados[] = ' STATUS OFF';
  648 + $dados[] = ' TEMPLATE "none.htm"';
  649 + if($opacidade != ""){
  650 + $dados[] = ' OPACITY '.$opacidade;
  651 + }
  652 + $dados[] = ' METADATA';
  653 + $dados[] = ' TEMA "'.$titulolayer.'"';
  654 + $dados[] = ' tme "{\"titulo\":\"'.$titulolayer.'\",\"colnome\":\"'.$sql["nomeregiao"].'\",\"colsdata\":[\"'.$sql["colunavalor"].'\"],\"lmax\":\"8000\",\"amax\":\"500000\",\"outlinecolor\":\"-1,-1,-1\",\"numvertices\":\"4\",\"auto\":\"nao\",\"exec\":\"nao\"}"';
655 655  
656   - $dados[] = ' TIP "'.$sql["colunavalor"].','.$sql["nomeregiao"].'"';
657   - $dados[] = ' CLASSE "SIM"';
658   - $dados[] = ' permitedownload "SIM"';
659   - $dados[] = ' METAESTAT "SIM"';
660   - $dados[] = ' METAESTAT_CODIGO_TIPO_REGIAO "'.$codigo_tipo_regiao.'"';
661   - $dados[] = ' METAESTAT_ID_MEDIDA_VARIAVEL "'.$id_medida_variavel.'"';
662   - //marca se a tabela e editavel, verificando se esta no esquema padrao
663   - if($meta["esquemadb"] == "i3geo_metaestat"){
664   - $dados[] = ' EDITAVEL "SIM"';
665   - $dados[] = ' COLUNAIDUNICO "'.$meta["colunaidunico"].'"';
666   - $dados[] = ' TABELAEDITAVEL "'.$meta["tabela"].'"';
667   - $dados[] = ' ESQUEMATABELAEDITAVEL "'.$meta["esquemadb"].'"';
668   - }
669   - if(count($sql["alias"]) > 0){
670   - $dados[] = ' ITENS "'.implode(",",$sql["colunas"]).'"';
671   - $dados[] = ' ITENSDESC "'.implode(",",$sql["alias"]).'"';
672   - }
673   - if($suportaWMST == true){
674   - $dados[] = ' "wms_timeitem" "dimtempo"';
675   - $dados[] = ' "wms_timeextent" "'.$minmaxdata[0]["min"]."/".$minmaxdata[0]["max"].'"';
676   - $dados[] = ' "wms_timedefault" "'.$minmaxdata[0]["max"].'"';
677   - $dados[] = ' "ows_metadataurl_href" "'.$fontemeta.'"';
678   - $dados[] = ' "ows_metadataurl_type" "TC211" ';
679   - $dados[] = ' "ows_metadataurl_format" "text/html" ';
680   - }
681   - $dados[] = ' END';
682   - if($classes == ""){
683   - $dados[] = ' CLASS';
684   - $dados[] = ' NAME ""';
685   - $dados[] = ' STYLE';
686   - $dados[] = ' COLOR 200 0 0';
687   - if(strtolower($tipolayer) == "point"){
688   - $dados[] = ' SYMBOL "ponto"';
689   - $dados[] = ' SIZE 5';
690   - }
691   - $dados[] = ' END';
692   - $dados[] = ' END';
693   - }
694   - else{
695   - foreach($classes as $classe){
696   - //var_dump($classe);exit;
697   - $dados[] = ' CLASS';
698   - $dados[] = ' NAME "'.mb_convert_encoding($classe["titulo"],"ISO-8859-1",mb_detect_encoding($classe["titulo"])).'"';
699   - if($classe["expressao"] != ""){
700   - $expressao = str_replace('"',"'",$classe["expressao"]);
701   - $dados[] = " EXPRESSION ".$expressao;
702   - }
703   - $dados[] = ' STYLE';
704   - $dados[] = ' COLOR '.$classe["vermelho"].' '.$classe["verde"].' '.$classe["azul"];
705   - if(!empty($classe["tamanho"])){
706   - $dados[] = ' SIZE '.$classe["tamanho"];
707   - }
708   - elseif(strtolower($tipolayer) == "point"){
709   - $dados[] = ' SIZE 5';
710   - }
711   - if(!empty($classe["simbolo"])){
712   - $dados[] = ' SYMBOL '.$classe["simbolo"];
713   - }
714   - elseif(strtolower($tipolayer) == "point"){
715   - $dados[] = ' SYMBOL ponto';
716   - }
717   - if(!empty($classe["otamanho"])){
718   - $dados[] = ' OUTLINEWIDTH '.$classe["otamanho"];
719   - }
720   - if(!empty($classe["overmelho"]) || $classe["overmelho"] == "0"){
721   - $dados[] = ' OUTLINECOLOR '.$classe["overmelho"].' '.$classe["overde"].' '.$classe["oazul"];
722   - }
723   - $dados[] = ' END';
724   - $dados[] = ' END';
725   - }
726   - }
727   - $dados[] = "END";
728   - $dados[] = "END";
729   - $fp = fopen($arq,"w");
730   - foreach ($dados as $dado){
731   - fwrite($fp,$dado."\n");
732   - }
733   - }
734   - return array("mapfile"=>$arq,"layer"=>$this->nomecache,"titulolayer"=>$titulolayer);
735   - }
736   - /**
737   - * Cria um mapfile para visualizacao de regioes
738   - * Inclui no arquivo o layer de acesso aos dados
739   - * O mapfile contem apenas o layer
740   - * O arquivo e armazenado em uma pasta temporaria
741   - * Se o arquivo para a mesma regiao ja existir, tenta usa-lo ao inves de criar um novo
742   - * @param codigo da regiao
743   - * @param cor do outline do simbolo de desenho
744   - * @param largura do simbolo
745   - * @param sim|nao inclui ou nao os labels
746   - * @param boolean remove o arquivo em cache e cria um novo
747   - * @return array("mapfile"=>,"layer"=>,"titulolayer"=>,"codigo_tipo_regiao"=>)
748   - */
749   - function mapfileTipoRegiao($codigo_tipo_regiao,$outlinecolor="255,0,0",$width=1,$nomes="nao",$forcaArquivo=false){
750   - //para permitir a inclusao de filtros, o fim do sql e marcado com /*FW*//*FW*/
751   - //indicando onde deve comecar e terminar uma possivel clausula where
752   - //Layers adicionados aqui sao marcados com o metadata METAESTAT "SIM"
753   - //O codigo_tipo_regiao e marcado com o metadata METAESTAT_CODIGO_TIPO_REGIAO
754   - if($forcaArquivo == false){
755   - $arq = $this->dir_tmp."/".$this->nomecache.".map";
756   - }
757   - else{
758   - $arq = $this->dir_tmp."/".$this->nomecache . $this->nomeRandomico(3) . ".map";
759   - }
  656 + $dados[] = ' TIP "'.$sql["colunavalor"].','.$sql["nomeregiao"].'"';
  657 + $dados[] = ' CLASSE "SIM"';
  658 + $dados[] = ' permitedownload "SIM"';
  659 + $dados[] = ' METAESTAT "SIM"';
  660 + $dados[] = ' METAESTAT_CODIGO_TIPO_REGIAO "'.$codigo_tipo_regiao.'"';
  661 + $dados[] = ' METAESTAT_ID_MEDIDA_VARIAVEL "'.$id_medida_variavel.'"';
  662 + //marca se a tabela e editavel, verificando se esta no esquema padrao
  663 + if($meta["esquemadb"] == "i3geo_metaestat"){
  664 + $dados[] = ' EDITAVEL "SIM"';
  665 + $dados[] = ' COLUNAIDUNICO "'.$meta["colunaidunico"].'"';
  666 + $dados[] = ' TABELAEDITAVEL "'.$meta["tabela"].'"';
  667 + $dados[] = ' ESQUEMATABELAEDITAVEL "'.$meta["esquemadb"].'"';
  668 + }
  669 + if(count($sql["alias"]) > 0){
  670 + $dados[] = ' ITENS "'.implode(",",$sql["colunas"]).'"';
  671 + $dados[] = ' ITENSDESC "'.implode(",",$sql["alias"]).'"';
  672 + }
  673 + if($suportaWMST == true){
  674 + $dados[] = ' "wms_timeitem" "dimtempo"';
  675 + $dados[] = ' "wms_timeextent" "'.$minmaxdata[0]["min"]."/".$minmaxdata[0]["max"].'"';
  676 + $dados[] = ' "wms_timedefault" "'.$minmaxdata[0]["max"].'"';
  677 + $dados[] = ' "ows_metadataurl_href" "'.$fontemeta.'"';
  678 + $dados[] = ' "ows_metadataurl_type" "TC211" ';
  679 + $dados[] = ' "ows_metadataurl_format" "text/html" ';
  680 + }
  681 + $dados[] = ' END';
  682 + if($classes == ""){
  683 + $dados[] = ' CLASS';
  684 + $dados[] = ' NAME ""';
  685 + $dados[] = ' STYLE';
  686 + $dados[] = ' COLOR 200 0 0';
  687 + if(strtolower($tipolayer) == "point"){
  688 + $dados[] = ' SYMBOL "ponto"';
  689 + $dados[] = ' SIZE 5';
  690 + }
  691 + $dados[] = ' END';
  692 + $dados[] = ' END';
  693 + }
  694 + else{
  695 + foreach($classes as $classe){
  696 + //var_dump($classe);exit;
  697 + $dados[] = ' CLASS';
  698 + $dados[] = ' NAME "'.mb_convert_encoding($classe["titulo"],"ISO-8859-1",mb_detect_encoding($classe["titulo"])).'"';
  699 + if($classe["expressao"] != ""){
  700 + $expressao = str_replace('"',"'",$classe["expressao"]);
  701 + $dados[] = " EXPRESSION ".$expressao;
  702 + }
  703 + $dados[] = ' STYLE';
  704 + $dados[] = ' COLOR '.$classe["vermelho"].' '.$classe["verde"].' '.$classe["azul"];
  705 + if(!empty($classe["tamanho"])){
  706 + $dados[] = ' SIZE '.$classe["tamanho"];
  707 + }
  708 + elseif(strtolower($tipolayer) == "point"){
  709 + $dados[] = ' SIZE 5';
  710 + }
  711 + if(!empty($classe["simbolo"])){
  712 + $dados[] = ' SYMBOL '.$classe["simbolo"];
  713 + }
  714 + elseif(strtolower($tipolayer) == "point"){
  715 + $dados[] = ' SYMBOL ponto';
  716 + }
  717 + if(!empty($classe["otamanho"])){
  718 + $dados[] = ' OUTLINEWIDTH '.$classe["otamanho"];
  719 + }
  720 + if(!empty($classe["overmelho"]) || $classe["overmelho"] == "0"){
  721 + $dados[] = ' OUTLINECOLOR '.$classe["overmelho"].' '.$classe["overde"].' '.$classe["oazul"];
  722 + }
  723 + $dados[] = ' END';
  724 + $dados[] = ' END';
  725 + }
  726 + }
  727 + $dados[] = "END";
  728 + $dados[] = "END";
  729 + $fp = fopen($arq,"w");
  730 + foreach ($dados as $dado){
  731 + fwrite($fp,$dado."\n");
  732 + }
  733 + }
  734 + return array("mapfile"=>$arq,"layer"=>$this->nomecache,"titulolayer"=>$titulolayer);
  735 + }
  736 + /**
  737 + * Cria um mapfile para visualizacao de regioes
  738 + * Inclui no arquivo o layer de acesso aos dados
  739 + * O mapfile contem apenas o layer
  740 + * O arquivo e armazenado em uma pasta temporaria
  741 + * Se o arquivo para a mesma regiao ja existir, tenta usa-lo ao inves de criar um novo
  742 + * @param codigo da regiao
  743 + * @param cor do outline do simbolo de desenho
  744 + * @param largura do simbolo
  745 + * @param sim|nao inclui ou nao os labels
  746 + * @param boolean remove o arquivo em cache e cria um novo
  747 + * @return array("mapfile"=>,"layer"=>,"titulolayer"=>,"codigo_tipo_regiao"=>)
  748 + */
  749 + function mapfileTipoRegiao($codigo_tipo_regiao,$outlinecolor="255,0,0",$width=1,$nomes="nao",$forcaArquivo=false){
  750 + //para permitir a inclusao de filtros, o fim do sql e marcado com /*FW*//*FW*/
  751 + //indicando onde deve comecar e terminar uma possivel clausula where
  752 + //Layers adicionados aqui sao marcados com o metadata METAESTAT "SIM"
  753 + //O codigo_tipo_regiao e marcado com o metadata METAESTAT_CODIGO_TIPO_REGIAO
  754 + if($forcaArquivo == false){
  755 + $arq = $this->dir_tmp."/".$this->nomecache.".map";
  756 + }
  757 + else{
  758 + $arq = $this->dir_tmp."/".$this->nomecache . $this->nomeRandomico(3) . ".map";
  759 + }
760 760  
761   - if(!file_exists($arq)){
  761 + if(!file_exists($arq)){
762 762  
763   - $tipolayer = "polygon";
764   - //define o tipo correto de layer
765   - $dg = $this->listaDadosGeometriaRegiao($codigo_tipo_regiao);
  763 + $tipolayer = "polygon";
  764 + //define o tipo correto de layer
  765 + $dg = $this->listaDadosGeometriaRegiao($codigo_tipo_regiao);
766 766  
767   - if(empty($tipolayer)){
768   - $tipolayer = "polygon";
769   - }
770   - if($dg["dimension"] == 0){
771   - $tipolayer = "point";
772   - }
773   - if($dg["dimension"] == 1){
774   - $tipolayer = "line";
775   - }
  767 + if(empty($tipolayer)){
  768 + $tipolayer = "polygon";
  769 + }
  770 + if($dg["dimension"] == 0){
  771 + $tipolayer = "point";
  772 + }
  773 + if($dg["dimension"] == 1){
  774 + $tipolayer = "line";
  775 + }
776 776  
777   - $meta = $this->listaTipoRegiao($codigo_tipo_regiao);
778   - $titulolayer = $meta["nome_tipo_regiao"];
779   - $titulolayer = mb_convert_encoding($titulolayer,"ISO-8859-1",mb_detect_encoding($titulolayer));
780   - $conexao = $this->listaConexao($meta["codigo_estat_conexao"],true);
781   - $conexao = "user=".$conexao["usuario"]." password=".$conexao["senha"]." dbname=".$conexao["bancodedados"]." host=".$conexao["host"]." port=".$conexao["porta"]."";
782   - $colunageo = $meta["colunageo"];
783   - $srid = $meta["srid"];
784   - //pega as colunas menos as do tipo geometry
785   - $colunastabela = $this->colunasTabela($meta["codigo_estat_conexao"],$meta["esquemadb"],$meta["tabela"],"geometry","!=");
786   - //define as colunas que serao mostradas no sql
787   - $vis = $meta["colunasvisiveis"];
788   - $colunaSerial = $this->listaTipoRegiaoSerial($codigo_tipo_regiao);
789   - if($vis != ""){
790   - $vis = str_replace(";",",",$vis);
791   - $vis = str_replace(",,",",",$vis);
792   - $vis = explode(",",$vis);
793   - $itens = $vis;//array
794   - $vis[] = $meta["identificador"];
795   - if(!empty($colunaSerial)){
796   - $vis[] = $colunaSerial;
797   - }
798   - $vis = array_unique($vis);
799   - $visiveis = array();
800   - //verifica se as colunas existem mesmo
801   - foreach($vis as $v){
802   - if(in_array($v,$colunastabela)){
803   - $visiveis[] = $v;
804   - }
805   - }
806   - $vis = implode(",",$visiveis);
807   - //apelidos
808   - $apelidos = $meta["apelidos"];
809   - if($apelidos == ""){
810   - $apelidos = "Nome";
811   - }
812   - $apelidos = str_replace(";",",",$apelidos);
813   - $apelidos = str_replace(",,",",",$apelidos);
814   - $apelidos = mb_convert_encoding($apelidos,"ISO-8859-1",mb_detect_encoding($apelidos));
815   - $apelidos = explode(",",$apelidos);
816   - if(!empty($colunaSerial)){
817   - $apelidos[] = $colunaSerial." (serial)";
818   - }
819   - $apelidos = array_unique($apelidos);
820   - }
821   - else{
822   - $itens = array();
823   - $apelidos = array();
824   - if(!empty($colunaSerial)){
825   - $colunastabela[] = $colunaSerial;
826   - $colunastabela = array_unique($colunastabela);
827   - }
828   - $vis = implode(",",$colunastabela);
829   - }
830   - $sqlf = $colunageo." from (select st_setsrid(".$colunageo.",".$srid.") as $colunageo,$vis from ".$meta["esquemadb"].".".$meta["tabela"]." /*FW*//*FW*/) as foo using unique ".$meta["identificador"]." using srid=".$srid;
831   - $sqlf = str_replace(",,",",",$sqlf);
832   - $outlinecolor = str_replace(","," ",$outlinecolor);
833   - $dados[] = "MAP";
834   - $dados[] = 'SYMBOLSET "'.$this->locaplic.'/symbols/simbolosv6.sym"';
835   - $dados[] = 'FONTSET "'.$this->locaplic.'/symbols/fontes.txt"';
836   - $dados[] = "LAYER";
837   - $dados[] = ' NAME "'.$this->nomecache.'"';
838   - $dados[] = " TYPE $tipolayer";
839   - $dados[] = ' DATA "'.$sqlf.'"';
840   - $dados[] = ' CONNECTION "'.$conexao.'"';
841   - $dados[] = ' CONNECTIONTYPE POSTGIS';
842   - $dados[] = ' TEMPLATE "none.htm"';
843   - $dados[] = ' STATUS OFF';
844   - $dados[] = ' METADATA';
845   - $dados[] = ' TEMA "'.$titulolayer.'"';
846   - $dados[] = ' CLASSE "SIM"';
847   - $dados[] = ' METAESTAT "SIM"';
848   - $dados[] = ' METAESTAT_CODIGO_TIPO_REGIAO "'.$codigo_tipo_regiao.'"';
849   - if(!empty($colunaSerial)){
850   - $dados[] = ' EDITAVEL "SIM"';
851   - $dados[] = ' COLUNAIDUNICO "'.$colunaSerial.'"';
852   - $dados[] = ' TABELAEDITAVEL "'.$meta["tabela"].'"';
853   - $dados[] = ' ESQUEMATABELAEDITAVEL "'.$meta["esquemadb"].'"';
854   - $dados[] = ' COLUNAGEOMETRIA "'.$colunageo.'"';
855   - }
856   - $dados[] = ' TIP "'.$meta["colunanomeregiao"].'"';
857   - if(count($itens) == count($apelidos)){
858   - $dados[] = ' ITENS "'.implode(",",$itens).'"';
859   - $dados[] = ' ITENSDESC "'.implode(",",$apelidos).'"';
860   - }
  777 + $meta = $this->listaTipoRegiao($codigo_tipo_regiao);
  778 + $titulolayer = $meta["nome_tipo_regiao"];
  779 + $titulolayer = mb_convert_encoding($titulolayer,"ISO-8859-1",mb_detect_encoding($titulolayer));
  780 + $conexao = $this->listaConexao($meta["codigo_estat_conexao"],true);
  781 + $conexao = "user=".$conexao["usuario"]." password=".$conexao["senha"]." dbname=".$conexao["bancodedados"]." host=".$conexao["host"]." port=".$conexao["porta"]."";
  782 + $colunageo = $meta["colunageo"];
  783 + $srid = $meta["srid"];
  784 + //pega as colunas menos as do tipo geometry
  785 + $colunastabela = $this->colunasTabela($meta["codigo_estat_conexao"],$meta["esquemadb"],$meta["tabela"],"geometry","!=");
  786 + //define as colunas que serao mostradas no sql
  787 + $vis = $meta["colunasvisiveis"];
  788 + $colunaSerial = $this->listaTipoRegiaoSerial($codigo_tipo_regiao);
  789 + if($vis != ""){
  790 + $vis = str_replace(";",",",$vis);
  791 + $vis = str_replace(",,",",",$vis);
  792 + $vis = explode(",",$vis);
  793 + $itens = $vis;//array
  794 + $vis[] = $meta["identificador"];
  795 + if(!empty($colunaSerial)){
  796 + $vis[] = $colunaSerial;
  797 + }
  798 + $vis = array_unique($vis);
  799 + $visiveis = array();
  800 + //verifica se as colunas existem mesmo
  801 + foreach($vis as $v){
  802 + if(in_array($v,$colunastabela)){
  803 + $visiveis[] = $v;
  804 + }
  805 + }
  806 + $vis = implode(",",$visiveis);
  807 + //apelidos
  808 + $apelidos = $meta["apelidos"];
  809 + if($apelidos == ""){
  810 + $apelidos = "Nome";
  811 + }
  812 + $apelidos = str_replace(";",",",$apelidos);
  813 + $apelidos = str_replace(",,",",",$apelidos);
  814 + $apelidos = mb_convert_encoding($apelidos,"ISO-8859-1",mb_detect_encoding($apelidos));
  815 + $apelidos = explode(",",$apelidos);
  816 + if(!empty($colunaSerial)){
  817 + $apelidos[] = $colunaSerial." (serial)";
  818 + }
  819 + $apelidos = array_unique($apelidos);
  820 + }
  821 + else{
  822 + $itens = array();
  823 + $apelidos = array();
  824 + if(!empty($colunaSerial)){
  825 + $colunastabela[] = $colunaSerial;
  826 + $colunastabela = array_unique($colunastabela);
  827 + }
  828 + $vis = implode(",",$colunastabela);
  829 + }
  830 + $sqlf = $colunageo." from (select st_setsrid(".$colunageo.",".$srid.") as $colunageo,$vis from ".$meta["esquemadb"].".".$meta["tabela"]." /*FW*//*FW*/) as foo using unique ".$meta["identificador"]." using srid=".$srid;
  831 + $sqlf = str_replace(",,",",",$sqlf);
  832 + $outlinecolor = str_replace(","," ",$outlinecolor);
  833 + $dados[] = "MAP";
  834 + $dados[] = 'SYMBOLSET "'.$this->locaplic.'/symbols/simbolosv6.sym"';
  835 + $dados[] = 'FONTSET "'.$this->locaplic.'/symbols/fontes.txt"';
  836 + $dados[] = "LAYER";
  837 + $dados[] = ' NAME "'.$this->nomecache.'"';
  838 + $dados[] = " TYPE $tipolayer";
  839 + $dados[] = ' DATA "'.$sqlf.'"';
  840 + $dados[] = ' CONNECTION "'.$conexao.'"';
  841 + $dados[] = ' CONNECTIONTYPE POSTGIS';
  842 + $dados[] = ' TEMPLATE "none.htm"';
  843 + $dados[] = ' STATUS OFF';
  844 + $dados[] = ' METADATA';
  845 + $dados[] = ' TEMA "'.$titulolayer.'"';
  846 + $dados[] = ' CLASSE "SIM"';
  847 + $dados[] = ' METAESTAT "SIM"';
  848 + $dados[] = ' METAESTAT_CODIGO_TIPO_REGIAO "'.$codigo_tipo_regiao.'"';
  849 + if(!empty($colunaSerial)){
  850 + $dados[] = ' EDITAVEL "SIM"';
  851 + $dados[] = ' COLUNAIDUNICO "'.$colunaSerial.'"';
  852 + $dados[] = ' TABELAEDITAVEL "'.$meta["tabela"].'"';
  853 + $dados[] = ' ESQUEMATABELAEDITAVEL "'.$meta["esquemadb"].'"';
  854 + $dados[] = ' COLUNAGEOMETRIA "'.$colunageo.'"';
  855 + }
  856 + $dados[] = ' TIP "'.$meta["colunanomeregiao"].'"';
  857 + if(count($itens) == count($apelidos)){
  858 + $dados[] = ' ITENS "'.implode(",",$itens).'"';
  859 + $dados[] = ' ITENSDESC "'.implode(",",$apelidos).'"';
  860 + }
861 861  
862   - $dados[] = ' END';
863   - $dados[] = ' CLASS';
864   - $dados[] = ' NAME ""';
865   - $dados[] = ' STYLE';
866   - $dados[] = ' OUTLINECOLOR '.$outlinecolor;
  862 + $dados[] = ' END';
  863 + $dados[] = ' CLASS';
  864 + $dados[] = ' NAME ""';
  865 + $dados[] = ' STYLE';
  866 + $dados[] = ' OUTLINECOLOR '.$outlinecolor;
867 867  
868   - $dados[] = ' WIDTH '.$width;
869   - if(strtolower($tipolayer) == "point"){
870   - $dados[] = ' SYMBOL "ponto"';
871   - $dados[] = ' SIZE 5';
872   - $dados[] = ' COLOR 0 0 0 ';
873   - }
874   - else{
875   - $dados[] = ' COLOR -1 -1 -1';
876   - }
877   - $dados[] = ' END';
878   - //$dados[] = ' STYLE';
879   - //$dados[] = ' OUTLINECOLOR -1 -1 -1';
880   - //$dados[] = ' COLOR 255 255 255';
881   - //$dados[] = ' OPACITY 20';
882   - //$dados[] = ' END';
883   - $dados[] = ' END';
884   - $dados[] = "END";
885   - //toponimia
886   - if($nomes == "sim"){
887   - $dados[] = "LAYER";
888   - $dados[] = ' NAME "'.$this->nomecache.'_anno"';
889   - $dados[] = " TYPE ANNOTATION";
890   - $dados[] = ' DATA "'.$sqlf.'"';
891   - $dados[] = ' CONNECTION "'.$conexao.'"';
892   - $dados[] = ' CONNECTIONTYPE POSTGIS';
893   - $dados[] = ' TEMPLATE "none.htm"';
894   - $dados[] = ' STATUS OFF';
895   - $dados[] = ' LABELITEM "'.$meta["colunanomeregiao"].'"';
896   - $dados[] = ' METADATA';
897   - $dados[] = ' TEMA "'.$titulolayer.' (nomes)"';
898   - $dados[] = ' CLASSE "SIM"';
899   - $dados[] = ' METAESTAT "SIM"';
900   - $dados[] = ' METAESTAT_CODIGO_TIPO_REGIAO "'.$codigo_tipo_regiao.'"';
901   - $dados[] = ' END';
902   - $dados[] = ' CLASS';
903   - $dados[] = ' NAME ""';
904   - $dados[] = ' LABEL';
905   - $dados[] = ' FONT "arial"';
906   - $dados[] = ' SIZE 10';
907   - $dados[] = ' COLOR 0 0 0';
908   - $dados[] = ' MINDISTANCE 0';
909   - $dados[] = ' MINFEATURESIZE 0';
910   - $dados[] = ' OFFSET 0 0';
911   - $dados[] = ' OUTLINECOLOR 255 255 255';
912   - $dados[] = ' PARTIALS FALSE';
913   - $dados[] = ' POSITION AUTO';
914   - $dados[] = ' SHADOWSIZE 1 1';
915   - $dados[] = ' TYPE TRUETYPE';
916   - $dados[] = ' END';
917   - $dados[] = ' END';
918   - $dados[] = "END";
919   - }
920   - $dados[] = "END";
921   - $fp = fopen($arq,"w");
922   - foreach ($dados as $dado){
923   - fwrite($fp,$dado."\n");
924   - }
925   - }
926   - return array("mapfile"=>$arq,"layer"=>$this->nomecache,"titulolayer"=>$titulolayer,"codigo_tipo_regiao"=>$codigo_tipo_regiao);
927   - }
928   - /**
929   - * Complementa um mapfile resumido inserindo seus layers em um mapfile completo, contendo todos os elementos necessarios para uso
930   - * Usado na geracao de WMS e outros servicos
931   - * @param mapfile resumido
932   - * @return string
933   - */
934   - function mapfileCompleto($mapfile){
935   - $f = $this->base;
936   - if($f == ""){
937   - include_once($this->locaplic."/classesphp/funcoes_gerais.php");
938   - $versao = versao();
939   - $versao = $versao["principal"];
940   - $f = "";
941   - if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')){
942   - $f = $this->locaplic."/aplicmap/geral1windowsv".$versao.".map";
943   - }
944   - else{
945   - if($f == "" && file_exists('/var/www/i3geo/aplicmap/geral1debianv'.$versao.'.map')){
946   - $f = "/var/www/i3geo/aplicmap/geral1debianv".$versao.".map";
947   - }
948   - if($f == "" && file_exists('/var/www/html/i3geo/aplicmap/geral1fedorav'.$versao.'.map')){
949   - $f = "/var/www/html/i3geo/aplicmap/geral1fedorav".$versao.".map";
950   - }
951   - if($f == "" && file_exists('/opt/www/html/i3geo/aplicmap/geral1fedorav'.$versao.'.map')){
952   - $f = "/opt/www/html/i3geo/aplicmap/geral1v".$versao.".map";
953   - }
954   - if($f == "") {
955   - $f = $this->locaplic."/aplicmap/geral1v".$versao.".map";
956   - }
957   - }
958   - }
959   - $mapa = ms_newMapObj($f);
960   - $n = $mapa->numlayers;
961   - for($i=0;$i<$n;$i++){
962   - $l = $mapa->getlayer($i);
963   - $l->set("status",MS_DELETE);
964   - }
965   - $mapatemp = ms_newMapObj($mapfile);
966   - $l = $mapatemp->getlayer(0);
  868 + $dados[] = ' WIDTH '.$width;
  869 + if(strtolower($tipolayer) == "point"){
  870 + $dados[] = ' SYMBOL "ponto"';
  871 + $dados[] = ' SIZE 5';
  872 + $dados[] = ' COLOR 0 0 0 ';
  873 + }
  874 + else{
  875 + $dados[] = ' COLOR -1 -1 -1';
  876 + }
  877 + $dados[] = ' END';
  878 + //$dados[] = ' STYLE';
  879 + //$dados[] = ' OUTLINECOLOR -1 -1 -1';
  880 + //$dados[] = ' COLOR 255 255 255';
  881 + //$dados[] = ' OPACITY 20';
  882 + //$dados[] = ' END';
  883 + $dados[] = ' END';
  884 + $dados[] = "END";
  885 + //toponimia
  886 + if($nomes == "sim"){
  887 + $dados[] = "LAYER";
  888 + $dados[] = ' NAME "'.$this->nomecache.'_anno"';
  889 + $dados[] = " TYPE ANNOTATION";
  890 + $dados[] = ' DATA "'.$sqlf.'"';
  891 + $dados[] = ' CONNECTION "'.$conexao.'"';
  892 + $dados[] = ' CONNECTIONTYPE POSTGIS';
  893 + $dados[] = ' TEMPLATE "none.htm"';
  894 + $dados[] = ' STATUS OFF';
  895 + $dados[] = ' LABELITEM "'.$meta["colunanomeregiao"].'"';
  896 + $dados[] = ' METADATA';
  897 + $dados[] = ' TEMA "'.$titulolayer.' (nomes)"';
  898 + $dados[] = ' CLASSE "SIM"';
  899 + $dados[] = ' METAESTAT "SIM"';
  900 + $dados[] = ' METAESTAT_CODIGO_TIPO_REGIAO "'.$codigo_tipo_regiao.'"';
  901 + $dados[] = ' END';
  902 + $dados[] = ' CLASS';
  903 + $dados[] = ' NAME ""';
  904 + $dados[] = ' LABEL';
  905 + $dados[] = ' FONT "arial"';
  906 + $dados[] = ' SIZE 10';
  907 + $dados[] = ' COLOR 0 0 0';
  908 + $dados[] = ' MINDISTANCE 0';
  909 + $dados[] = ' MINFEATURESIZE 0';
  910 + $dados[] = ' OFFSET 0 0';
  911 + $dados[] = ' OUTLINECOLOR 255 255 255';
  912 + $dados[] = ' PARTIALS FALSE';
  913 + $dados[] = ' POSITION AUTO';
  914 + $dados[] = ' SHADOWSIZE 1 1';
  915 + $dados[] = ' TYPE TRUETYPE';
  916 + $dados[] = ' END';
  917 + $dados[] = ' END';
  918 + $dados[] = "END";
  919 + }
  920 + $dados[] = "END";
  921 + $fp = fopen($arq,"w");
  922 + foreach ($dados as $dado){
  923 + fwrite($fp,$dado."\n");
  924 + }
  925 + }
  926 + return array("mapfile"=>$arq,"layer"=>$this->nomecache,"titulolayer"=>$titulolayer,"codigo_tipo_regiao"=>$codigo_tipo_regiao);
  927 + }
  928 + /**
  929 + * Complementa um mapfile resumido inserindo seus layers em um mapfile completo, contendo todos os elementos necessarios para uso
  930 + * Usado na geracao de WMS e outros servicos
  931 + * @param mapfile resumido
  932 + * @return string
  933 + */
  934 + function mapfileCompleto($mapfile){
  935 + $f = $this->base;
  936 + if($f == ""){
  937 + include_once($this->locaplic."/classesphp/funcoes_gerais.php");
  938 + $versao = versao();
  939 + $versao = $versao["principal"];
  940 + $f = "";
  941 + if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')){
  942 + $f = $this->locaplic."/aplicmap/geral1windowsv".$versao.".map";
  943 + }
  944 + else{
  945 + if($f == "" && file_exists('/var/www/i3geo/aplicmap/geral1debianv'.$versao.'.map')){
  946 + $f = "/var/www/i3geo/aplicmap/geral1debianv".$versao.".map";
  947 + }
  948 + if($f == "" && file_exists('/var/www/html/i3geo/aplicmap/geral1fedorav'.$versao.'.map')){
  949 + $f = "/var/www/html/i3geo/aplicmap/geral1fedorav".$versao.".map";
  950 + }
  951 + if($f == "" && file_exists('/opt/www/html/i3geo/aplicmap/geral1fedorav'.$versao.'.map')){
  952 + $f = "/opt/www/html/i3geo/aplicmap/geral1v".$versao.".map";
  953 + }
  954 + if($f == "") {
  955 + $f = $this->locaplic."/aplicmap/geral1v".$versao.".map";
  956 + }
  957 + }
  958 + }
  959 + $mapa = ms_newMapObj($f);
  960 + $n = $mapa->numlayers;
  961 + for($i=0;$i<$n;$i++){
  962 + $l = $mapa->getlayer($i);
  963 + $l->set("status",MS_DELETE);
  964 + }
  965 + $mapatemp = ms_newMapObj($mapfile);
  966 + $l = $mapatemp->getlayer(0);
967 967  
968   - $l->set("status",MS_DEFAULT);
969   - $novonome = str_replace(".map","completo.map",$mapfile);
970   - //necessario para o kml
971   - $mapa->setmetadata("ows_enable_request","*");
972   - $listaepsg = "EPSG:4618 EPSG:4291 EPSG:4326 EPSG:22521 EPSG:22522 EPSG:22523 EPSG:22524 EPSG:22525 EPSG:29101 EPSG:29119 EPSG:29120 EPSG:29121 EPSG:29122 EPSG:29177 EPSG:29178 EPSG:29179 EPSG:29180 EPSG:29181 EPSG:29182 EPSG:29183 EPSG:29184 EPSG:29185";
973   - $l->setmetadata("ows_srs",$listaepsg);
974   - $temp = ms_newLayerObj($mapa,$l);
975   - $mapa->save($novonome);
976   - return $novonome;
977   - }
978   - /**
979   - * Obtem os dados de uma medida de variavel
980   - * @param id da medida
981   - * @param filtro que sera concatenado ao sql
982   - * @param 0|1 mostra ou nao todas as colunas da tabela com os dados
983   - * @param coluna de agrupamento
984   - * @param limite do numero de registros
985   - * @param le os dados diretamente da tabela sem nenhum tipo de agrupamento, seja por data ou outro parametro
986   - * @return string
987   - */
988   - function dadosMedidaVariavel($id_medida_variavel,$filtro="",$todasascolunas = 0,$agruparpor = "",$limite="",$direto=false){
989   - set_time_limit(0);
990   - $sql = $this->sqlMedidaVariavel($id_medida_variavel,$todasascolunas,$agruparpor,"polygon","",false,$filtro,$direto);
991   - $sqlf = $sql["sqlmapserver"];
992   - //remove marcadores geo
993   - $sqlf = explode("/*SE*/",$sqlf);
994   - $sqlf = explode("/*SG*/",$sqlf[1]);
995   - $sqlf = $sqlf[0]." ".$sqlf[2];
996   - if($limite != ""){
997   - $sqlf .= " limit ".$limite;
998   - }
999   - $sqlf = str_replace(", FROM"," FROM",$sqlf);
1000   - //echo $sqlf;exit;
1001   - $metaVariavel = $this->listaMedidaVariavel("",$id_medida_variavel);
1002   - if(!empty($metaVariavel["codigo_estat_conexao"])){
1003   - $c = $this->listaConexao($metaVariavel["codigo_estat_conexao"],true);
1004   - $dbhold = $this->dbh;
1005   - $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
1006   - $this->dbh = $dbh;
1007   - $res = $this->execSQL($sqlf);
1008   - $this->dbh = $dbhold;
1009   - return $res;
1010   - }
1011   - return false;
1012   - }
1013   - /**
1014   - * Lista as ocorrencias de valores em uma coluna de uma medida de variavel
1015   - * @param id da medida de variavel
1016   - * @param coluna
1017   - * @return array
1018   - */
1019   - function valorUnicoMedidaVariavel($id_medida_variavel,$coluna){
1020   - $sqlf = $this->sqlMedidaVariavel($id_medida_variavel,0,$coluna);
1021   - $sqlf = $sqlf["sqlagrupamento"];
1022   - $metaVariavel = $this->listaMedidaVariavel("",$id_medida_variavel);
1023   - if(!empty($metaVariavel["codigo_estat_conexao"])){
1024   - $c = $this->listaConexao($metaVariavel["codigo_estat_conexao"],true);
1025   - $dbhold = $this->dbh;
1026   - $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
1027   - $this->dbh = $dbh;
1028   - $res = $this->execSQL($sqlf);
1029   - $this->dbh = $dbhold;
1030   - return $res;
1031   - }
1032   - return false;
1033   - }
1034   - /**
1035   - * Sumario estatistico de uma medida de variavel
1036   - * @param id da medida
1037   - * @param filtro a ser concatenado ao sql
1038   - * @param coluna de agrupamento
1039   - * @param limite numero maximo de registros que serao lidos do banco
1040   - * @param le os dados diretamente da tabela sem nenhum tipo de agrupamento, seja por data ou outro parametro
1041   - * @return array("colunavalor"=>,"soma"=>,"media"=>,"menor"=>,"maior"=>,"quantidade"=>,"histograma"=>,"grupos"=>,"unidademedida"=>,"quartis"=>)
1042   - */
1043   - function sumarioMedidaVariavel($id_medida_variavel,$filtro="",$agruparpor="",$limite="",$direto=false){
1044   - if(!empty($agruparpor)){
1045   - $dados = $this->dadosMedidaVariavel($id_medida_variavel,$filtro,1,"",$limite,$direto);
1046   - }
1047   - else{
1048   - $dados = $this->dadosMedidaVariavel($id_medida_variavel,$filtro,0,"",$limite,$direto);
1049   - }
1050   - if($dados){
1051   - $metaVariavel = $this->listaMedidaVariavel("",$id_medida_variavel);
1052   - $un = $this->listaUnidadeMedida($metaVariavel["codigo_unidade_medida"]);
1053   - $agrupamento = "";
1054   - $colunavalor = $metaVariavel["colunavalor"];
1055   - foreach($dados as $d){
1056   - if($d[$colunavalor]){
1057   - $valores[] = $d[$colunavalor];
1058   - }
1059   - }
1060   - if(!empty($agruparpor)){
1061   - $agrupamento = array();
1062   - foreach($dados as $d){
1063   - $g = $d[$agruparpor];
1064   - //var_dump($d);exit;
1065   - if(!empty($agrupamento[$g])){
1066   - $agrupamento[$g] += $d[$colunavalor];
1067   - }
1068   - else{
1069   - $agrupamento[$g] = $d[$colunavalor];
1070   - }
1071   - }
1072   - natsort($agrupamento);
1073   - }
1074   - $soma = "";
1075   - $media = "";
1076   - $min = "";
1077   - $max = "";
1078   - $quantidade = count($valores);
1079   - $sturges = 1 + (3.322 * (log10($quantidade)));
1080   - $quartis = array();
1081   - if($un["permitesoma"] == "1"){
1082   - $soma = array_sum($valores);
1083   - }
1084   - if($un["permitemedia"] == "1"){
1085   - $media = $soma / $quantidade;
1086   - }
1087   - if($un["permitesoma"] == "1" || $un["permitemedia"] == "1"){
1088   - sort($valores);
1089   - //var_dump($valores);exit;
1090   - $min = $valores[0];
1091   - $max = $valores[$quantidade - 1];
1092   - include_once(dirname(__FILE__)."/classesphp/classe_estatistica.php");
1093   - $calc = new estatistica();
1094   - $calc->calcula($valores);
1095   - $v = $calc->resultado;
1096   - //expressao para o mapfile
1097   - $expressao[] = "([".$colunavalor."]<=".($v["quartil1"]).")";
1098   - $expressao[] = "(([".$colunavalor."]>".($v["quartil1"]).")and([".$colunavalor."]<=".($v["quartil2"])."))";
1099   - if($v["quartil3"] != 0){
1100   - $expressao[] = "(([".$colunavalor."]>".($v["quartil2"]).")and([".$colunavalor."]<=".($v["quartil3"])."))";
1101   - $expressao[] = "([".$colunavalor."]>".($v["quartil3"]).")";
1102   - }
1103   - $nomes[] = "<= ".($v["quartil1"]);
1104   - $nomes[] = "> ".($v["quartil1"])." e <= ".($v["quartil2"]);
1105   - if($v["quartil3"] != 0){
1106   - $nomes[] = "> ".($v["quartil2"])." e <= ".($v["quartil3"]);
1107   - $nomes[] = "> ".($v["quartil3"]);
1108   - }
1109   - $quartis = array(
1110   - "cortes"=>array(
1111   - "q1"=>$v['quartil1'],
1112   - "q2"=>$v['quartil2'],
1113   - "q3"=>$v['quartil3']
1114   - ),
1115   - "expressoes"=>$expressao,
1116   - "nomes"=>$nomes
1117   - );
1118   - }
1119   - $histograma = array_count_values($valores);
1120   - //echo "<pre>".var_dump($quartis);exit;
1121   - return array(
1122   - "colunavalor"=>$colunavalor,
1123   - "soma"=>$soma,
1124   - "media"=>$media,
1125   - "menor"=>$min,
1126   - "maior"=>$max,
1127   - "quantidade"=>$quantidade,
1128   - "histograma"=>$histograma,
1129   - "grupos"=>$agrupamento,
1130   - "unidademedida"=>$un,
1131   - "quartis"=>$quartis,
1132   - "sturges"=>$sturges
1133   - );
1134   - }
1135   - return false;
1136   - }
  968 + $l->set("status",MS_DEFAULT);
  969 + $novonome = str_replace(".map","completo.map",$mapfile);
  970 + //necessario para o kml
  971 + $mapa->setmetadata("ows_enable_request","*");
  972 + $listaepsg = "EPSG:4618 EPSG:4291 EPSG:4326 EPSG:22521 EPSG:22522 EPSG:22523 EPSG:22524 EPSG:22525 EPSG:29101 EPSG:29119 EPSG:29120 EPSG:29121 EPSG:29122 EPSG:29177 EPSG:29178 EPSG:29179 EPSG:29180 EPSG:29181 EPSG:29182 EPSG:29183 EPSG:29184 EPSG:29185";
  973 + $l->setmetadata("ows_srs",$listaepsg);
  974 + $temp = ms_newLayerObj($mapa,$l);
  975 + $mapa->save($novonome);
  976 + return $novonome;
  977 + }
  978 + /**
  979 + * Obtem os dados de uma medida de variavel
  980 + * @param id da medida
  981 + * @param filtro que sera concatenado ao sql
  982 + * @param 0|1 mostra ou nao todas as colunas da tabela com os dados
  983 + * @param coluna de agrupamento
  984 + * @param limite do numero de registros
  985 + * @param le os dados diretamente da tabela sem nenhum tipo de agrupamento, seja por data ou outro parametro
  986 + * @return string
  987 + */
  988 + function dadosMedidaVariavel($id_medida_variavel,$filtro="",$todasascolunas = 0,$agruparpor = "",$limite="",$direto=false){
  989 + set_time_limit(0);
  990 + $sql = $this->sqlMedidaVariavel($id_medida_variavel,$todasascolunas,$agruparpor,"polygon","",false,$filtro,$direto);
  991 + $sqlf = $sql["sqlmapserver"];
  992 + //remove marcadores geo
  993 + $sqlf = explode("/*SE*/",$sqlf);
  994 + $sqlf = explode("/*SG*/",$sqlf[1]);
  995 + $sqlf = $sqlf[0]." ".$sqlf[2];
  996 + if($limite != ""){
  997 + $sqlf .= " limit ".$limite;
  998 + }
  999 + $sqlf = str_replace(", FROM"," FROM",$sqlf);
  1000 + //echo $sqlf;exit;
  1001 + $metaVariavel = $this->listaMedidaVariavel("",$id_medida_variavel);
  1002 + if(!empty($metaVariavel["codigo_estat_conexao"])){
  1003 + $c = $this->listaConexao($metaVariavel["codigo_estat_conexao"],true);
  1004 + $dbhold = $this->dbh;
  1005 + $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
  1006 + $this->dbh = $dbh;
  1007 + $res = $this->execSQL($sqlf);
  1008 + $this->dbh = $dbhold;
  1009 + return $res;
  1010 + }
  1011 + return false;
  1012 + }
  1013 + /**
  1014 + * Lista as ocorrencias de valores em uma coluna de uma medida de variavel
  1015 + * @param id da medida de variavel
  1016 + * @param coluna
  1017 + * @return array
  1018 + */
  1019 + function valorUnicoMedidaVariavel($id_medida_variavel,$coluna){
  1020 + $sqlf = $this->sqlMedidaVariavel($id_medida_variavel,0,$coluna);
  1021 + $sqlf = $sqlf["sqlagrupamento"];
  1022 + $metaVariavel = $this->listaMedidaVariavel("",$id_medida_variavel);
  1023 + if(!empty($metaVariavel["codigo_estat_conexao"])){
  1024 + $c = $this->listaConexao($metaVariavel["codigo_estat_conexao"],true);
  1025 + $dbhold = $this->dbh;
  1026 + $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
  1027 + $this->dbh = $dbh;
  1028 + $res = $this->execSQL($sqlf);
  1029 + $this->dbh = $dbhold;
  1030 + return $res;
  1031 + }
  1032 + return false;
  1033 + }
  1034 + /**
  1035 + * Sumario estatistico de uma medida de variavel
  1036 + * @param id da medida
  1037 + * @param filtro a ser concatenado ao sql
  1038 + * @param coluna de agrupamento
  1039 + * @param limite numero maximo de registros que serao lidos do banco
  1040 + * @param le os dados diretamente da tabela sem nenhum tipo de agrupamento, seja por data ou outro parametro
  1041 + * @return array("colunavalor"=>,"soma"=>,"media"=>,"menor"=>,"maior"=>,"quantidade"=>,"histograma"=>,"grupos"=>,"unidademedida"=>,"quartis"=>)
  1042 + */
  1043 + function sumarioMedidaVariavel($id_medida_variavel,$filtro="",$agruparpor="",$limite="",$direto=false){
  1044 + if(!empty($agruparpor)){
  1045 + $dados = $this->dadosMedidaVariavel($id_medida_variavel,$filtro,1,"",$limite,$direto);
  1046 + }
  1047 + else{
  1048 + $dados = $this->dadosMedidaVariavel($id_medida_variavel,$filtro,0,"",$limite,$direto);
  1049 + }
  1050 + if($dados){
  1051 + $metaVariavel = $this->listaMedidaVariavel("",$id_medida_variavel);
  1052 + $un = $this->listaUnidadeMedida($metaVariavel["codigo_unidade_medida"]);
  1053 + $agrupamento = "";
  1054 + $colunavalor = $metaVariavel["colunavalor"];
  1055 + foreach($dados as $d){
  1056 + if($d[$colunavalor]){
  1057 + $valores[] = $d[$colunavalor];
  1058 + }
  1059 + }
  1060 + if(!empty($agruparpor)){
  1061 + $agrupamento = array();
  1062 + foreach($dados as $d){
  1063 + $g = $d[$agruparpor];
  1064 + //var_dump($d);exit;
  1065 + if(!empty($agrupamento[$g])){
  1066 + $agrupamento[$g] += $d[$colunavalor];
  1067 + }
  1068 + else{
  1069 + $agrupamento[$g] = $d[$colunavalor];
  1070 + }
  1071 + }
  1072 + natsort($agrupamento);
  1073 + }
  1074 + $soma = "";
  1075 + $media = "";
  1076 + $min = "";
  1077 + $max = "";
  1078 + $quantidade = count($valores);
  1079 + $sturges = 1 + (3.322 * (log10($quantidade)));
  1080 + $quartis = array();
  1081 + if($un["permitesoma"] == "1"){
  1082 + $soma = array_sum($valores);
  1083 + }
  1084 + if($un["permitemedia"] == "1"){
  1085 + $media = $soma / $quantidade;
  1086 + }
  1087 + if($un["permitesoma"] == "1" || $un["permitemedia"] == "1"){
  1088 + sort($valores);
  1089 + //var_dump($valores);exit;
  1090 + $min = $valores[0];
  1091 + $max = $valores[$quantidade - 1];
  1092 + include_once(dirname(__FILE__)."/classesphp/classe_estatistica.php");
  1093 + $calc = new estatistica();
  1094 + $calc->calcula($valores);
  1095 + $v = $calc->resultado;
  1096 + //expressao para o mapfile
  1097 + $expressao[] = "([".$colunavalor."]<=".($v["quartil1"]).")";
  1098 + $expressao[] = "(([".$colunavalor."]>".($v["quartil1"]).")and([".$colunavalor."]<=".($v["quartil2"])."))";
  1099 + if($v["quartil3"] != 0){
  1100 + $expressao[] = "(([".$colunavalor."]>".($v["quartil2"]).")and([".$colunavalor."]<=".($v["quartil3"])."))";
  1101 + $expressao[] = "([".$colunavalor."]>".($v["quartil3"]).")";
  1102 + }
  1103 + $nomes[] = "<= ".($v["quartil1"]);
  1104 + $nomes[] = "> ".($v["quartil1"])." e <= ".($v["quartil2"]);
  1105 + if($v["quartil3"] != 0){
  1106 + $nomes[] = "> ".($v["quartil2"])." e <= ".($v["quartil3"]);
  1107 + $nomes[] = "> ".($v["quartil3"]);
  1108 + }
  1109 + $quartis = array(
  1110 + "cortes"=>array(
  1111 + "q1"=>$v['quartil1'],
  1112 + "q2"=>$v['quartil2'],
  1113 + "q3"=>$v['quartil3']
  1114 + ),
  1115 + "expressoes"=>$expressao,
  1116 + "nomes"=>$nomes
  1117 + );
  1118 + }
  1119 + $histograma = array_count_values($valores);
  1120 + //echo "<pre>".var_dump($quartis);exit;
  1121 + return array(
  1122 + "colunavalor"=>$colunavalor,
  1123 + "soma"=>$soma,
  1124 + "media"=>$media,
  1125 + "menor"=>$min,
  1126 + "maior"=>$max,
  1127 + "quantidade"=>$quantidade,
  1128 + "histograma"=>$histograma,
  1129 + "grupos"=>$agrupamento,
  1130 + "unidademedida"=>$un,
  1131 + "quartis"=>$quartis,
  1132 + "sturges"=>$sturges
  1133 + );
  1134 + }
  1135 + return false;
  1136 + }
1137 1137  
1138 1138  
1139   - /**
1140   - * Lista os dados de um ou de todos os mapas cadastrados
1141   - * @param id do mapa
1142   - */
1143   - function listaMapas($id_mapa=""){
1144   - $sql = "select * from ".$this->esquemaadmin."i3geoestat_mapa ";
1145   - if($id_mapa != ""){
1146   - $sql .= "WHERE id_mapa = $id_mapa ";
1147   - }
1148   - $sql .= "ORDER BY titulo";
1149   - return $this->execSQL($sql,$id_mapa);
1150   - }
1151   - /**
1152   - * Lista os dados de um ou de todos os mapas grupos de um mapa
1153   - * @param id do mapa
1154   - * @param id do grupo
1155   - */
1156   - function listaGruposMapa($id_mapa,$id_mapa_grupo){
1157   - if(!empty($id_mapa)){
1158   - $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_mapa_grupo WHERE id_mapa = $id_mapa";
1159   - }
1160   - if(!empty($id_mapa_grupo)){
1161   - $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_mapa_grupo WHERE id_mapa_grupo = $id_mapa_grupo";
1162   - }
1163   - $sql .= " ORDER BY titulo";
1164   - return $this->execSQL($sql,$id_mapa_grupo);
1165   - }
1166   - /**
1167   - * Lista os dados de um ou de todos os temas de um grupo de um mapa
1168   - * @param id do mapa
1169   - * @param id do grupo
1170   - * @param id do tema
1171   - */
1172   - function listaTemasMapa($id_mapa_grupo,$id_mapa_tema){
1173   - if(!empty($id_mapa_grupo)){
1174   - $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_mapa_tema WHERE id_mapa_grupo = $id_mapa_grupo";
1175   - }
1176   - if(!empty($id_mapa_tema)){
1177   - $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_mapa_tema WHERE id_mapa_tema = $id_mapa_tema";
1178   - }
1179   - $sql .= " ORDER BY titulo";
1180   - return $this->execSQL($sql,$id_mapa_tema);
1181   - }
1182   - /**
1183   - * Lista os dados de uma ou todas as unidades de medida cadastradas
1184   - * @param codigo da unidade
1185   - */
1186   - function listaUnidadeMedida($codigo_unidade_medida=""){
1187   - $sql = "select * from ".$this->esquemaadmin."i3geoestat_unidade_medida ";
1188   - if($codigo_unidade_medida != ""){
1189   - $sql .= "WHERE codigo_unidade_medida = $codigo_unidade_medida ";
1190   - }
1191   - $sql .= "ORDER BY nome";
1192   - return $this->execSQL($sql,$codigo_unidade_medida);
1193   - }
1194   - /**
1195   - * Lista os dados de uma ou todas as fontes cadastradas
1196   - * @param id da fonte
1197   - */
1198   - function listaFonteinfo($id_fonteinfo=""){
1199   - $sql = "select * from ".$this->esquemaadmin."i3geoestat_fonteinfo ";
1200   - if($id_fonteinfo != ""){
1201   - $sql .= "WHERE id_fonteinfo = $id_fonteinfo ";
1202   - }
1203   - $sql .= "ORDER BY titulo";
1204   - return $this->execSQL($sql,$id_fonteinfo);
1205   - }
1206   - /**
1207   - * Lista as fontes vinculadas a uma medida de variavel
1208   - * @param id da medida de variavel
1209   - */
1210   - function listaFonteinfoMedida($id_medida_variavel){
1211   - $sql = "SELECT i3geoestat_fonteinfo.* ";
1212   - $sql .= "FROM ".$this->esquemaadmin."i3geoestat_fonteinfo ";
1213   - $sql .= "INNER JOIN ".$this->esquemaadmin."i3geoestat_fonteinfo_medida ";
1214   - $sql .= "ON i3geoestat_fonteinfo.id_fonteinfo = i3geoestat_fonteinfo_medida.id_fonteinfo ";
1215   - $sql .= "WHERE i3geoestat_fonteinfo_medida.id_medida_variavel = $id_medida_variavel ";
1216   - $sql .= "ORDER BY titulo";
1217   - //echo $sql;exit;
1218   - return $this->execSQL($sql,$id_fonteinfo);
1219   - }
1220   - /**
1221   - * Lista os dados de uma ou todas as variaveis cadastradas
1222   - * @param codigo da variavel
1223   - * @param mostra apenas as variaveis cujas tabelas ficam nesse esquema
1224   - */
1225   - function listaVariavel($codigo_variavel="",$filtro_esquema=""){
1226   - $sql = "select DISTINCT a.* from ".$this->esquemaadmin."i3geoestat_variavel as a ";
1227   - if($codigo_variavel != ""){
1228   - $sql .= "WHERE a.codigo_variavel = $codigo_variavel ";
1229   - }
1230   - if($filtro_esquema != ""){
1231   - $sql .= ", ".$this->esquemaadmin."i3geoestat_medida_variavel as b WHERE a.codigo_variavel = b.codigo_variavel and b.esquemadb = '$filtro_esquema' ";
1232   - }
1233   - $sql .= "ORDER BY a.nome";
1234   - //echo $sql;exit;
1235   - return $this->execSQL($sql,$codigo_variavel);
1236   - }
1237   - /**
1238   - * Lista os dados de uma ou todas as classificacoes de uma medida de variavel
1239   - * @param id da medida de variavel
1240   - * @param id da classificacao
1241   - */
1242   - function listaClassificacaoMedida($id_medida_variavel,$id_classificacao=""){
1243   - if(!empty($id_medida_variavel)){
1244   - $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_classificacao WHERE id_medida_variavel = $id_medida_variavel";
1245   - }
1246   - if(!empty($id_classificacao)){
1247   - $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_classificacao WHERE id_classificacao = $id_classificacao";
1248   - }
1249   - return $this->execSQL($sql,$id_classificacao);
1250   - }
1251   - /**
1252   - * Lista os dados de um ou todos os links de uma medida
1253   - * @param id da medida
1254   - * @param id do link
1255   - */
1256   - function listaLinkMedida($id_medida_variavel,$id_link=""){
1257   - if(!empty($id_medida_variavel)){
1258   - $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_medida_variavel_link WHERE id_medida_variavel = $id_medida_variavel";
1259   - }
1260   - if(!empty($id_link)){
1261   - $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_medida_variavel_link WHERE id_link = $id_link";
1262   - }
1263   - return $this->execSQL($sql,$id_link);
1264   - }
1265   - /**
1266   - * Lista os dados de uma ou todas as classes de uma classificacao
1267   - * @param id da classificacao
1268   - * @param id da classe
1269   - */
1270   - function listaClasseClassificacao($id_classificacao,$id_classe=""){
1271   - if(!empty($id_classificacao)){
1272   - $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_classes WHERE id_classificacao = $id_classificacao";
1273   - }
1274   - if(!empty($id_classe)){
1275   - $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_classes WHERE id_classe = $id_classe";
1276   - }
1277   - return $this->execSQL($sql,$id_classe);
1278   - }
1279   - /**
1280   - * Lista os dados de uma ou todas as medidas de variavel de uma variavel
1281   - * @param codigo da variavel
1282   - * @param id da medida de variavel
1283   - */
1284   - function listaMedidaVariavel($codigo_variavel="",$id_medida_variavel=""){
1285   - $sql = "SELECT i3geoestat_medida_variavel.*,i3geoestat_variavel.nome as nome_variavel,i3geoestat_unidade_medida.permitemedia,i3geoestat_unidade_medida.permitesoma,i3geoestat_unidade_medida.nome as unidade_medida ";
1286   - $sql .= "FROM ".$this->esquemaadmin."i3geoestat_variavel ";
1287   - $sql .= "JOIN ".$this->esquemaadmin."i3geoestat_medida_variavel ";
1288   - $sql .= "ON i3geoestat_variavel.codigo_variavel = i3geoestat_medida_variavel.codigo_variavel ";
1289   - $sql .= "LEFT JOIN ".$this->esquemaadmin."i3geoestat_unidade_medida ";
1290   - $sql .= "ON i3geoestat_unidade_medida.codigo_unidade_medida = i3geoestat_medida_variavel.codigo_unidade_medida ";
1291   - if($codigo_variavel != ""){
1292   - $sql .= "WHERE i3geoestat_variavel.codigo_variavel = $codigo_variavel ";
1293   - if($id_medida_variavel != ""){
1294   - $sql .= "AND i3geoestat_medida_variavel.id_medida_variavel = $id_medida_variavel ";
1295   - }
1296   - }
1297   - elseif($id_medida_variavel != "") {
1298   - $sql .= "WHERE i3geoestat_medida_variavel.id_medida_variavel = $id_medida_variavel ";
1299   - }
1300   - $sql .= "ORDER BY i3geoestat_medida_variavel.nomemedida";
1301   - $res = $this->execSQL($sql,$id_medida_variavel);
1302   - $res = str_replace('"',"'",$res);
1303   - return $res;
1304   - }
1305   - /**
1306   - * Lista as regioes vinculadas a uma medida de variavel
1307   - * @param id da medida de vriavel
1308   - */
1309   - function listaRegioesMedida($id_medida_variavel){
1310   - $variavel = $this->listaMedidaVariavel("",$id_medida_variavel);
1311   - $codigo_tipo_regiao = $variavel["codigo_tipo_regiao"];
1312   - $regioes[] = $this->listaTipoRegiao($codigo_tipo_regiao);
1313   - //var_dump($regioes);exit;
1314   - $agregacoes = $this->listaAgregaRegiao($codigo_tipo_regiao);
1315   - foreach($agregacoes as $a){
1316   - $regioes[] = $this->listaTipoRegiao($a["codigo_tipo_regiao_pai"]);
1317   - }
1318   - return $regioes;
1319   - }
1320   - /**
1321   - * Lista os dados de uma conexao ou de todas
1322   - * @param id da conexao
1323   - * @param boolean inclui na lista a senha ou nao
1324   - * @param boolean inclui as conexoes definidas em postgis_mapa (ms_configura.php)
1325   - */
1326   - function listaConexao($codigo_estat_conexao="",$senha=false,$incluiPostgisMapa=true){
1327   - if($senha == true){
1328   - $colunas = "codigo_estat_conexao, bancodedados, host, porta, usuario, senha";
1329   - }
1330   - else{
1331   - $colunas = "codigo_estat_conexao, bancodedados, host, porta, usuario";
1332   - }
1333   - $sql = "select $colunas from ".$this->esquemaadmin."i3geoestat_conexao ";
1334   - if($codigo_estat_conexao != ""){
1335   - $sql .= "WHERE codigo_estat_conexao = $codigo_estat_conexao ";
1336   - }
1337   - $sql .= "ORDER BY bancodedados,host,usuario";
1338   - $res = $this->execSQL($sql,$codigo_estat_conexao);
1339   - //se achou e a requisico e para listar uma conexao, retorna o que for encontrado
1340   - $cres = count($res);
1341   - if($cres > 0 && $codigo_estat_conexao != "" && !empty($cres[0]["dbname"])){
1342   - return $res;
1343   - }
1344   - //caso contrario, e deve retornar todas as conexoes, inclui a fonte
1345   - if($codigo_estat_conexao == ""){
1346   - for($i=0; $i<$cres;$i++){
1347   - $res[$i]["fonte"] = "metaestat";
1348   - }
1349   - }
1350   - //obtem as conexoes definidas em ms_configgura.php
1351   - if($incluiPostgisMapa == true){
1352   - if(!isset($postgis_mapa)){
1353   - include(dirname(__FILE__)."/../ms_configura.php");
1354   - }
1355   - if(!empty($postgis_mapa)){
1356   - foreach(array_keys($postgis_mapa) as $key){
1357   - $lista = explode(" ",$postgis_mapa[$key]);
1358   - $con = array();
1359   - foreach($lista as $l){
1360   - $teste = explode("=",$l);
1361   - $con[trim($teste[0])] = trim($teste[1]);
1362   - }
1363   - $c = array(
1364   - "codigo_estat_conexao" => $key,
1365   - "bancodedados" => $con["dbname"],
1366   - "host" => $con["host"],
1367   - "porta" => $con["port"],
1368   - "usuario" => $con["user"],
1369   - "fonte" => "ms_configura"
1370   - );
1371   - if($senha == true){
1372   - $c["senha"] = $con["password"];
1373   - }
1374   - $res[] = $c;
1375   - if($codigo_estat_conexao != "" && $codigo_estat_conexao == $key){
1376   - return $c;
1377   - }
1378   - }
1379   - }
1380   - }
1381   - //echo "<pre>";
1382   - //var_dump($res);exit;
1383   - return $res;
1384   - }
1385   - function listaParametroTempo2CampoData($id_medida_variavel,$prefixoAlias = ""){
1386   - //lista os parametros temporais
1387   - $parametros = $this->listaParametro($id_medida_variavel,"","",true,true);
1388   - echo "<pre>";
1389   - //var_dump($parametros);exit;
1390   - //faz o sql para pegar os valores e definir a resolucao
1391   - //o tempo deve comecar sempre pelo ano
1392   - $data = array();
1393   - if($parametros[0]["tipo"] == 1){
1394   - //ano
1395   - $data[] = $prefixoAlias.$parametros[0]["coluna"];
1396   - $tipodata = "YYYY";
1397   - //mes
1398   - if(!empty($parametros[1])){
1399   - $data[] = "'-'".$prefixoAlias.$parametros[1]["coluna"];
1400   - $tipodata = "YYYYMM";
1401   - }
1402   - else{
1403   - $data[] = "'-01'";
1404   - }
1405   - //dia
1406   - if(!empty($parametros[2])){
1407   - $data[] = "'-'".$prefixoAlias.$parametros[2]["coluna"];
1408   - $tipodata = "YYYYMMDD";
1409   - }
1410   - else{
1411   - $data[] = "'-01'";
1412   - }
1413   - $data = implode("||",$data);
1414   - return "to_date($data,'$tipodata')";
1415   - }
1416   - }
1417   - /**
1418   - * Lista os dados de um ou de todos os parametros relacionados a uma medida de variavel
1419   - * @param id da medida de variavel
1420   - * @param id do parametro
1421   - * @param id do pai (se definido, lista apenas os filhos deste)
1422   - * @param bool indica se apenas parametros do tipo temporal serao retornados
1423   - */
1424   - function listaParametro($id_medida_variavel,$id_parametro_medida="",$id_pai="",$apenasTempo=false,$ordenaPeloPai=false){
1425   - $sql = "SELECT i3geoestat_parametro_medida.*,i3geoestat_medida_variavel.* ";
1426   - $sql .= "FROM ".$this->esquemaadmin."i3geoestat_parametro_medida ";
1427   - $sql .= "INNER JOIN ".$this->esquemaadmin."i3geoestat_medida_variavel ";
1428   - $sql .= "ON i3geoestat_parametro_medida.id_medida_variavel = i3geoestat_medida_variavel.id_medida_variavel ";
1429   - if($id_medida_variavel != ""){
1430   - $sql .= "WHERE i3geoestat_parametro_medida.id_medida_variavel = $id_medida_variavel ";
1431   - if($id_parametro_medida != ""){
1432   - $sql .= "AND i3geoestat_parametro_medida.id_parametro_medida = $id_parametro_medida ";
1433   - }
1434   - }
1435   - elseif ($id_parametro_medida != ""){
1436   - $sql .= "WHERE i3geoestat_parametro_medida.id_parametro_medida = $id_parametro_medida ";
1437   - }
1438   - if($id_pai != ""){
1439   - $sql .= " AND id_pai = $id_pai";
1440   - }
1441   - if($apenasTempo == true){
1442   - $tempo = " AND i3geoestat_parametro_medida.tipo > 0 AND i3geoestat_parametro_medida.tipo < 5 ";
1443   - $sql .= $tempo;
1444   - }
1445   - if($ordenaPeloPai == true){
1446   - $sql .= " ORDER BY id_pai";
1447   - }
1448   - //echo $sql;exit;
1449   - return $this->execSQL($sql,$id_parametro_medida);
1450   - }
1451   - /**
1452   - * Lista todos os parametros cadastrados
1453   - */
1454   - function listaTodosParametros(){
1455   - $sql = "SELECT i3geoestat_parametro_medida.*,i3geoestat_medida_variavel.* ";
1456   - $sql .= "FROM ".$this->esquemaadmin."i3geoestat_parametro_medida ";
1457   - $sql .= "INNER JOIN ".$this->esquemaadmin."i3geoestat_medida_variavel ";
1458   - $sql .= "ON i3geoestat_parametro_medida.id_medida_variavel = i3geoestat_medida_variavel.id_medida_variavel ";
1459   - $sql .= " ORDER BY nome";
1460   - return $this->execSQL($sql);
1461   - }
1462   - /**
1463   - * Lista os valores (unicos) que ocorrem em um parametro de uma medida de variavel
1464   - * @param id do parametro
1465   - * @return array com os valores
1466   - */
1467   - function listaValoresParametro($id_parametro_medida){
1468   - $parametro = $this->listaParametro("",$id_parametro_medida);
1469   - //$medida = $this->listaMedidaVariavel("",$parametro["id_medida_variavel"]);
1470   - $sm = $this->valorUnicoMedidaVariavel($parametro["id_medida_variavel"],$parametro["coluna"]);
1471   - $nsm = array();
1472   - foreach($sm as $s){
1473   - $nsm[] = $s[$parametro["coluna"]];
1474   - }
1475   - return $nsm;
1476   - }
1477   - /**
1478   - * Lista os dados de um ou todos os tipos de periodo cadastrados
1479   - * @param id
1480   - */
1481   - function listaTipoPeriodo($codigo_tipo_periodo=""){
1482   - $sql = "select * from ".$this->esquemaadmin."i3geoestat_tipo_periodo ";
1483   - if($codigo_tipo_periodo != ""){
1484   - $sql .= "WHERE codigo_tipo_periodo = $codigo_tipo_periodo ";
1485   - }
1486   - $sql .= "ORDER BY nome";
1487   - return $this->execSQL($sql,$codigo_tipo_periodo);
1488   - }
1489   - /**
1490   - * Lista as propriedades da coluna com as geometrias de uma regiao geografica
1491   - * @param codigo do tipo de regiao
1492   - * @return array com os parametros, inclusive a dimensao (st_dimension)
1493   - */
1494   - function listaPropGeoRegiao($codigo_tipo_regiao){
1495   - //st_dimension returns 0 for POINT, 1 for LINESTRING, 2 for POLYGON
1496   - $regiao = $this->listaTipoRegiao($codigo_tipo_regiao);
1497   - $c = $this->listaConexao($regiao["codigo_estat_conexao"],true);
1498   - $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
1499   - $c = $regiao["colunageo"];
1500   - $sql = "select st_dimension(".$regiao["colunageo"].") as st_dimension from ".$regiao["esquemadb"].".".$regiao["tabela"]." limit 1";
1501   - $q = $dbh->query($sql,PDO::FETCH_ASSOC);
1502   - $r = array();
1503   - if($q){
1504   - $r = $q->fetchAll();
1505   - $r = $r[0];
1506   - }
1507   - return $r;
1508   - }
1509   - /**
1510   - * Lista os dados de uma ou todas as regioes cadastradas
1511   - * @param codigo do tipo de regiao
1512   - */
1513   - function listaTipoRegiao($codigo_tipo_regiao="",$completo=true){
1514   - if($completo == true){
1515   - $colunas = "*";
1516   - } else {
1517   - $colunas = "codigo_tipo_regiao,nome_tipo_regiao,descricao_tipo_regiao";
1518   - }
1519   - $sql = "select $colunas from ".$this->esquemaadmin."i3geoestat_tipo_regiao ";
1520   - if($codigo_tipo_regiao != ""){
1521   - $sql .= "WHERE codigo_tipo_regiao = $codigo_tipo_regiao ";
1522   - }
1523   - $sql .= "ORDER BY nome_tipo_regiao";
1524   - return $this->execSQL($sql,$codigo_tipo_regiao);
1525   - }
1526   - /**
1527   - * Obtem de um tipo de regiao a coluna do tipo serial
1528   - * @param codigo do tipo de regiao
1529   - */
1530   - function listaTipoRegiaoSerial($codigo_tipo_regiao){
1531   - $sql = "select * from ".$this->esquemaadmin."i3geoestat_tipo_regiao WHERE codigo_tipo_regiao = $codigo_tipo_regiao ";
1532   - $regiao = $this->execSQL($sql,$codigo_tipo_regiao);
1533   - $nome_esquema = $regiao["esquemadb"];
1534   - $nome_tabela = $regiao["tabela"];
1535   - $sql = "SELECT a.attname as coluna FROM pg_class s JOIN pg_depend d ON d.objid = s.oid JOIN pg_class t ON d.objid = s.oid AND d.refobjid = t.oid JOIN pg_attribute a ON (d.refobjid, d.refobjsubid) = (a.attrelid, a.attnum) JOIN pg_namespace n ON n.oid = s.relnamespace WHERE s.relkind = 'S' AND n.nspname = '$nome_esquema' AND t.relname = '$nome_tabela'";
1536   - $colunas = $this->execSQLDB($regiao["codigo_estat_conexao"],$sql);
1537   - $colunas = $colunas[0];
1538   - return $colunas["coluna"];
1539   - }
1540   - /**
1541   - * Obtem de uma tabela a coluna do tipo serial
1542   - * @param codigo do tipo de regiao
1543   - */
1544   - function listaTabelaSerial($codigo_estat_conexao,$nome_esquema,$nome_tabela){
1545   - $sql = "SELECT a.attname as coluna FROM pg_class s JOIN pg_depend d ON d.objid = s.oid JOIN pg_class t ON d.objid = s.oid AND d.refobjid = t.oid JOIN pg_attribute a ON (d.refobjid, d.refobjsubid) = (a.attrelid, a.attnum) JOIN pg_namespace n ON n.oid = s.relnamespace WHERE s.relkind = 'S' AND n.nspname = '$nome_esquema' AND t.relname = '$nome_tabela'";
1546   - $colunas = $this->execSQLDB($codigo_estat_conexao,$sql);
1547   - $colunas = $colunas[0];
1548   - return $colunas["coluna"];
1549   - }
1550   - /**
1551   - * Lista os dados de agregacao de uma regiao pai
1552   - * @param codigo da regiao
1553   - */
1554   - function listaHierarquiaRegioes($codigoregiaopai=""){
1555   - $sql = "select i3geoestat_agregaregiao.id_agregaregiao,i3geoestat_agregaregiao.colunaligacao_regiaopai,i3geoestat_tipo_regiao.codigo_tipo_regiao,i3geoestat_tipo_regiao.nome_tipo_regiao from ".$this->esquemaadmin."i3geoestat_tipo_regiao ";
1556   - $sql .= "LEFT JOIN ".$this->esquemaadmin."i3geoestat_agregaregiao ";
1557   - $sql .= "ON i3geoestat_tipo_regiao.codigo_tipo_regiao = i3geoestat_agregaregiao.codigo_tipo_regiao ";
1558   - if($codigoregiaopai != ""){
1559   - $sql .= " WHERE ".$this->esquemaadmin."i3geoestat_agregaregiao.codigo_tipo_regiao_pai = $codigoregiaopai";
1560   - }
1561   - else{
1562   - $sql .= "WHERE ".$this->esquemaadmin."i3geoestat_agregaregiao.codigo_tipo_regiao IS NULL";
1563   - }
1564   - return $this->execSQL($sql,"");
1565   - }
1566   - function listaHierarquia($codigoregiaopai=""){
1567   - $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao order by codigo_tipo_regiao";
1568   - return $this->execSQL($sql,"");
1569   - }
1570   - /**
1571   - * Lista os registros de um tipo de regiao
1572   - * Se for definido o pai, lista os valores da regiao que e filha
1573   - * Nesse caso e necessario definir o identificador da regiao pai para obter os registros na regiao filha
1574   - * @param codigo do tipo de regiao
1575   - * @param codigo do tipo de regiao pai
1576   - * @param identificador da regiao (registro) pai
1577   - */
1578   - function listaDadosRegiao($codigo_tipo_regiao,$codigo_tipo_regiaopai="",$valorregiaopai=""){
1579   - //pega a tabela, esquema e conexao para acessar os dados da regiao
1580   - $regiao = $this->listaTipoRegiao($codigo_tipo_regiao);
1581   - $c = $this->listaConexao($regiao["codigo_estat_conexao"],true);
1582   - $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
1583   - $c = $regiao["colunageo"];
1584   - $bbox = "ST_XMin($c)||' '||ST_YMin($c)||' '||ST_XMax($c)||' '||ST_YMax($c) as ext ";
1585   - $sql = "select $bbox,".$regiao["colunanomeregiao"]." as nome_regiao,".$regiao["identificador"]." as identificador_regiao from ".$regiao["esquemadb"].".".$regiao["tabela"];
1586   - if($valorregiaopai != ""){
1587   - $r = $this->listaAgregaRegiaoFilho($codigo_tipo_regiao,$codigo_tipo_regiaopai);
1588   - $sql .= " WHERE ".$r["colunaligacao_regiaopai"]."::text = '$valorregiaopai'";
1589   - }
1590   - $sql .= " order by ".$regiao["colunanomeregiao"];
  1139 + /**
  1140 + * Lista os dados de um ou de todos os mapas cadastrados
  1141 + * @param id do mapa
  1142 + */
  1143 + function listaMapas($id_mapa=""){
  1144 + $sql = "select * from ".$this->esquemaadmin."i3geoestat_mapa ";
  1145 + if($id_mapa != ""){
  1146 + $sql .= "WHERE id_mapa = $id_mapa ";
  1147 + }
  1148 + $sql .= "ORDER BY titulo";
  1149 + return $this->execSQL($sql,$id_mapa);
  1150 + }
  1151 + /**
  1152 + * Lista os dados de um ou de todos os mapas grupos de um mapa
  1153 + * @param id do mapa
  1154 + * @param id do grupo
  1155 + */
  1156 + function listaGruposMapa($id_mapa,$id_mapa_grupo){
  1157 + if(!empty($id_mapa)){
  1158 + $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_mapa_grupo WHERE id_mapa = $id_mapa";
  1159 + }
  1160 + if(!empty($id_mapa_grupo)){
  1161 + $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_mapa_grupo WHERE id_mapa_grupo = $id_mapa_grupo";
  1162 + }
  1163 + $sql .= " ORDER BY titulo";
  1164 + return $this->execSQL($sql,$id_mapa_grupo);
  1165 + }
  1166 + /**
  1167 + * Lista os dados de um ou de todos os temas de um grupo de um mapa
  1168 + * @param id do mapa
  1169 + * @param id do grupo
  1170 + * @param id do tema
  1171 + */
  1172 + function listaTemasMapa($id_mapa_grupo,$id_mapa_tema){
  1173 + if(!empty($id_mapa_grupo)){
  1174 + $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_mapa_tema WHERE id_mapa_grupo = $id_mapa_grupo";
  1175 + }
  1176 + if(!empty($id_mapa_tema)){
  1177 + $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_mapa_tema WHERE id_mapa_tema = $id_mapa_tema";
  1178 + }
  1179 + $sql .= " ORDER BY titulo";
  1180 + return $this->execSQL($sql,$id_mapa_tema);
  1181 + }
  1182 + /**
  1183 + * Lista os dados de uma ou todas as unidades de medida cadastradas
  1184 + * @param codigo da unidade
  1185 + */
  1186 + function listaUnidadeMedida($codigo_unidade_medida=""){
  1187 + $sql = "select * from ".$this->esquemaadmin."i3geoestat_unidade_medida ";
  1188 + if($codigo_unidade_medida != ""){
  1189 + $sql .= "WHERE codigo_unidade_medida = $codigo_unidade_medida ";
  1190 + }
  1191 + $sql .= "ORDER BY nome";
  1192 + return $this->execSQL($sql,$codigo_unidade_medida);
  1193 + }
  1194 + /**
  1195 + * Lista os dados de uma ou todas as fontes cadastradas
  1196 + * @param id da fonte
  1197 + */
  1198 + function listaFonteinfo($id_fonteinfo=""){
  1199 + $sql = "select * from ".$this->esquemaadmin."i3geoestat_fonteinfo ";
  1200 + if($id_fonteinfo != ""){
  1201 + $sql .= "WHERE id_fonteinfo = $id_fonteinfo ";
  1202 + }
  1203 + $sql .= "ORDER BY titulo";
  1204 + return $this->execSQL($sql,$id_fonteinfo);
  1205 + }
  1206 + /**
  1207 + * Lista as fontes vinculadas a uma medida de variavel
  1208 + * @param id da medida de variavel
  1209 + */
  1210 + function listaFonteinfoMedida($id_medida_variavel){
  1211 + $sql = "SELECT i3geoestat_fonteinfo.* ";
  1212 + $sql .= "FROM ".$this->esquemaadmin."i3geoestat_fonteinfo ";
  1213 + $sql .= "INNER JOIN ".$this->esquemaadmin."i3geoestat_fonteinfo_medida ";
  1214 + $sql .= "ON i3geoestat_fonteinfo.id_fonteinfo = i3geoestat_fonteinfo_medida.id_fonteinfo ";
  1215 + $sql .= "WHERE i3geoestat_fonteinfo_medida.id_medida_variavel = $id_medida_variavel ";
  1216 + $sql .= "ORDER BY titulo";
  1217 + //echo $sql;exit;
  1218 + return $this->execSQL($sql,$id_fonteinfo);
  1219 + }
  1220 + /**
  1221 + * Lista os dados de uma ou todas as variaveis cadastradas
  1222 + * @param codigo da variavel
  1223 + * @param mostra apenas as variaveis cujas tabelas ficam nesse esquema
  1224 + */
  1225 + function listaVariavel($codigo_variavel="",$filtro_esquema=""){
  1226 + $sql = "select DISTINCT a.* from ".$this->esquemaadmin."i3geoestat_variavel as a ";
  1227 + if($codigo_variavel != ""){
  1228 + $sql .= "WHERE a.codigo_variavel = $codigo_variavel ";
  1229 + }
  1230 + if($filtro_esquema != ""){
  1231 + $sql .= ", ".$this->esquemaadmin."i3geoestat_medida_variavel as b WHERE a.codigo_variavel = b.codigo_variavel and b.esquemadb = '$filtro_esquema' ";
  1232 + }
  1233 + $sql .= "ORDER BY a.nome";
  1234 + //echo $sql;exit;
  1235 + return $this->execSQL($sql,$codigo_variavel);
  1236 + }
  1237 + /**
  1238 + * Lista os dados de uma ou todas as classificacoes de uma medida de variavel
  1239 + * @param id da medida de variavel
  1240 + * @param id da classificacao
  1241 + */
  1242 + function listaClassificacaoMedida($id_medida_variavel,$id_classificacao=""){
  1243 + if(!empty($id_medida_variavel)){
  1244 + $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_classificacao WHERE id_medida_variavel = $id_medida_variavel";
  1245 + }
  1246 + if(!empty($id_classificacao)){
  1247 + $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_classificacao WHERE id_classificacao = $id_classificacao";
  1248 + }
  1249 + return $this->execSQL($sql,$id_classificacao);
  1250 + }
  1251 + /**
  1252 + * Lista os dados de um ou todos os links de uma medida
  1253 + * @param id da medida
  1254 + * @param id do link
  1255 + */
  1256 + function listaLinkMedida($id_medida_variavel,$id_link=""){
  1257 + if(!empty($id_medida_variavel)){
  1258 + $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_medida_variavel_link WHERE id_medida_variavel = $id_medida_variavel";
  1259 + }
  1260 + if(!empty($id_link)){
  1261 + $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_medida_variavel_link WHERE id_link = $id_link";
  1262 + }
  1263 + return $this->execSQL($sql,$id_link);
  1264 + }
  1265 + /**
  1266 + * Lista os dados de uma ou todas as classes de uma classificacao
  1267 + * @param id da classificacao
  1268 + * @param id da classe
  1269 + */
  1270 + function listaClasseClassificacao($id_classificacao,$id_classe=""){
  1271 + if(!empty($id_classificacao)){
  1272 + $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_classes WHERE id_classificacao = $id_classificacao";
  1273 + }
  1274 + if(!empty($id_classe)){
  1275 + $sql = "SELECT * from ".$this->esquemaadmin."i3geoestat_classes WHERE id_classe = $id_classe";
  1276 + }
  1277 + return $this->execSQL($sql,$id_classe);
  1278 + }
  1279 + /**
  1280 + * Lista os dados de uma ou todas as medidas de variavel de uma variavel
  1281 + * @param codigo da variavel
  1282 + * @param id da medida de variavel
  1283 + */
  1284 + function listaMedidaVariavel($codigo_variavel="",$id_medida_variavel=""){
  1285 + $sql = "SELECT i3geoestat_medida_variavel.*,i3geoestat_variavel.nome as nome_variavel,i3geoestat_unidade_medida.permitemedia,i3geoestat_unidade_medida.permitesoma,i3geoestat_unidade_medida.nome as unidade_medida ";
  1286 + $sql .= "FROM ".$this->esquemaadmin."i3geoestat_variavel ";
  1287 + $sql .= "JOIN ".$this->esquemaadmin."i3geoestat_medida_variavel ";
  1288 + $sql .= "ON i3geoestat_variavel.codigo_variavel = i3geoestat_medida_variavel.codigo_variavel ";
  1289 + $sql .= "LEFT JOIN ".$this->esquemaadmin."i3geoestat_unidade_medida ";
  1290 + $sql .= "ON i3geoestat_unidade_medida.codigo_unidade_medida = i3geoestat_medida_variavel.codigo_unidade_medida ";
  1291 + if($codigo_variavel != ""){
  1292 + $sql .= "WHERE i3geoestat_variavel.codigo_variavel = $codigo_variavel ";
  1293 + if($id_medida_variavel != ""){
  1294 + $sql .= "AND i3geoestat_medida_variavel.id_medida_variavel = $id_medida_variavel ";
  1295 + }
  1296 + }
  1297 + elseif($id_medida_variavel != "") {
  1298 + $sql .= "WHERE i3geoestat_medida_variavel.id_medida_variavel = $id_medida_variavel ";
  1299 + }
  1300 + $sql .= "ORDER BY i3geoestat_medida_variavel.nomemedida";
  1301 + $res = $this->execSQL($sql,$id_medida_variavel);
  1302 + $res = str_replace('"',"'",$res);
  1303 + return $res;
  1304 + }
  1305 + /**
  1306 + * Lista as regioes vinculadas a uma medida de variavel
  1307 + * @param id da medida de vriavel
  1308 + */
  1309 + function listaRegioesMedida($id_medida_variavel){
  1310 + $variavel = $this->listaMedidaVariavel("",$id_medida_variavel);
  1311 + $codigo_tipo_regiao = $variavel["codigo_tipo_regiao"];
  1312 + $regioes[] = $this->listaTipoRegiao($codigo_tipo_regiao);
  1313 + //var_dump($regioes);exit;
  1314 + $agregacoes = $this->listaAgregaRegiao($codigo_tipo_regiao);
  1315 + foreach($agregacoes as $a){
  1316 + $regioes[] = $this->listaTipoRegiao($a["codigo_tipo_regiao_pai"]);
  1317 + }
  1318 + return $regioes;
  1319 + }
  1320 + /**
  1321 + * Lista os dados de uma conexao ou de todas
  1322 + * @param id da conexao
  1323 + * @param boolean inclui na lista a senha ou nao
  1324 + * @param boolean inclui as conexoes definidas em postgis_mapa (ms_configura.php)
  1325 + */
  1326 + function listaConexao($codigo_estat_conexao="",$senha=false,$incluiPostgisMapa=true){
  1327 + if($senha == true){
  1328 + $colunas = "codigo_estat_conexao, bancodedados, host, porta, usuario, senha";
  1329 + }
  1330 + else{
  1331 + $colunas = "codigo_estat_conexao, bancodedados, host, porta, usuario";
  1332 + }
  1333 + $sql = "select $colunas from ".$this->esquemaadmin."i3geoestat_conexao ";
  1334 + if($codigo_estat_conexao != ""){
  1335 + $sql .= "WHERE codigo_estat_conexao = $codigo_estat_conexao ";
  1336 + }
  1337 + $sql .= "ORDER BY bancodedados,host,usuario";
  1338 + $res = $this->execSQL($sql,$codigo_estat_conexao);
  1339 + //se achou e a requisico e para listar uma conexao, retorna o que for encontrado
  1340 + $cres = count($res);
  1341 + if($cres > 0 && $codigo_estat_conexao != "" && !empty($cres[0]["dbname"])){
  1342 + return $res;
  1343 + }
  1344 + //caso contrario, e deve retornar todas as conexoes, inclui a fonte
  1345 + if($codigo_estat_conexao == ""){
  1346 + for($i=0; $i<$cres;$i++){
  1347 + $res[$i]["fonte"] = "metaestat";
  1348 + }
  1349 + }
  1350 + //obtem as conexoes definidas em ms_configgura.php
  1351 + if($incluiPostgisMapa == true){
  1352 + if(!isset($postgis_mapa)){
  1353 + include(dirname(__FILE__)."/../ms_configura.php");
  1354 + }
  1355 + if(!empty($postgis_mapa)){
  1356 + foreach(array_keys($postgis_mapa) as $key){
  1357 + $lista = explode(" ",$postgis_mapa[$key]);
  1358 + $con = array();
  1359 + foreach($lista as $l){
  1360 + $teste = explode("=",$l);
  1361 + $con[trim($teste[0])] = trim($teste[1]);
  1362 + }
  1363 + $c = array(
  1364 + "codigo_estat_conexao" => $key,
  1365 + "bancodedados" => $con["dbname"],
  1366 + "host" => $con["host"],
  1367 + "porta" => $con["port"],
  1368 + "usuario" => $con["user"],
  1369 + "fonte" => "ms_configura"
  1370 + );
  1371 + if($senha == true){
  1372 + $c["senha"] = $con["password"];
  1373 + }
  1374 + $res[] = $c;
  1375 + if($codigo_estat_conexao != "" && $codigo_estat_conexao == $key){
  1376 + return $c;
  1377 + }
  1378 + }
  1379 + }
  1380 + }
  1381 + //echo "<pre>";
  1382 + //var_dump($res);exit;
  1383 + return $res;
  1384 + }
  1385 + function listaParametroTempo2CampoData($id_medida_variavel,$prefixoAlias = ""){
  1386 + //lista os parametros temporais
  1387 + $parametros = $this->listaParametro($id_medida_variavel,"","",true,true);
  1388 + echo "<pre>";
  1389 + //var_dump($parametros);exit;
  1390 + //faz o sql para pegar os valores e definir a resolucao
  1391 + //o tempo deve comecar sempre pelo ano
  1392 + $data = array();
  1393 + if($parametros[0]["tipo"] == 1){
  1394 + //ano
  1395 + $data[] = $prefixoAlias.$parametros[0]["coluna"];
  1396 + $tipodata = "YYYY";
  1397 + //mes
  1398 + if(!empty($parametros[1])){
  1399 + $data[] = "'-'".$prefixoAlias.$parametros[1]["coluna"];
  1400 + $tipodata = "YYYYMM";
  1401 + }
  1402 + else{
  1403 + $data[] = "'-01'";
  1404 + }
  1405 + //dia
  1406 + if(!empty($parametros[2])){
  1407 + $data[] = "'-'".$prefixoAlias.$parametros[2]["coluna"];
  1408 + $tipodata = "YYYYMMDD";
  1409 + }
  1410 + else{
  1411 + $data[] = "'-01'";
  1412 + }
  1413 + $data = implode("||",$data);
  1414 + return "to_date($data,'$tipodata')";
  1415 + }
  1416 + }
  1417 + /**
  1418 + * Lista os dados de um ou de todos os parametros relacionados a uma medida de variavel
  1419 + * @param id da medida de variavel
  1420 + * @param id do parametro
  1421 + * @param id do pai (se definido, lista apenas os filhos deste)
  1422 + * @param bool indica se apenas parametros do tipo temporal serao retornados
  1423 + */
  1424 + function listaParametro($id_medida_variavel,$id_parametro_medida="",$id_pai="",$apenasTempo=false,$ordenaPeloPai=false){
  1425 + $sql = "SELECT i3geoestat_parametro_medida.*,i3geoestat_medida_variavel.* ";
  1426 + $sql .= "FROM ".$this->esquemaadmin."i3geoestat_parametro_medida ";
  1427 + $sql .= "INNER JOIN ".$this->esquemaadmin."i3geoestat_medida_variavel ";
  1428 + $sql .= "ON i3geoestat_parametro_medida.id_medida_variavel = i3geoestat_medida_variavel.id_medida_variavel ";
  1429 + if($id_medida_variavel != ""){
  1430 + $sql .= "WHERE i3geoestat_parametro_medida.id_medida_variavel = $id_medida_variavel ";
  1431 + if($id_parametro_medida != ""){
  1432 + $sql .= "AND i3geoestat_parametro_medida.id_parametro_medida = $id_parametro_medida ";
  1433 + }
  1434 + }
  1435 + elseif ($id_parametro_medida != ""){
  1436 + $sql .= "WHERE i3geoestat_parametro_medida.id_parametro_medida = $id_parametro_medida ";
  1437 + }
  1438 + if($id_pai != ""){
  1439 + $sql .= " AND id_pai = $id_pai";
  1440 + }
  1441 + if($apenasTempo == true){
  1442 + $tempo = " AND i3geoestat_parametro_medida.tipo > 0 AND i3geoestat_parametro_medida.tipo < 5 ";
  1443 + $sql .= $tempo;
  1444 + }
  1445 + if($ordenaPeloPai == true){
  1446 + $sql .= " ORDER BY id_pai";
  1447 + }
  1448 + //echo $sql;exit;
  1449 + return $this->execSQL($sql,$id_parametro_medida);
  1450 + }
  1451 + /**
  1452 + * Lista todos os parametros cadastrados
  1453 + */
  1454 + function listaTodosParametros(){
  1455 + $sql = "SELECT i3geoestat_parametro_medida.*,i3geoestat_medida_variavel.* ";
  1456 + $sql .= "FROM ".$this->esquemaadmin."i3geoestat_parametro_medida ";
  1457 + $sql .= "INNER JOIN ".$this->esquemaadmin."i3geoestat_medida_variavel ";
  1458 + $sql .= "ON i3geoestat_parametro_medida.id_medida_variavel = i3geoestat_medida_variavel.id_medida_variavel ";
  1459 + $sql .= " ORDER BY nome";
  1460 + return $this->execSQL($sql);
  1461 + }
  1462 + /**
  1463 + * Lista os valores (unicos) que ocorrem em um parametro de uma medida de variavel
  1464 + * @param id do parametro
  1465 + * @return array com os valores
  1466 + */
  1467 + function listaValoresParametro($id_parametro_medida){
  1468 + $parametro = $this->listaParametro("",$id_parametro_medida);
  1469 + //$medida = $this->listaMedidaVariavel("",$parametro["id_medida_variavel"]);
  1470 + $sm = $this->valorUnicoMedidaVariavel($parametro["id_medida_variavel"],$parametro["coluna"]);
  1471 + $nsm = array();
  1472 + foreach($sm as $s){
  1473 + $nsm[] = $s[$parametro["coluna"]];
  1474 + }
  1475 + return $nsm;
  1476 + }
  1477 + /**
  1478 + * Lista os dados de um ou todos os tipos de periodo cadastrados
  1479 + * @param id
  1480 + */
  1481 + function listaTipoPeriodo($codigo_tipo_periodo=""){
  1482 + $sql = "select * from ".$this->esquemaadmin."i3geoestat_tipo_periodo ";
  1483 + if($codigo_tipo_periodo != ""){
  1484 + $sql .= "WHERE codigo_tipo_periodo = $codigo_tipo_periodo ";
  1485 + }
  1486 + $sql .= "ORDER BY nome";
  1487 + return $this->execSQL($sql,$codigo_tipo_periodo);
  1488 + }
  1489 + /**
  1490 + * Lista as propriedades da coluna com as geometrias de uma regiao geografica
  1491 + * @param codigo do tipo de regiao
  1492 + * @return array com os parametros, inclusive a dimensao (st_dimension)
  1493 + */
  1494 + function listaPropGeoRegiao($codigo_tipo_regiao){
  1495 + //st_dimension returns 0 for POINT, 1 for LINESTRING, 2 for POLYGON
  1496 + $regiao = $this->listaTipoRegiao($codigo_tipo_regiao);
  1497 + $c = $this->listaConexao($regiao["codigo_estat_conexao"],true);
  1498 + $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
  1499 + $c = $regiao["colunageo"];
  1500 + $sql = "select st_dimension(".$regiao["colunageo"].") as st_dimension from ".$regiao["esquemadb"].".".$regiao["tabela"]." limit 1";
  1501 + $q = $dbh->query($sql,PDO::FETCH_ASSOC);
  1502 + $r = array();
  1503 + if($q){
  1504 + $r = $q->fetchAll();
  1505 + $r = $r[0];
  1506 + }
  1507 + return $r;
  1508 + }
  1509 + /**
  1510 + * Lista os dados de uma ou todas as regioes cadastradas
  1511 + * @param codigo do tipo de regiao
  1512 + */
  1513 + function listaTipoRegiao($codigo_tipo_regiao="",$completo=true){
  1514 + if($completo == true){
  1515 + $colunas = "*";
  1516 + } else {
  1517 + $colunas = "codigo_tipo_regiao,nome_tipo_regiao,descricao_tipo_regiao";
  1518 + }
  1519 + $sql = "select $colunas from ".$this->esquemaadmin."i3geoestat_tipo_regiao ";
  1520 + if($codigo_tipo_regiao != ""){
  1521 + $sql .= "WHERE codigo_tipo_regiao = $codigo_tipo_regiao ";
  1522 + }
  1523 + $sql .= "ORDER BY nome_tipo_regiao";
  1524 + return $this->execSQL($sql,$codigo_tipo_regiao);
  1525 + }
  1526 + /**
  1527 + * Obtem de um tipo de regiao a coluna do tipo serial
  1528 + * @param codigo do tipo de regiao
  1529 + */
  1530 + function listaTipoRegiaoSerial($codigo_tipo_regiao){
  1531 + $sql = "select * from ".$this->esquemaadmin."i3geoestat_tipo_regiao WHERE codigo_tipo_regiao = $codigo_tipo_regiao ";
  1532 + $regiao = $this->execSQL($sql,$codigo_tipo_regiao);
  1533 + $nome_esquema = $regiao["esquemadb"];
  1534 + $nome_tabela = $regiao["tabela"];
  1535 + $sql = "SELECT a.attname as coluna FROM pg_class s JOIN pg_depend d ON d.objid = s.oid JOIN pg_class t ON d.objid = s.oid AND d.refobjid = t.oid JOIN pg_attribute a ON (d.refobjid, d.refobjsubid) = (a.attrelid, a.attnum) JOIN pg_namespace n ON n.oid = s.relnamespace WHERE s.relkind = 'S' AND n.nspname = '$nome_esquema' AND t.relname = '$nome_tabela'";
  1536 + $colunas = $this->execSQLDB($regiao["codigo_estat_conexao"],$sql);
  1537 + $colunas = $colunas[0];
  1538 + return $colunas["coluna"];
  1539 + }
  1540 + /**
  1541 + * Obtem de uma tabela a coluna do tipo serial
  1542 + * @param codigo do tipo de regiao
  1543 + */
  1544 + function listaTabelaSerial($codigo_estat_conexao,$nome_esquema,$nome_tabela){
  1545 + $sql = "SELECT a.attname as coluna FROM pg_class s JOIN pg_depend d ON d.objid = s.oid JOIN pg_class t ON d.objid = s.oid AND d.refobjid = t.oid JOIN pg_attribute a ON (d.refobjid, d.refobjsubid) = (a.attrelid, a.attnum) JOIN pg_namespace n ON n.oid = s.relnamespace WHERE s.relkind = 'S' AND n.nspname = '$nome_esquema' AND t.relname = '$nome_tabela'";
  1546 + $colunas = $this->execSQLDB($codigo_estat_conexao,$sql);
  1547 + $colunas = $colunas[0];
  1548 + return $colunas["coluna"];
  1549 + }
  1550 + /**
  1551 + * Lista os dados de agregacao de uma regiao pai
  1552 + * @param codigo da regiao
  1553 + */
  1554 + function listaHierarquiaRegioes($codigoregiaopai=""){
  1555 + $sql = "select i3geoestat_agregaregiao.id_agregaregiao,i3geoestat_agregaregiao.colunaligacao_regiaopai,i3geoestat_tipo_regiao.codigo_tipo_regiao,i3geoestat_tipo_regiao.nome_tipo_regiao from ".$this->esquemaadmin."i3geoestat_tipo_regiao ";
  1556 + $sql .= "LEFT JOIN ".$this->esquemaadmin."i3geoestat_agregaregiao ";
  1557 + $sql .= "ON i3geoestat_tipo_regiao.codigo_tipo_regiao = i3geoestat_agregaregiao.codigo_tipo_regiao ";
  1558 + if($codigoregiaopai != ""){
  1559 + $sql .= " WHERE ".$this->esquemaadmin."i3geoestat_agregaregiao.codigo_tipo_regiao_pai = $codigoregiaopai";
  1560 + }
  1561 + else{
  1562 + $sql .= "WHERE ".$this->esquemaadmin."i3geoestat_agregaregiao.codigo_tipo_regiao IS NULL";
  1563 + }
  1564 + return $this->execSQL($sql,"");
  1565 + }
  1566 + function listaHierarquia($codigoregiaopai=""){
  1567 + $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao order by codigo_tipo_regiao";
  1568 + return $this->execSQL($sql,"");
  1569 + }
  1570 + /**
  1571 + * Lista os registros de um tipo de regiao
  1572 + * Se for definido o pai, lista os valores da regiao que e filha
  1573 + * Nesse caso e necessario definir o identificador da regiao pai para obter os registros na regiao filha
  1574 + * @param codigo do tipo de regiao
  1575 + * @param codigo do tipo de regiao pai
  1576 + * @param identificador da regiao (registro) pai
  1577 + */
  1578 + function listaDadosRegiao($codigo_tipo_regiao,$codigo_tipo_regiaopai="",$valorregiaopai=""){
  1579 + //pega a tabela, esquema e conexao para acessar os dados da regiao
  1580 + $regiao = $this->listaTipoRegiao($codigo_tipo_regiao);
  1581 + $c = $this->listaConexao($regiao["codigo_estat_conexao"],true);
  1582 + $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
  1583 + $c = $regiao["colunageo"];
  1584 + $bbox = "ST_XMin($c)||' '||ST_YMin($c)||' '||ST_XMax($c)||' '||ST_YMax($c) as ext ";
  1585 + $sql = "select $bbox,".$regiao["colunanomeregiao"]." as nome_regiao,".$regiao["identificador"]." as identificador_regiao from ".$regiao["esquemadb"].".".$regiao["tabela"];
  1586 + if($valorregiaopai != ""){
  1587 + $r = $this->listaAgregaRegiaoFilho($codigo_tipo_regiao,$codigo_tipo_regiaopai);
  1588 + $sql .= " WHERE ".$r["colunaligacao_regiaopai"]."::text = '$valorregiaopai'";
  1589 + }
  1590 + $sql .= " order by ".$regiao["colunanomeregiao"];
1591 1591  
1592   - $q = $dbh->query($sql,PDO::FETCH_ASSOC);
1593   - $r = array();
1594   - if($q){
1595   - $r = $q->fetchAll();
1596   - }
1597   - return $r;
1598   - }
1599   - /**
1600   - * Lista os registros de uma tabela que e uma regiao
1601   - * @param codigo do tipo de regiao
1602   - */
1603   - function listaDadosGeometriaRegiao($codigo_tipo_regiao){
1604   - //pega a tabela, esquema e conexao para acessar os dados da regiao
1605   - $regiao = $this->listaTipoRegiao($codigo_tipo_regiao);
1606   - $c = $this->listaConexao($regiao["codigo_estat_conexao"],true);
1607   - $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
1608   - $c = $regiao["colunageo"];
1609   - $s = "ST_dimension($c) as dimension ";
1610   - $sql = "select $s,".$regiao["colunanomeregiao"]." as nome_regiao,".$regiao["identificador"]." as identificador_regiao from ".$regiao["esquemadb"].".".$regiao["tabela"];
1611   - $sql .= " limit 1";
1612   - $q = $dbh->query($sql,PDO::FETCH_ASSOC);
1613   - $r = array();
1614   - if($q){
1615   - $r = $q->fetchAll();
1616   - }
1617   - return $r[0];
1618   - }
1619   - /**
1620   - * Lista uma ou todas as agregacoes de regioes existentes para um tipo de regiao
1621   - * @param codigo do tipo de regiao
1622   - * @param id da agregacao
1623   - */
1624   - function listaAgregaRegiao($codigo_tipo_regiao="",$id_agregaregiao=""){
1625   - $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao ";
1626   - if($id_agregaregiao != ""){
1627   - $sql .= "WHERE id_agregaregiao = $id_agregaregiao ";
1628   - }
1629   - else{
1630   - if($codigo_tipo_regiao != ""){
1631   - $sql .= "WHERE codigo_tipo_regiao = $codigo_tipo_regiao";
1632   - }
1633   - }
1634   - $sql .= " ORDER BY colunaligacao_regiaopai";
1635   - //echo $sql;exit;
1636   - return $this->execSQL($sql,$id_agregaregiao);
1637   - }
1638   - /**
1639   - * Lista uma ou todas as agregacoes de regioes filhas de um tipo de regiao
1640   - * @param codigo do tipo de regiao
1641   - * @param codigo do tipo de regiao que e pai
1642   - */
1643   - function listaAgregaRegiaoFilho($codigo_tipo_regiao,$codigo_tipo_regiao_pai){
1644   - $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao ";
1645   - $sql .= "WHERE codigo_tipo_regiao_pai = $codigo_tipo_regiao_pai ";
1646   - if($codigo_tipo_regiao != ""){
1647   - $sql .= "AND codigo_tipo_regiao = $codigo_tipo_regiao";
1648   - }
1649   - return $this->execSQL($sql,$codigo_tipo_regiao_pai);
1650   - }
1651   - /**
1652   - * Lista os esquemas em um banco de dados
1653   - * @param codigo da conexao
1654   - * @return array
1655   - */
1656   - function esquemasConexao($codigo_estat_conexao){
1657   - return $this->execSQLDB($codigo_estat_conexao,"SELECT oid,nspname as esquema FROM pg_namespace WHERE nspname NOT LIKE 'pg_%' AND nspname NOT LIKE '%_schema%' group by nspname,oid order by nspname");
1658   - }
1659   - /**
1660   - * Lista as tabelas de um esquema
1661   - * @param codigo da conexao
1662   - * @param nome do esquema
1663   - * @param sim|nao exclui da lista as tabelas que contem geometria
1664   - * @return string
1665   - */
1666   - function tabelasEsquema($codigo_estat_conexao,$nome_esquema,$excluigeom=""){
1667   - $sql = "SELECT table_name as tabela FROM information_schema.tables where table_schema = '$nome_esquema' AND table_schema NOT LIKE 'i3geo%' AND table_schema NOT LIKE 'pg_%' AND table_schema NOT LIKE '%_schema%'";
1668   - if(strtolower($excluigeom) == "sim"){
1669   - $sql = "SELECT c.table_name as tabela FROM information_schema.tables as c left join (SELECT distinct a.table_name FROM information_schema.tables as a left join information_schema.columns as b on a.table_name = b.table_name where a.table_schema = '$nome_esquema' and udt_name = 'geometry' ) as d on c.table_name = d.table_name where c.table_schema = '$nome_esquema' AND c.table_schema NOT LIKE 'i3geo%' AND c.table_schema NOT LIKE 'pg_%' AND c.table_schema NOT LIKE '%_schema%' and d.table_name is null";
1670   - }
1671   - return $this->execSQLDB($codigo_estat_conexao,$sql);
1672   - }
1673   - /**
1674   - * Lista as colunas de uma tabela
1675   - * @param codigo da conexao
1676   - * @param nome do esquema
1677   - * @param nome da tabela
1678   - * @param tipo de coluna (opcional)
1679   - * @param tipo de tratamento do parametro tipo, pode ser =|!=
1680   - * @return string
1681   - */
1682   - function colunasTabela($codigo_estat_conexao,$nome_esquema,$nome_tabela,$tipo="",$tipotratamento="="){
1683   - $colunas = array();
1684   - $res = $this->execSQLDB($codigo_estat_conexao,"SELECT column_name as coluna,udt_name FROM information_schema.columns where table_schema = '$nome_esquema' and table_name = '$nome_tabela'");
1685   - if($tipo != ""){
1686   - $res = $this->execSQLDB($codigo_estat_conexao,"SELECT column_name as coluna,udt_name FROM information_schema.columns where table_schema = '$nome_esquema' and udt_name $tipotratamento '$tipo' and table_name = '$nome_tabela'");
1687   - }
1688   - foreach($res as $c){
1689   - $colunas[] = $c["coluna"];
1690   - }
1691   - return $colunas;
1692   - }
1693   - /**
1694   - * Lista o comentario de uma tabela
1695   - * @param codigo da conexao
1696   - * @param nome do esquema
1697   - * @param nome da tabela
1698   - * @return string
1699   - */
1700   - function comentarioTabela($codigo_estat_conexao,$nome_esquema,$nome_tabela){
1701   - $colunas = array();
1702   - $sql = "SELECT pg_catalog.obj_description(c.oid, 'pg_class') AS comments FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) WHERE n.nspname = '".$nome_esquema."' AND c.relname = '".$nome_tabela."'";
1703   - $res = $this->execSQLDB($codigo_estat_conexao,$sql);
1704   - if(count($res) > 0){
1705   - $res = $res[0];
1706   - $res = $res["comments"];
1707   - }
1708   - else{
1709   - $res = "";
1710   - }
1711   - if($res == null){
1712   - $res = "";
1713   - }
1714   - return $res;
1715   - }
1716   - /**
1717   - * Lista os metadados de uma coluna
1718   - * Os metadados sao obtidos do proprio PostgreSQL
1719   - * @param codigo da conexao
1720   - * @param nome do esquema
1721   - * @param nome da tabela
1722   - * @param nome da coluna (opcional)
1723   - * @return string
1724   - */
1725   - function descreveColunasTabela($codigo_estat_conexao,$nome_esquema,$nome_tabela,$nome_coluna=""){
1726   - if($nome_coluna == ""){
1727   - return $this->execSQLDB($codigo_estat_conexao,"SELECT a.attnum,a.attname AS field,t.typname AS type,a.attlen AS length,a.atttypmod AS lengthvar,a.attnotnull AS notnull,p.nspname as esquema FROM pg_class c,pg_attribute a,pg_type t,pg_namespace p WHERE c.relname = '$nome_tabela' and p.nspname = '$nome_esquema' and a.attnum > 0 and a.attrelid = c.oid and a.atttypid = t.oid and c.relnamespace = p.oid ORDER BY a.attname");
1728   - }
1729   - else{
1730   - $res = $this->execSQLDB($codigo_estat_conexao,"SELECT a.attnum,a.attname AS field,t.typname AS type,a.attlen AS length,a.atttypmod AS lengthvar,a.attnotnull AS notnull,p.nspname as esquema FROM pg_class c,pg_attribute a,pg_type t,pg_namespace p WHERE a.attname = '$nome_coluna' AND c.relname = '$nome_tabela' and p.nspname = '$nome_esquema' and a.attnum > 0 and a.attrelid = c.oid and a.atttypid = t.oid and c.relnamespace = p.oid ORDER BY a.attname");
1731   - return $res[0];
1732   - }
1733   - }
1734   - /**
1735   - * Lista os dados de uma tabela
1736   - * @param codigo da conexao
1737   - * @param nome do esquema
1738   - * @param nome da tabela
1739   - * @param sim|nao inclui o WKT da geometria de colunas geo
1740   - * @param (opcional) numero de registros que serao listados
1741   - * @return array
1742   - */
1743   - function obtemDadosTabelaDB($codigo_estat_conexao,$nome_esquema,$nome_tabela,$geo="nao",$nreg=""){
1744   - $desccolunas = $this->descreveColunasTabela($codigo_estat_conexao, $nome_esquema, $nome_tabela);
1745   - $colunas = array();
1746   - $colsql = array();
1747   - foreach($desccolunas as $d){
1748   - if($d["type"] != "geometry" && $d["type"] != "geography"){
1749   - $colunas[] = $d["field"];
1750   - $colsql[] = $d["field"];
1751   - }
1752   - elseif($geo == "sim"){
1753   - $colunas[] = $d["field"];
1754   - $colsql[] = "ST_AsText(".$d["field"].") as ".$d["field"];
1755   - }
1756   - }
1757   - $sql = "SELECT ".implode(",",$colsql)." from ".$nome_esquema.".".$nome_tabela;
1758   - if($nreg != ""){
1759   - $sql = "SELECT ".implode(",",$colsql)." from ".$nome_esquema.".".$nome_tabela." limit $nreg";
1760   - }
1761   - $dados = $this->execSQLDB($codigo_estat_conexao,$sql );
1762   - $linhas = array();
1763   - foreach($dados as $d){
1764   - $l = array();
1765   - foreach($colunas as $c){
1766   - $l[] = $d[$c];
1767   - }
1768   - $linhas[] = $l;
1769   - }
1770   - return array("nomescolunas"=>$colunas,"colunas"=>$desccolunas,"linhas"=>$linhas);
1771   - }
1772   - /**
1773   - * Relatorio completo com a lista de variaveis e medidas
1774   - * @param codigo da variavel
1775   - * @param sim|nao inclui dados detalhados
1776   - * @return Array
1777   - */
1778   - function relatorioCompleto($codigo_variavel="",$dadosGerenciais="nao"){
1779   - $dados = array();
1780   - if($codigo_variavel != "" || !empty($codigo_variavel)){
1781   - $vs[] = $this->listaVariavel($codigo_variavel);
1782   - }
1783   - else{
1784   - $vs = $this->listaVariavel();
1785   - }
1786   - foreach($vs as $v){
1787   - $nivel1["id"] = $v["codigo_variavel"];
1788   - $nivel1["titulo"] = $v["nome"];
1789   - $nivel1["descricao"] = $v["descricao"];
1790   - $ms = $this->listaMedidaVariavel($v["codigo_variavel"]);
1791   - $nivel1["filhos"] = array();
1792   - foreach($ms as $m){
1793   - $nivel2["id"] = $m["id_medida_variavel"];
1794   - $nivel2["titulo"] = $m["nomemedida"];
1795   - $unidade = $this->listaUnidadeMedida($m["codigo_unidade_medida"]);
1796   - $unidade = "Unidade de medida: ".$unidade["nome"];
1797   - $periodo = $this->listaTipoPeriodo($m["codigo_tipo_periodo"]);
1798   - $periodo = "Per&iacute;odo de tempo: ".$periodo["nome"];
1799   - $regiao = $this->listaTipoRegiao($m["codigo_tipo_regiao"]);
1800   - $regiao = "Regi&atilde;o: ".$regiao["nome_tipo_regiao"];
1801   - $nivel2["descricao"] = $unidade.", ".$periodo.", ".$regiao;
1802   - $nivel2["fontes"] = $this->listaFonteinfoMedida($m["id_medida_variavel"]);
1803   - $nivel2["links"] = $this->listaLinkMedida($m["id_medida_variavel"]);
1804   - $nivel2["dadosgerenciais"] = "";
1805   - if($dadosGerenciais == "sim"){
1806   - $nivel2["dadosgerenciais"] = $m;
1807   - }
1808   - $nivel1["filhos"][] = $nivel2;
1809   - }
1810   - $dados[] = $nivel1;
1811   - }
1812   - return $dados;
1813   - }
1814   - /**
1815   - * Cria um raltorio formatado em HTML
1816   - * @param dados obtidos com relatorioCompleto
1817   - * @param sim|nao inclui os dados detalhados
1818   - * @return string
1819   - */
1820   - function formataRelatorioHtml($dados,$detalhes="sim"){
1821   - $html[] = "<div class='var_div_relatorio'>";
1822   - $var_cor = "var_cor1";
1823   - foreach($dados as $variavel){
1824   - $html[] = "<div class='".$var_cor."'>";
1825   - $html[] = "<h1 style=padding:3px; ><b>".$variavel["titulo"];
1826   - $html[] = "</b><br><span style='color:rgb(100,100,100)'>".$variavel["descricao"]."</span></h1>";
1827   - $filhos = $variavel["filhos"];
1828   - foreach($filhos as $f){
1829   - $html[] = "<h2 style='position:relative;left:10px;'>ID: <u>".$f["id"]."</u> - ".$f["titulo"]."</h2>";
1830   - $html[] = "<div style='position:relative;padding-left:20px;'>";
1831   - $html[] = "<p>".$f["descricao"]."</p>";
1832   - if($detalhes == "sim"){
1833   - $html[] = "<p><b>Fontes:</b></p>";
1834   - foreach($f["fontes"] as $fonte){
1835   - $html[] = "<p><a href='".$fonte["link"]."' >".$fonte["titulo"]."</a></p>";
1836   - }
1837   - $html[] = "<p><b>Links:</b></p>";
1838   - foreach($f["links"] as $link){
1839   - $html[] = "<p><a href='".$link["link"]."' >".$link["nome"]."</a></p>";
1840   - }
1841   - if($f["dadosgerenciais"] != ""){
1842   - $html[] = "<span style='color:gray'>";
1843   - $html[] = "esquemadb = ".$f["dadosgerenciais"][esquemadb].", ";
1844   - $html[] = "tabela = ".$f["dadosgerenciais"][tabela].", ";
1845   - $html[] = "colunavalor = ".$f["dadosgerenciais"][colunavalor].", ";
1846   - $html[] = "colunaidgeo = ".$f["dadosgerenciais"][colunaidgeo].", ";
1847   - $html[] = "filtro = ".$f["dadosgerenciais"][filtro].", ";
1848   - $html[] = "colunaidunico = ".$f["dadosgerenciais"][colunaidunico];
1849   - $html[] = "</span>";
1850   - }
1851   - }
1852   - $html[] = "</div>";
1853   - }
1854   - $html[] = "</div>";
1855   - if($var_cor == "var_cor1"){
1856   - $var_cor = "var_cor2";
1857   - }
1858   - else{
1859   - $var_cor = "var_cor1";
1860   - }
1861   - }
1862   - $html[] = "</div><br><br>";
1863   - return implode("",$html);
1864   - }
1865   - /**
1866   - * Cria um relatorio no formato XML
1867   - * @param dados obtidos com relatorioCompleto
1868   - * @return string
1869   - */
1870   - function formataXML($dados){
1871   - $chaves = array_keys($dados[0]);
1872   - if(count($chaves) == 0){
1873   - $chaves = false;
1874   - }
1875   - $xml = "<"."\x3F"."xml version='1.0' encoding='UTF-8' "."\x3F".">" . PHP_EOL;
1876   - $xml .= '<result-set>' . PHP_EOL;
1877   - //tenta descobrir o tipo de coluna
1878   - //$xml .= '<!--java.lang.String,java.lang.Integer-->' . PHP_EOL;
1879   - $xmldados = "";
1880   - if($chaves){
1881   - foreach($dados as $d){
1882   - $xmldados .= "<row>" . PHP_EOL;
1883   - foreach($chaves as $c){
1884   - $xmldados .= "<".$c.">".$d[$c]."</".$c.">" . PHP_EOL;
1885   - }
1886   - $xmldados .= "</row>" . PHP_EOL;
1887   - }
1888   - $tipos = array();
1889   - $d = $dados[0];
1890   - foreach($chaves as $c){
1891   - if(is_numeric($d[$c])){
1892   - $tipos[] = "java.lang.Integer";
1893   - }
1894   - else{
1895   - $tipos[] = "java.lang.String";
1896   - }
1897   - }
1898   - $xml .= '<!--'.implode($tipos,",").'-->' . PHP_EOL;
1899   - }
1900   - else{
1901   - while (list($key, $val) = each($dados)) {
1902   - $xmldados .= "<row>" . PHP_EOL;
1903   - $xmldados .= "<nome>".$key."</nome>" . PHP_EOL;
1904   - $xmldados .= "<valor>".$val."</valor>" . PHP_EOL;
1905   - $xmldados .= "</row>" . PHP_EOL;
1906   - }
1907   - reset($dados);
1908   - $tipos = array();
1909   - while (list($key, $val) = each($dados)) {
1910   - if(is_numeric($val)){
1911   - $tipos[] = "java.lang.Integer";
1912   - }
1913   - else{
1914   - $tipos[] = "java.lang.String";
1915   - }
1916   - if(is_numeric($key)){
1917   - $tipos[] = "java.lang.Integer";
1918   - }
1919   - else{
1920   - $tipos[] = "java.lang.String";
1921   - }
1922   - break;
1923   - }
1924   - $xml .= '<!--'.implode($tipos,",").'-->' . PHP_EOL;
1925   - }
1926   - $xml .= $xmldados;
1927   - $xml .= '</result-set>' . PHP_EOL;
1928   - return $xml;
1929   - }
1930   - /**
1931   - * Verifica se em um array existe uma chave com determinado valor
1932   - * @param Array
1933   - * @param nome da chave
1934   - * @param valor a ser buscado
1935   - * @return boolean
1936   - */
1937   - function buscaNoArray($lista,$chave,$valor){
1938   - foreach($lista as $l){
1939   - if($l[$chave] == $valor){
1940   - return true;
1941   - }
1942   - }
1943   - return false;
1944   - }
1945   - /**
1946   - * Obtem o valor de um registro de uma tabela de regiao com base na coordenada de longitude e latitude
1947   - * @param codigo do tipo de regiao
1948   - * @param longitude
1949   - * @param latitude
1950   - * @return array
1951   - */
1952   - function xy2regiao($codigo_tipo_regiao,$x,$y){
1953   - //pega a tabela, esquema e conexao para acessar os dados da regiao
1954   - $regiao = $this->listaTipoRegiao($codigo_tipo_regiao);
1955   - $c = $this->listaConexao($regiao["codigo_estat_conexao"],true);
1956   - $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
1957   - $sql = "select ".$regiao["identificador"]." as identificador_regiao,".$regiao["colunanomeregiao"]." as nomeregiao from i3geo_metaestat.".$regiao["tabela"]." WHERE ST_within(ST_GeomFromText('POINT($x $y)',".$regiao["srid"]."),".$regiao["colunageo"].")";
1958   - $q = $dbh->query($sql,PDO::FETCH_ASSOC);
1959   - $r = $q->fetchAll();
1960   - if(count($r) > 0){
1961   - return $r[0];
1962   - }
1963   - else{
1964   - return "";
1965   - }
1966   - }
1967   - /**
1968   - * Busca os dados de uma medida de variavel para uma regiao
1969   - * Identificador da regiao e o valor a ser encontrado na coluna de
1970   - * ligacao da tabela da medida da variavel com a tabela com as localidades (tipo de regiao)
1971   - * @param identificador da regiao
1972   - * @param id da medida da variavel
1973   - * @return multitype:unknown multitype: string
1974   - */
1975   - function listaAtributosMedidaVariavelRegiao ($identificador_regiao,$id_medida_variavel){
1976   - $medida = $this->listaMedidaVariavel("",$id_medida_variavel);
1977   - $c = $this->listaConexao($medida["codigo_estat_conexao"],true);
1978   - if($medida["colunavalor"] == ""){
1979   - return "";
1980   - }
1981   - $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
1982   - $colunassql[] = $medida["colunavalor"].",".$medida["colunaidunico"];
  1592 + $q = $dbh->query($sql,PDO::FETCH_ASSOC);
  1593 + $r = array();
  1594 + if($q){
  1595 + $r = $q->fetchAll();
  1596 + }
  1597 + return $r;
  1598 + }
  1599 + /**
  1600 + * Lista os registros de uma tabela que e uma regiao
  1601 + * @param codigo do tipo de regiao
  1602 + */
  1603 + function listaDadosGeometriaRegiao($codigo_tipo_regiao){
  1604 + //pega a tabela, esquema e conexao para acessar os dados da regiao
  1605 + $regiao = $this->listaTipoRegiao($codigo_tipo_regiao);
  1606 + $c = $this->listaConexao($regiao["codigo_estat_conexao"],true);
  1607 + $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
  1608 + $c = $regiao["colunageo"];
  1609 + $s = "ST_dimension($c) as dimension ";
  1610 + $sql = "select $s,".$regiao["colunanomeregiao"]." as nome_regiao,".$regiao["identificador"]." as identificador_regiao from ".$regiao["esquemadb"].".".$regiao["tabela"];
  1611 + $sql .= " limit 1";
  1612 + $q = $dbh->query($sql,PDO::FETCH_ASSOC);
  1613 + $r = array();
  1614 + if($q){
  1615 + $r = $q->fetchAll();
  1616 + }
  1617 + return $r[0];
  1618 + }
  1619 + /**
  1620 + * Lista uma ou todas as agregacoes de regioes existentes para um tipo de regiao
  1621 + * @param codigo do tipo de regiao
  1622 + * @param id da agregacao
  1623 + */
  1624 + function listaAgregaRegiao($codigo_tipo_regiao="",$id_agregaregiao=""){
  1625 + $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao ";
  1626 + if($id_agregaregiao != ""){
  1627 + $sql .= "WHERE id_agregaregiao = $id_agregaregiao ";
  1628 + }
  1629 + else{
  1630 + if($codigo_tipo_regiao != ""){
  1631 + $sql .= "WHERE codigo_tipo_regiao = $codigo_tipo_regiao";
  1632 + }
  1633 + }
  1634 + $sql .= " ORDER BY colunaligacao_regiaopai";
  1635 + //echo $sql;exit;
  1636 + return $this->execSQL($sql,$id_agregaregiao);
  1637 + }
  1638 + /**
  1639 + * Lista uma ou todas as agregacoes de regioes filhas de um tipo de regiao
  1640 + * @param codigo do tipo de regiao
  1641 + * @param codigo do tipo de regiao que e pai
  1642 + */
  1643 + function listaAgregaRegiaoFilho($codigo_tipo_regiao,$codigo_tipo_regiao_pai){
  1644 + $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao ";
  1645 + $sql .= "WHERE codigo_tipo_regiao_pai = $codigo_tipo_regiao_pai ";
  1646 + if($codigo_tipo_regiao != ""){
  1647 + $sql .= "AND codigo_tipo_regiao = $codigo_tipo_regiao";
  1648 + }
  1649 + return $this->execSQL($sql,$codigo_tipo_regiao_pai);
  1650 + }
  1651 + /**
  1652 + * Lista os esquemas em um banco de dados
  1653 + * @param codigo da conexao
  1654 + * @return array
  1655 + */
  1656 + function esquemasConexao($codigo_estat_conexao){
  1657 + return $this->execSQLDB($codigo_estat_conexao,"SELECT oid,nspname as esquema FROM pg_namespace WHERE nspname NOT LIKE 'pg_%' AND nspname NOT LIKE '%_schema%' group by nspname,oid order by nspname");
  1658 + }
  1659 + /**
  1660 + * Lista as tabelas de um esquema
  1661 + * @param codigo da conexao
  1662 + * @param nome do esquema
  1663 + * @param sim|nao exclui da lista as tabelas que contem geometria
  1664 + * @return string
  1665 + */
  1666 + function tabelasEsquema($codigo_estat_conexao,$nome_esquema,$excluigeom=""){
  1667 + $sql = "SELECT table_name as tabela FROM information_schema.tables where table_schema = '$nome_esquema' AND table_schema NOT LIKE 'i3geo%' AND table_schema NOT LIKE 'pg_%' AND table_schema NOT LIKE '%_schema%'";
  1668 + if(strtolower($excluigeom) == "sim"){
  1669 + $sql = "SELECT c.table_name as tabela FROM information_schema.tables as c left join (SELECT distinct a.table_name FROM information_schema.tables as a left join information_schema.columns as b on a.table_name = b.table_name where a.table_schema = '$nome_esquema' and udt_name = 'geometry' ) as d on c.table_name = d.table_name where c.table_schema = '$nome_esquema' AND c.table_schema NOT LIKE 'i3geo%' AND c.table_schema NOT LIKE 'pg_%' AND c.table_schema NOT LIKE '%_schema%' and d.table_name is null";
  1670 + }
  1671 + return $this->execSQLDB($codigo_estat_conexao,$sql);
  1672 + }
  1673 + /**
  1674 + * Lista as colunas de uma tabela
  1675 + * @param codigo da conexao
  1676 + * @param nome do esquema
  1677 + * @param nome da tabela
  1678 + * @param tipo de coluna (opcional)
  1679 + * @param tipo de tratamento do parametro tipo, pode ser =|!=
  1680 + * @return string
  1681 + */
  1682 + function colunasTabela($codigo_estat_conexao,$nome_esquema,$nome_tabela,$tipo="",$tipotratamento="="){
  1683 + $colunas = array();
  1684 + $res = $this->execSQLDB($codigo_estat_conexao,"SELECT column_name as coluna,udt_name FROM information_schema.columns where table_schema = '$nome_esquema' and table_name = '$nome_tabela'");
  1685 + if($tipo != ""){
  1686 + $res = $this->execSQLDB($codigo_estat_conexao,"SELECT column_name as coluna,udt_name FROM information_schema.columns where table_schema = '$nome_esquema' and udt_name $tipotratamento '$tipo' and table_name = '$nome_tabela'");
  1687 + }
  1688 + foreach($res as $c){
  1689 + $colunas[] = $c["coluna"];
  1690 + }
  1691 + return $colunas;
  1692 + }
  1693 + /**
  1694 + * Lista o comentario de uma tabela
  1695 + * @param codigo da conexao
  1696 + * @param nome do esquema
  1697 + * @param nome da tabela
  1698 + * @return string
  1699 + */
  1700 + function comentarioTabela($codigo_estat_conexao,$nome_esquema,$nome_tabela){
  1701 + $colunas = array();
  1702 + $sql = "SELECT pg_catalog.obj_description(c.oid, 'pg_class') AS comments FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) WHERE n.nspname = '".$nome_esquema."' AND c.relname = '".$nome_tabela."'";
  1703 + $res = $this->execSQLDB($codigo_estat_conexao,$sql);
  1704 + if(count($res) > 0){
  1705 + $res = $res[0];
  1706 + $res = $res["comments"];
  1707 + }
  1708 + else{
  1709 + $res = "";
  1710 + }
  1711 + if($res == null){
  1712 + $res = "";
  1713 + }
  1714 + return $res;
  1715 + }
  1716 + /**
  1717 + * Lista os metadados de uma coluna
  1718 + * Os metadados sao obtidos do proprio PostgreSQL
  1719 + * @param codigo da conexao
  1720 + * @param nome do esquema
  1721 + * @param nome da tabela
  1722 + * @param nome da coluna (opcional)
  1723 + * @return string
  1724 + */
  1725 + function descreveColunasTabela($codigo_estat_conexao,$nome_esquema,$nome_tabela,$nome_coluna=""){
  1726 + if($nome_coluna == ""){
  1727 + return $this->execSQLDB($codigo_estat_conexao,"SELECT a.attnum,a.attname AS field,t.typname AS type,a.attlen AS length,a.atttypmod AS lengthvar,a.attnotnull AS notnull,p.nspname as esquema FROM pg_class c,pg_attribute a,pg_type t,pg_namespace p WHERE c.relname = '$nome_tabela' and p.nspname = '$nome_esquema' and a.attnum > 0 and a.attrelid = c.oid and a.atttypid = t.oid and c.relnamespace = p.oid ORDER BY a.attname");
  1728 + }
  1729 + else{
  1730 + $res = $this->execSQLDB($codigo_estat_conexao,"SELECT a.attnum,a.attname AS field,t.typname AS type,a.attlen AS length,a.atttypmod AS lengthvar,a.attnotnull AS notnull,p.nspname as esquema FROM pg_class c,pg_attribute a,pg_type t,pg_namespace p WHERE a.attname = '$nome_coluna' AND c.relname = '$nome_tabela' and p.nspname = '$nome_esquema' and a.attnum > 0 and a.attrelid = c.oid and a.atttypid = t.oid and c.relnamespace = p.oid ORDER BY a.attname");
  1731 + return $res[0];
  1732 + }
  1733 + }
  1734 + /**
  1735 + * Lista os dados de uma tabela
  1736 + * @param codigo da conexao
  1737 + * @param nome do esquema
  1738 + * @param nome da tabela
  1739 + * @param sim|nao inclui o WKT da geometria de colunas geo
  1740 + * @param (opcional) numero de registros que serao listados
  1741 + * @return array
  1742 + */
  1743 + function obtemDadosTabelaDB($codigo_estat_conexao,$nome_esquema,$nome_tabela,$geo="nao",$nreg=""){
  1744 + $desccolunas = $this->descreveColunasTabela($codigo_estat_conexao, $nome_esquema, $nome_tabela);
  1745 + $colunas = array();
  1746 + $colsql = array();
  1747 + foreach($desccolunas as $d){
  1748 + if($d["type"] != "geometry" && $d["type"] != "geography"){
  1749 + $colunas[] = $d["field"];
  1750 + $colsql[] = $d["field"];
  1751 + }
  1752 + elseif($geo == "sim"){
  1753 + $colunas[] = $d["field"];
  1754 + $colsql[] = "ST_AsText(".$d["field"].") as ".$d["field"];
  1755 + }
  1756 + }
  1757 + $sql = "SELECT ".implode(",",$colsql)." from ".$nome_esquema.".".$nome_tabela;
  1758 + if($nreg != ""){
  1759 + $sql = "SELECT ".implode(",",$colsql)." from ".$nome_esquema.".".$nome_tabela." limit $nreg";
  1760 + }
  1761 + $dados = $this->execSQLDB($codigo_estat_conexao,$sql );
  1762 + $linhas = array();
  1763 + foreach($dados as $d){
  1764 + $l = array();
  1765 + foreach($colunas as $c){
  1766 + $l[] = $d[$c];
  1767 + }
  1768 + $linhas[] = $l;
  1769 + }
  1770 + return array("nomescolunas"=>$colunas,"colunas"=>$desccolunas,"linhas"=>$linhas);
  1771 + }
  1772 + /**
  1773 + * Relatorio completo com a lista de variaveis e medidas
  1774 + * @param codigo da variavel
  1775 + * @param sim|nao inclui dados detalhados
  1776 + * @return Array
  1777 + */
  1778 + function relatorioCompleto($codigo_variavel="",$dadosGerenciais="nao"){
  1779 + $dados = array();
  1780 + if($codigo_variavel != "" || !empty($codigo_variavel)){
  1781 + $vs[] = $this->listaVariavel($codigo_variavel);
  1782 + }
  1783 + else{
  1784 + $vs = $this->listaVariavel();
  1785 + }
  1786 + foreach($vs as $v){
  1787 + $nivel1["id"] = $v["codigo_variavel"];
  1788 + $nivel1["titulo"] = $v["nome"];
  1789 + $nivel1["descricao"] = $v["descricao"];
  1790 + $ms = $this->listaMedidaVariavel($v["codigo_variavel"]);
  1791 + $nivel1["filhos"] = array();
  1792 + foreach($ms as $m){
  1793 + $nivel2["id"] = $m["id_medida_variavel"];
  1794 + $nivel2["titulo"] = $m["nomemedida"];
  1795 + $unidade = $this->listaUnidadeMedida($m["codigo_unidade_medida"]);
  1796 + $unidade = "Unidade de medida: ".$unidade["nome"];
  1797 + $periodo = $this->listaTipoPeriodo($m["codigo_tipo_periodo"]);
  1798 + $periodo = "Per&iacute;odo de tempo: ".$periodo["nome"];
  1799 + $regiao = $this->listaTipoRegiao($m["codigo_tipo_regiao"]);
  1800 + $regiao = "Regi&atilde;o: ".$regiao["nome_tipo_regiao"];
  1801 + $nivel2["descricao"] = $unidade.", ".$periodo.", ".$regiao;
  1802 + $nivel2["fontes"] = $this->listaFonteinfoMedida($m["id_medida_variavel"]);
  1803 + $nivel2["links"] = $this->listaLinkMedida($m["id_medida_variavel"]);
  1804 + $nivel2["dadosgerenciais"] = "";
  1805 + if($dadosGerenciais == "sim"){
  1806 + $nivel2["dadosgerenciais"] = $m;
  1807 + }
  1808 + $nivel1["filhos"][] = $nivel2;
  1809 + }
  1810 + $dados[] = $nivel1;
  1811 + }
  1812 + return $dados;
  1813 + }
  1814 + /**
  1815 + * Cria um raltorio formatado em HTML
  1816 + * @param dados obtidos com relatorioCompleto
  1817 + * @param sim|nao inclui os dados detalhados
  1818 + * @return string
  1819 + */
  1820 + function formataRelatorioHtml($dados,$detalhes="sim"){
  1821 + $html[] = "<div class='var_div_relatorio'>";
  1822 + $var_cor = "var_cor1";
  1823 + foreach($dados as $variavel){
  1824 + $html[] = "<div class='".$var_cor."'>";
  1825 + $html[] = "<h1 style=padding:3px; ><b>".$variavel["titulo"];
  1826 + $html[] = "</b><br><span style='color:rgb(100,100,100)'>".$variavel["descricao"]."</span></h1>";
  1827 + $filhos = $variavel["filhos"];
  1828 + foreach($filhos as $f){
  1829 + $html[] = "<h2 style='position:relative;left:10px;'>ID: <u>".$f["id"]."</u> - ".$f["titulo"]."</h2>";
  1830 + $html[] = "<div style='position:relative;padding-left:20px;'>";
  1831 + $html[] = "<p>".$f["descricao"]."</p>";
  1832 + if($detalhes == "sim"){
  1833 + $html[] = "<p><b>Fontes:</b></p>";
  1834 + foreach($f["fontes"] as $fonte){
  1835 + $html[] = "<p><a href='".$fonte["link"]."' >".$fonte["titulo"]."</a></p>";
  1836 + }
  1837 + $html[] = "<p><b>Links:</b></p>";
  1838 + foreach($f["links"] as $link){
  1839 + $html[] = "<p><a href='".$link["link"]."' >".$link["nome"]."</a></p>";
  1840 + }
  1841 + if($f["dadosgerenciais"] != ""){
  1842 + $html[] = "<span style='color:gray'>";
  1843 + $html[] = "esquemadb = ".$f["dadosgerenciais"][esquemadb].", ";
  1844 + $html[] = "tabela = ".$f["dadosgerenciais"][tabela].", ";
  1845 + $html[] = "colunavalor = ".$f["dadosgerenciais"][colunavalor].", ";
  1846 + $html[] = "colunaidgeo = ".$f["dadosgerenciais"][colunaidgeo].", ";
  1847 + $html[] = "filtro = ".$f["dadosgerenciais"][filtro].", ";
  1848 + $html[] = "colunaidunico = ".$f["dadosgerenciais"][colunaidunico];
  1849 + $html[] = "</span>";
  1850 + }
  1851 + }
  1852 + $html[] = "</div>";
  1853 + }
  1854 + $html[] = "</div>";
  1855 + if($var_cor == "var_cor1"){
  1856 + $var_cor = "var_cor2";
  1857 + }
  1858 + else{
  1859 + $var_cor = "var_cor1";
  1860 + }
  1861 + }
  1862 + $html[] = "</div><br><br>";
  1863 + return implode("",$html);
  1864 + }
  1865 + /**
  1866 + * Cria um relatorio no formato XML
  1867 + * @param dados obtidos com relatorioCompleto
  1868 + * @return string
  1869 + */
  1870 + function formataXML($dados){
  1871 + $chaves = array_keys($dados[0]);
  1872 + if(count($chaves) == 0){
  1873 + $chaves = false;
  1874 + }
  1875 + $xml = "<"."\x3F"."xml version='1.0' encoding='UTF-8' "."\x3F".">" . PHP_EOL;
  1876 + $xml .= '<result-set>' . PHP_EOL;
  1877 + //tenta descobrir o tipo de coluna
  1878 + //$xml .= '<!--java.lang.String,java.lang.Integer-->' . PHP_EOL;
  1879 + $xmldados = "";
  1880 + if($chaves){
  1881 + foreach($dados as $d){
  1882 + $xmldados .= "<row>" . PHP_EOL;
  1883 + foreach($chaves as $c){
  1884 + $xmldados .= "<".$c.">".$d[$c]."</".$c.">" . PHP_EOL;
  1885 + }
  1886 + $xmldados .= "</row>" . PHP_EOL;
  1887 + }
  1888 + $tipos = array();
  1889 + $d = $dados[0];
  1890 + foreach($chaves as $c){
  1891 + if(is_numeric($d[$c])){
  1892 + $tipos[] = "java.lang.Integer";
  1893 + }
  1894 + else{
  1895 + $tipos[] = "java.lang.String";
  1896 + }
  1897 + }
  1898 + $xml .= '<!--'.implode($tipos,",").'-->' . PHP_EOL;
  1899 + }
  1900 + else{
  1901 + while (list($key, $val) = each($dados)) {
  1902 + $xmldados .= "<row>" . PHP_EOL;
  1903 + $xmldados .= "<nome>".$key."</nome>" . PHP_EOL;
  1904 + $xmldados .= "<valor>".$val."</valor>" . PHP_EOL;
  1905 + $xmldados .= "</row>" . PHP_EOL;
  1906 + }
  1907 + reset($dados);
  1908 + $tipos = array();
  1909 + while (list($key, $val) = each($dados)) {
  1910 + if(is_numeric($val)){
  1911 + $tipos[] = "java.lang.Integer";
  1912 + }
  1913 + else{
  1914 + $tipos[] = "java.lang.String";
  1915 + }
  1916 + if(is_numeric($key)){
  1917 + $tipos[] = "java.lang.Integer";
  1918 + }
  1919 + else{
  1920 + $tipos[] = "java.lang.String";
  1921 + }
  1922 + break;
  1923 + }
  1924 + $xml .= '<!--'.implode($tipos,",").'-->' . PHP_EOL;
  1925 + }
  1926 + $xml .= $xmldados;
  1927 + $xml .= '</result-set>' . PHP_EOL;
  1928 + return $xml;
  1929 + }
  1930 + /**
  1931 + * Verifica se em um array existe uma chave com determinado valor
  1932 + * @param Array
  1933 + * @param nome da chave
  1934 + * @param valor a ser buscado
  1935 + * @return boolean
  1936 + */
  1937 + function buscaNoArray($lista,$chave,$valor){
  1938 + foreach($lista as $l){
  1939 + if($l[$chave] == $valor){
  1940 + return true;
  1941 + }
  1942 + }
  1943 + return false;
  1944 + }
  1945 + /**
  1946 + * Obtem o valor de um registro de uma tabela de regiao com base na coordenada de longitude e latitude
  1947 + * @param codigo do tipo de regiao
  1948 + * @param longitude
  1949 + * @param latitude
  1950 + * @return array
  1951 + */
  1952 + function xy2regiao($codigo_tipo_regiao,$x,$y){
  1953 + //pega a tabela, esquema e conexao para acessar os dados da regiao
  1954 + $regiao = $this->listaTipoRegiao($codigo_tipo_regiao);
  1955 + $c = $this->listaConexao($regiao["codigo_estat_conexao"],true);
  1956 + $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
  1957 + $sql = "select ".$regiao["identificador"]." as identificador_regiao,".$regiao["colunanomeregiao"]." as nomeregiao from i3geo_metaestat.".$regiao["tabela"]." WHERE ST_within(ST_GeomFromText('POINT($x $y)',".$regiao["srid"]."),".$regiao["colunageo"].")";
  1958 + $q = $dbh->query($sql,PDO::FETCH_ASSOC);
  1959 + $r = $q->fetchAll();
  1960 + if(count($r) > 0){
  1961 + return $r[0];
  1962 + }
  1963 + else{
  1964 + return "";
  1965 + }
  1966 + }
  1967 + /**
  1968 + * Busca os dados de uma medida de variavel para uma regiao
  1969 + * Identificador da regiao e o valor a ser encontrado na coluna de
  1970 + * ligacao da tabela da medida da variavel com a tabela com as localidades (tipo de regiao)
  1971 + * @param identificador da regiao
  1972 + * @param id da medida da variavel
  1973 + * @return multitype:unknown multitype: string
  1974 + */
  1975 + function listaAtributosMedidaVariavelRegiao ($identificador_regiao,$id_medida_variavel){
  1976 + $medida = $this->listaMedidaVariavel("",$id_medida_variavel);
  1977 + $c = $this->listaConexao($medida["codigo_estat_conexao"],true);
  1978 + if($medida["colunavalor"] == ""){
  1979 + return "";
  1980 + }
  1981 + $dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
  1982 + $colunassql[] = $medida["colunavalor"].",".$medida["colunaidunico"];
1983 1983  
1984   - $alias[] = $medida["nomemedida"];
1985   - $colunas[] = $medida["colunavalor"];
1986   - $alias[] = "idunico";
1987   - $colunas[] = $medida["colunaidunico"];
1988   - $descricao[] = $medida["unidade_medida"];
1989   - $parametros = $this->listaParametro($id_medida_variavel);
1990   - foreach($parametros as $p){
1991   - $colunassql[] = $p["coluna"];
1992   - $alias[] = $p["nome"];
1993   - $descricao[] = $p["descricao"];
1994   - $colunas[] = $p["coluna"];
1995   - }
  1984 + $alias[] = $medida["nomemedida"];
  1985 + $colunas[] = $medida["colunavalor"];
  1986 + $alias[] = "idunico";
  1987 + $colunas[] = $medida["colunaidunico"];
  1988 + $descricao[] = $medida["unidade_medida"];
  1989 + $parametros = $this->listaParametro($id_medida_variavel);
  1990 + foreach($parametros as $p){
  1991 + $colunassql[] = $p["coluna"];
  1992 + $alias[] = $p["nome"];
  1993 + $descricao[] = $p["descricao"];
  1994 + $colunas[] = $p["coluna"];
  1995 + }
1996 1996  
1997   - $sql = "select ".implode(",",$colunassql)." from ".$medida["esquemadb"].".".$medida["tabela"]." WHERE ".$medida["colunaidgeo"]."::text = ".$identificador_regiao."::text ";
1998   - if($medida["filtro"] != ""){
1999   - $sql .= " and ".$medida["filtro"];
2000   - }
2001   - $q = $dbh->query($sql,PDO::FETCH_ASSOC);
2002   - $r = $q->fetchAll();
2003   - return array("dados"=>$r,"aliascolunas"=>$alias,"colunas"=>$colunas,"descricao"=>$descricao);
2004   - }
2005   - /**
2006   - * Converte um tipo de regiao em shapefile e retorna o nome do arquivo
2007   - * @param codigo do tipo de regiao
2008   - * @return string
2009   - */
2010   - function regiao2shp($codigo_tipo_regiao){
2011   - $regiao = $this->listaTipoRegiao($codigo_tipo_regiao);
2012   - $dados = $this->obtemDadosTabelaDB($regiao["codigo_estat_conexao"],$regiao["esquemadb"],$regiao["tabela"],"sim");
2013   - $tipol = $this->listaPropGeoRegiao($codigo_tipo_regiao);
2014   - include_once(dirname(__FILE__)."/classesphp/classe_shp.php");
2015   - $s = new SHP();
2016   - //st_dimension returns 0 for POINT, 1 for LINESTRING, 2 for POLYGON
2017   - //echo MS_SHP_POINT.", ".MS_SHP_ARC.", ".MS_SHP_POLYGON.", ".MS_SHP_MULTIPOINT;
2018   - //1, 3, 5, 8
2019   - $conv[0] = 1;
2020   - $conv[1] = 3;
2021   - $conv[2] = 5;
2022   - //cria as colunas
2023   - $cni = 0;
2024   - foreach($dados["colunas"] as $t){
2025   - $temp = strtoupper($t["field"]);
2026   - if(strlen($temp) > 10){
2027   - $temp = substr($temp,0,8).($cni++);
2028   - }
2029   - if($t["type"] == "varchar" || $t["type"] == "char" || $t["type"] == "character varying" || $t["type"] == "character" || $t["type"] == "text"){
2030   - $def[] = array($temp,"C","254");
2031   - }
2032   - else{
2033   - if($t["lengthvar"] < 0){
2034   - $t["lengthvar"] = 0;
2035   - }
2036   - $def[] = array($temp,"N", $t["length"],$t["lengthvar"]);
2037   - }
2038   - }
2039   - $nomeshp = $this->dir_tmp."/regiao$codigo_tipo_regiao"."_".$this->nomeRandomico();
2040   - $dbaseExiste = false;
2041   - if(function_exists("dbase_create")){
2042   - $dbaseExiste = true;
2043   - }
2044   - //para manipular dbf
2045   - if($dbaseExiste == false){
2046   - include_once (dirname(__FILE__)."/../pacotes/phpxbase/api_conversion.php");
2047   - $db = xbase_create($nomeshp.".dbf", $def);
2048   - }
2049   - else
2050   - {$db = dbase_create($nomeshp.".dbf", $def);}
2051   - $dbname = $nomeshp.".dbf";
2052   - $reg = array();
2053   - $novoshpf = ms_newShapefileObj($nomeshp.".shp", $conv[$tipol["st_dimension"]]);
2054   - $cols = $dados["colunas"];
2055   - $nc = count($dados["colunas"]);
2056   - foreach($dados["linhas"] as $l){
2057   - $reg = array();
2058   - for($i=0;$i<$nc;$i++){
2059   - if($cols[$i]["type"] != "geometry" && $cols[$i]["type"] != "geography"){
2060   - $reg[] = $l[$i];
2061   - }
2062   - else{
2063   - $reg[] = 0;
2064   - if($cols[$i]["field"] == $regiao["colunageo"]){
2065   - $shape = ms_shapeObjFromWkt($l[$i]);
2066   - }
2067   - }
2068   - }
2069   - $novoshpf->addShape($shape);
2070   - if($dbaseExiste == false){
2071   - xbase_add_record($db,$reg);
2072   - }
2073   - else{
2074   - dbase_add_record($db,$reg);
2075   - }
2076   - }
2077   - if($this->dbaseExiste == false){
2078   - xbase_close($db);
2079   - }
2080   - else{
2081   - dbase_close($db);
2082   - }
2083   - return $nomeshp;
2084   - }
2085   - /*
2086   - * Testa se os elementos de um array sao numericos
2087   - */
2088   - function testaNumerico($valores){
2089   - foreach ($valores as $valor) {
2090   - if(!empty($valor) && !is_numeric($valor)) {
2091   - echo "valor nao numerico";
2092   - exit;
2093   - }
2094   - }
2095   - }
  1997 + $sql = "select ".implode(",",$colunassql)." from ".$medida["esquemadb"].".".$medida["tabela"]." WHERE ".$medida["colunaidgeo"]."::text = ".$identificador_regiao."::text ";
  1998 + if($medida["filtro"] != ""){
  1999 + $sql .= " and ".$medida["filtro"];
  2000 + }
  2001 + $q = $dbh->query($sql,PDO::FETCH_ASSOC);
  2002 + $r = $q->fetchAll();
  2003 + return array("dados"=>$r,"aliascolunas"=>$alias,"colunas"=>$colunas,"descricao"=>$descricao);
  2004 + }
  2005 + /**
  2006 + * Converte um tipo de regiao em shapefile e retorna o nome do arquivo
  2007 + * @param codigo do tipo de regiao
  2008 + * @return string
  2009 + */
  2010 + function regiao2shp($codigo_tipo_regiao){
  2011 + $regiao = $this->listaTipoRegiao($codigo_tipo_regiao);
  2012 + $dados = $this->obtemDadosTabelaDB($regiao["codigo_estat_conexao"],$regiao["esquemadb"],$regiao["tabela"],"sim");
  2013 + $tipol = $this->listaPropGeoRegiao($codigo_tipo_regiao);
  2014 + include_once(dirname(__FILE__)."/classesphp/classe_shp.php");
  2015 + $s = new SHP();
  2016 + //st_dimension returns 0 for POINT, 1 for LINESTRING, 2 for POLYGON
  2017 + //echo MS_SHP_POINT.", ".MS_SHP_ARC.", ".MS_SHP_POLYGON.", ".MS_SHP_MULTIPOINT;
  2018 + //1, 3, 5, 8
  2019 + $conv[0] = 1;
  2020 + $conv[1] = 3;
  2021 + $conv[2] = 5;
  2022 + //cria as colunas
  2023 + $cni = 0;
  2024 + foreach($dados["colunas"] as $t){
  2025 + $temp = strtoupper($t["field"]);
  2026 + if(strlen($temp) > 10){
  2027 + $temp = substr($temp,0,8).($cni++);
  2028 + }
  2029 + if($t["type"] == "varchar" || $t["type"] == "char" || $t["type"] == "character varying" || $t["type"] == "character" || $t["type"] == "text"){
  2030 + $def[] = array($temp,"C","254");
  2031 + }
  2032 + else{
  2033 + if($t["lengthvar"] < 0){
  2034 + $t["lengthvar"] = 0;
  2035 + }
  2036 + $def[] = array($temp,"N", $t["length"],$t["lengthvar"]);
  2037 + }
  2038 + }
  2039 + $nomeshp = $this->dir_tmp."/regiao$codigo_tipo_regiao"."_".$this->nomeRandomico();
  2040 + $dbaseExiste = false;
  2041 + if(function_exists("dbase_create")){
  2042 + $dbaseExiste = true;
  2043 + }
  2044 + //para manipular dbf
  2045 + if($dbaseExiste == false){
  2046 + include_once (dirname(__FILE__)."/../pacotes/phpxbase/api_conversion.php");
  2047 + $db = xbase_create($nomeshp.".dbf", $def);
  2048 + }
  2049 + else
  2050 + {$db = dbase_create($nomeshp.".dbf", $def);}
  2051 + $dbname = $nomeshp.".dbf";
  2052 + $reg = array();
  2053 + $novoshpf = ms_newShapefileObj($nomeshp.".shp", $conv[$tipol["st_dimension"]]);
  2054 + $cols = $dados["colunas"];
  2055 + $nc = count($dados["colunas"]);
  2056 + foreach($dados["linhas"] as $l){
  2057 + $reg = array();
  2058 + for($i=0;$i<$nc;$i++){
  2059 + if($cols[$i]["type"] != "geometry" && $cols[$i]["type"] != "geography"){
  2060 + $reg[] = $l[$i];
  2061 + }
  2062 + else{
  2063 + $reg[] = 0;
  2064 + if($cols[$i]["field"] == $regiao["colunageo"]){
  2065 + $shape = ms_shapeObjFromWkt($l[$i]);
  2066 + }
  2067 + }
  2068 + }
  2069 + $novoshpf->addShape($shape);
  2070 + if($dbaseExiste == false){
  2071 + xbase_add_record($db,$reg);
  2072 + }
  2073 + else{
  2074 + dbase_add_record($db,$reg);
  2075 + }
  2076 + }
  2077 + if($this->dbaseExiste == false){
  2078 + xbase_close($db);
  2079 + }
  2080 + else{
  2081 + dbase_close($db);
  2082 + }
  2083 + return $nomeshp;
  2084 + }
  2085 + /*
  2086 + * Testa se os elementos de um array sao numericos
  2087 + */
  2088 + function testaNumerico($valores){
  2089 + foreach ($valores as $valor) {
  2090 + if(!empty($valor) && !is_numeric($valor)) {
  2091 + echo "valor nao numerico";
  2092 + exit;
  2093 + }
  2094 + }
  2095 + }
2096 2096 }
2097 2097 ?>
2098 2098 \ No newline at end of file
... ...
css/i3geo7.css.php 100644 → 100755
ferramentas/editorgm/editorgm_compacto.js 100644 → 100755
ferramentas/editorol/editorol_compacto.js 100644 → 100755
ferramentas/metaestat/index.js
... ... @@ -54,6 +54,7 @@ i3GEOF.metaestat = {
54 54 * guarda o valor do codigo da ultima medidda da variavel escolhida ou passada como parametro na inicializacao
55 55 */
56 56 ID_MEDIDA_VARIAVEL: "",
  57 + NOME_MEDIDA_VARIAVEL: "",
57 58 /**
58 59 * codigo da conexao com o banco de dados que sera utilizada como default
59 60 * e utilizado em customizacoes da interface, como o geosaude, permitindo acessar as listas de esquemas e tabelas
... ... @@ -104,8 +105,11 @@ i3GEOF.metaestat = {
104 105 * @param codigo da variavel que aparecera como selecionada no combo de selecao de variaveis. Default ""
105 106 * @param codigo da medida da variavel que aparecera como selecionada no combo de selecao de medidas. Default ""
106 107 */
107   - inicia: function(Interface,codigo_variavel,id_medida_variavel){
  108 + inicia: function(Interface,codigo_variavel,id_medida_variavel,nome_medida_variavel){
108 109 i3GEOF.metaestat.log("i3GEOF.metaestat.inicia()");
  110 + if(nome_medida_variavel){
  111 + i3GEOF.metaestat.NOME_MEDIDA_VARIAVEL = nome_medida_variavel;
  112 + }
109 113 if(Interface && Interface != ""){
110 114 i3GEOF.metaestat.INTERFACE = Interface;
111 115 }
... ... @@ -623,32 +627,43 @@ i3GEOF.metaestat = {
623 627 defineTitulo: function(){
624 628 i3GEOF.metaestat.log("i3GEOF.metaestat.comum.defineTitulo()");
625 629 //se nao tiver parametros, filtro e vazio
626   - if(i3GEOF.metaestat.parametros.dados.length == 0 || i3GEOF.metaestat.INTERFACE === "flutuanteSimples"){
  630 + if(i3GEOF.metaestat.parametros.dados.length == 0){
627 631 return "";
628 632 }
629 633 //deixa vazio para que o titulo seja definido pelo PHP que monta o mapfile
630   - if(i3GEOF.metaestat.comum.tipoRep[1] == ""){
  634 + if(i3GEOF.metaestat.comum.tipoRep[0] == ""){
631 635 return "";
632 636 }
633 637 var i,n,c,titulo="",
634   - t=[],
635   - dados = i3GEOF.metaestat.parametros.dados;
  638 + t=[],
  639 + dados = i3GEOF.metaestat.parametros.dados;
636 640 if($i("i3geoCartoComboVariavel") && $i("i3geoCartoComboVariavel").options){
637 641 titulo = $i("i3geoCartoComboVariavel").options[$i("i3geoCartoComboVariavel").selectedIndex].label +" - ";
  642 + } else {
  643 + titulo = i3GEOF.metaestat.parametros.dados[0].nomemedida;
  644 + }
  645 + if($i("i3geoCartoComboRegioesMedidasVariavel")){
  646 + t.push($i("i3geoCartoComboRegioesMedidasVariavel").options[$i("i3geoCartoComboRegioesMedidasVariavel").selectedIndex].label);
  647 + } else {
  648 + t.push(i3GEOF.metaestat.comum.tipoRegiao[1]);
638 649 }
639   - titulo += $i("i3geoCartoComboMedidasVariavel").options[$i("i3geoCartoComboMedidasVariavel").selectedIndex].label +" - "+
640   - i3GEOF.metaestat.comum.tipoRep[1] +" - "+
641   - i3GEOF.metaestat.comum.tipoClassificacao[1] + " - " +
642   - i3GEOF.metaestat.comum.tipoRegiao[1];
  650 + if($i("i3geoCartoComboTipoClassificacao")){
  651 + t.push($i("i3geoCartoComboTipoClassificacao").options[$i("i3geoCartoComboTipoClassificacao").selectedIndex].label);
  652 + } else {
  653 + t.push(i3GEOF.metaestat.comum.tipoClassificacao[1]);
  654 + }
  655 + if(i3GEOF.metaestat.comum.tipoRep && i3GEOF.metaestat.comum.tipoRep[1] != ""){
  656 + t.push(i3GEOF.metaestat.comum.tipoRep[1]);
  657 + }
  658 + dados = $i("i3geoCartoParametrosMedidasVariavel").getElementsByTagName("input");
643 659 n = dados.length;
644 660 for(i=0;i<n;i++){
645   - c = $i("comboparametro_"+dados[i].id_parametro_medida+"_"+dados[i].id_pai);
646   - if(c && c.value != ""){
647   - t.push(dados[i].nome+" = "+c.value);
  661 + if(dados[i].checked){
  662 + t.push(dados[i].value);
648 663 }
649 664 }
650 665 if(t.length > 0){
651   - return titulo+" - "+t.join(", ");
  666 + return titulo +" (" + t.join("/") + ")";
652 667 }
653 668 else{
654 669 return titulo;
... ...
js/catalogoMetaestat.js
... ... @@ -146,7 +146,7 @@ i3GEO.catalogoMetaestat = {
146 146 "metaestat",
147 147 "metaestat",
148 148 "dependencias.php",
149   - "i3GEOF.metaestat.inicia('flutuanteSimples',''," + id_medida_variavel + ")"
  149 + "i3GEOF.metaestat.inicia('flutuanteSimples',''," + id_medida_variavel + ",'" + nomemedida + "')"
150 150 );
151 151 }
152 152 };
153 153 \ No newline at end of file
... ...
js/compactados/ajuda_compacto.js 100644 → 100755
js/compactados/analise_compacto.js 100644 → 100755
js/compactados/arvoredecamadas_compacto.js 100644 → 100755
js/compactados/arvoredetemas_compacto.js 100644 → 100755
js/compactados/base64_compacto.js 100644 → 100755
js/compactados/busca_compacto.js 100644 → 100755
js/compactados/caixaDeFerramentas_compacto.js 100644 → 100755
js/compactados/calculo_compacto.js 100644 → 100755
js/compactados/catalogoDir_compacto.js 100644 → 100755
js/compactados/catalogoEstrelas_compacto.js 100644 → 100755
js/compactados/catalogoInde_compacto.js 100644 → 100755
js/compactados/catalogoMapas_compacto.js 100644 → 100755
js/compactados/catalogoMenus_compacto.js 100644 → 100755
js/compactados/catalogoMetaestat_compacto.js 100644 → 100755
js/compactados/catalogoOgc_compacto.js 100644 → 100755
js/compactados/catalogoRegioes_compacto.js 100644 → 100755
js/compactados/catalogoSistemas_compacto.js 100644 → 100755
js/compactados/configura_compacto.js 100644 → 100755
js/compactados/coordenadas_compacto.js 100644 → 100755
js/compactados/desenho_compacto.js 100644 → 100755
js/compactados/dicionario_ajuda_compacto.js 100644 → 100755
js/compactados/dicionario_compacto.js 100644 → 100755
js/compactados/editor_compacto.js 100644 → 100755
js/compactados/eventos_compacto.js 100644 → 100755
js/compactados/guias_compacto.js 100644 → 100755
js/compactados/idioma_compacto.js 100644 → 100755
js/compactados/ini_i3geo_compacto.js 100644 → 100755
js/compactados/interface_compacto.js 100644 → 100755
js/compactados/janela_compacto.js 100644 → 100755
js/compactados/legenda_compacto.js 100644 → 100755
js/compactados/login_compacto.js 100644 → 100755
js/compactados/mapa_compacto.js 100644 → 100755
js/compactados/maparef_compacto.js 100644 → 100755
js/compactados/marcador_compacto.js 100644 → 100755
js/compactados/mustache.js 100644 → 100755
js/compactados/navega_compacto.js 100644 → 100755
js/compactados/php_compacto.js 100644 → 100755
js/compactados/plugini3geo_compacto.js 100644 → 100755
js/compactados/proj4js.js 100644 → 100755
js/compactados/social_compacto.js 100644 → 100755
js/compactados/tema_compacto.js 100644 → 100755
js/compactados/util_compacto.js 100644 → 100755
js/compactados/wicket.js 100644 → 100755
js/i3geo_tudo_compacto7.js.php 100644 → 100755
pacotes/cpaint/cpaint2_compacto.inc.js 100644 → 100755
pacotes/mobileesp/mdetect_compacto.js 100644 → 100755
pacotes/yui290/build/carousel/carousel_compacto.js 100644 → 100755
pacotes/yui290/build/container/container_compacto.js 100644 → 100755
pacotes/yui290/build/container/container_core_compacto.js 100644 → 100755
pacotes/yui290/build/resize/resize_compacto.js 100644 → 100755
pacotes/yui290/build/treeview/treeview_compacto.js 100644 → 100755
pacotes/yui290/build/utilities/utilities_compacto.js 100644 → 100755