Statistics
| Revision:

root / i3geo50 / classesjs / datadownload.js @ 4963

History | View | Annotate | Download (12.6 KB)

1
/*
2
Sistema de download de dados geográficos.
3

4
Lista os temas configurados no menu de temas e que permitem download.
5

6
Para utilizar esse sistema acesse http://localhost/i3geo/datadownload.htm
7

8
Pode-se usar um par�metro para abrir o aplicativo e imediatamente mostrar os arquivos para download, por exemplo
9

10
datadownload.htm?bioma
11

12
Arquivo:
13

14
i3geo/classesjs/datadownload.js
15

16
Licença:
17

18
GPL2
19

20
i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
21

22
Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil
23
Desenvolvedor: Edmar Moretti edmar.moretti@gmail.com
24

25
Este programa é software livre; você pode redistribuí-lo
26
e/ou modificá-lo sob os termos da Licença Pública Geral
27
GNU conforme publicada pela Free Software Foundation;
28

29
Este programa é distribuído na expectativa de que seja útil,
30
porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita
31
de COMERCIABILIDADE OU ADEQUACÃO A UMA FINALIDADE ESPECÍFICA.
32
Consulte a Licença Pública Geral do GNU para mais detalhes.
33
Você deve ter recebido uma cópia da Licença Pública Geral do
34
GNU junto com este programa; se não, escreva para a
35
Free Software Foundation, Inc., no endereço
36
59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
37

38
Veja:
39

40
<datadownload.htm>
41
*/
42
/*
43
Indica a localiza&ccedil;&atilde;o do i3geo. Por default, procura no diret&oacute;rio onde foi executada a plica&ccedil;&atilde;o datadownload.
44
No caso do datadownload.htm ser disparado de outro local, &eacute; necess&aacute;rio definir essa vari&aacute;vel antes de chamar a fun&ccedil;&atilde;o DDinicia
45
*/
46
loc = window.location.href;
47
g_locaplic = loc.split("/datadownload.htm");
48
g_locaplic = g_locaplic[0];
49

    
50
temp = loc.split("?");
51
if(temp[1])
52
{temaDownload = temp[1];}
53
else
54
{temaDownload = "";}
55

    
56
//
57
//para efeitos de compatibilidade
58
//
59
try{i3GEO.configura.locaplic = g_locaplic;}
60
catch(e){}
61
//
62
//diretorio onde esta o i3geo
63
//
64
g_i3geo = "";
65
//
66
//fun&ccedil;&atilde;o que ser&aacute; utilizada quando o usu&aacute;rio clicar na &aacute;rvore
67
//
68
g_arvoreClicks = "";
69
/*
70
Tipo de acesso aos dados.
71

72
g_tipo &eacute; uma vari&aacute;vel que pode ser definida antes de iniciar a funcao DDinicia
73
g_tipo = "menutemas", indica que a lista de temas para download ser&aacute; buscada no xml com a lista de temas do I3Geo
74
se g_tipo for "dir", a aplica&ccedil;&atilde;o entender&aacute; que se trata de uma busca em diret&oacute;rios
75
nesse caso, g_dirbase deve conter a raiz da busca no servidor, por exemplo:
76
g_dirbase = "/opt/www/html/geodados"
77
g_dirarquivos indica o diret&oacute;rio inicial para listagem dos arquivos
78
por default, g_tipo = "menutemas"
79

80
Exemplo que pode ser utilizado em um HTML armazenado no diret&oacute;rio vegetacao2002:
81

82
g_tipo = "dir"
83
g_dirbase = "/opt/www/html/geodados/brasil/vegetacao/vegetacao2002"
84
g_dirbaseDown = "http://"+window.location.host+"/geodados/brasil/vegetacao/vegetacao2002"
85
g_dirarquivos = "/opt/www/html/geodados/brasil/vegetacao/vegetacao2002"
86
g_i3geo = "/i3geo"
87
g_locaplic = "http://"+window.location.host+g_i3geo
88

89
Tipo:
90
{string}
91

92
Valores:
93

94
dir - indica que os dados ser&atilde;o buscados em diret&oacute;rios no servidor.
95

96
menutemas - indica que os dados ser&atilde;o buscados no arquivo menutemas/menutemas.xml ou
97
no sistema de administra&ccedil;&atilde;o do i3geo
98
*/
99
g_tipo = "menutemas";
100
/*
101
Url para o endere&ccedil;o definido em g_dirbase.
102
&Eacute; utilizada para montar o link de acesso aos arquivos quando g_tipo = 'dir'
103

104
Tipo:
105
{string}
106

107
*/
108
g_dirbaseDown = "";
109

    
110
/*
111
Endere&ccedil;o no servidor onde est&atilde;o os arquivos ou diret&oacute;rios que poder&atilde;o ser acessados
112

113
Tipo:
114
{string}
115

116
*/
117
g_dirbase = "";
118
/*
119
Endere&ccedil;o do diret&oacute;rio que ser&aacute; acessado na inicializa&ccedil;&atilde;o da aplica&ccedil;&atilde;o
120

121
Tipo:
122
{string}
123

124
*/
125
g_dirarquivos = "";
126
/*
127
Inicia o aplicativo montando a &aacute;rvore de op&ccedil;&otilde;es e preenchendo a DIV arvore.
128

129
Deve existir no HTML um DIV com id='arvore'.
130
*/
131
function DDinicia()
132
{
133
        if(!document.getElementById("arvoreTemas"))
134
        {
135
                alert("Nao foi encontrado o DIV arvoreTemas");
136
                return;
137
        }
138
        if (g_tipo == "menutemas")
139
        {
140
                i3GEO.arvoreDeTemas.INCLUISISTEMAS = false;
141
                i3GEO.arvoreDeTemas.FILTRADOWNLOAD = true;
142
                i3GEO.arvoreDeTemas.INCLUIWMS = false;
143
                i3GEO.arvoreDeTemas.OPCOESADICIONAIS.incluiArvore = false;
144
                i3GEO.arvoreDeTemas.OPCOESADICIONAIS.incluibusca = false;
145
                //i3GEO.arvoreDeTemas.TIPOBOTAO = "radio";
146
                i3GEO.arvoreDeTemas.cria("",g_locaplic,"arvoreTemas","datadownload_download\(this\)");
147
        }
148
        if (g_tipo == "dir")
149
        {
150
                var p = g_locaplic+"/classesphp/mapa_controle.php?funcao=listaDiretorios&map_file=&diretorio="+g_dirbase;
151
                var cp = new cpaint();
152
                //cp.set_debug(2)
153
                cp.set_response_type("JSON");
154
                cp.call(p,"listaDiretorios",processaDiretorios);
155
        }
156
        dataDownloadLinks(g_RSSl);
157
        if(temaDownload != ""){
158
                datadownload_download({"title":temaDownload});
159
        }
160
}
161
/*
162
Cahamado pela fun&ccedil;&atilde;o DDinicia. Recebe os dados da fun&ccedil;&atilde;o Ajax com a lista de diretorios.
163

164
Monta a &aacute;rvore para navega&ccedil;&atilde;o pelos diret&oacute;rios.
165

166
Parametros:
167

168
retorno - string formatada com os dados para montagem da &aacute;rvore.
169
*/
170
function processaDiretorios(retorno)
171
{
172
        if(!document.getElementById("arvoreTemas"))
173
        {
174
                alert("Nao foi encontrado o DIV arvoreTemas");
175
                return;
176
        }
177
        if ((retorno.data != "erro") && (retorno.data != undefined))
178
        {
179
                treeDir = new Object();
180
                treeDir = treeviewNew("treeDir", "default", "arvoreTemas", null);
181
                treeDir.createItem("raiz", "<b>Diret&oacute;rios</b>", g_locaplic+"/imagens/temas.png", true, true, true, null);
182
                treeDir.itemExpand = expandeDiretorio;
183
                for (var ig=0;ig<retorno.data.length; ig++)
184
                {
185
                        var nomeDir = retorno.data[ig];
186
                        treeDir.createItem(g_dirbase+"/"+nomeDir, nomeDir, g_locaplic+"/imagens/folder-s.gif", true, true, true, "raiz");
187
                }
188
        }
189
}
190
/*
191
Expande um diret&oacute;rio quando o usu&aacute;rio clica no n&oacute; da &aacute;rvore de diret&oacute;rios.
192

193
Definido na fun&ccedil;&atilde;o processaDiretorios. Ap&oacute;s serem mostrados os sub-diret&oacute;rios &eacute; disparada a fun&ccedil;&atilde;o listaArquivos para mostrar a lista de arquivos existentes no diret&oacute;rio selecionado.
194

195
Parametros:
196

197
id - id do n&oacute; clicado na &aacute;rvore treeview
198
*/
199
function expandeDiretorio(id)
200
{
201
        var volta = function (retorno)
202
        {
203
                if ((retorno.data != "erro") && (retorno.data != undefined))
204
                {
205
                        for (var ig=0;ig<retorno.data.length; ig++)
206
                        {
207
                                var nomeDir = retorno.data[ig];
208
                                if (!document.getElementById(id+"/"+nomeDir))
209
                                treeDir.createItem(id+"/"+nomeDir, nomeDir, g_locaplic+"/imagens/folder-s.gif", true, true, true, id);
210
                        }
211
                        listaArquivos(id);
212
                }
213
        };
214
        var p = g_locaplic+"/classesphp/mapa_controle.php?funcao=listaDiretorios&map_file=&diretorio="+id;
215
        var cp = new cpaint();
216
        //cp.set_debug(2)
217
        cp.set_response_type("JSON");
218
        cp.call(p,"listaDiretorios",volta);
219
}
220
/*
221
Lista os arquivos de um diret&oacute;rio.
222

223
No HTML deve existir um DIV com id='corpo'. Nesse div ser&aacute; inclu&iacute;da a lista.
224

225
Parametros:
226

227
dir - diret&oacute;rio no servidor
228
*/
229
function listaArquivos(dir)
230
{
231
        if(!document.getElementById("corpo"))
232
        {
233
                alert("Nao foi encontrado o DIV corpo");
234
                return;
235
        }
236
        document.getElementById("corpo").innerHTML = "";
237
        var re = new RegExp(g_dirbase, "g");
238
        var d = dir.replace(re,'');
239
        var ins = "<div style=text-align:left; >Diret&oacute;rio: "+d+"<br><br>";
240
        var volta = function (retorno)
241
        {
242
                if ((retorno.data != "erro") && (retorno.data != undefined))
243
                {
244
                        ins += "<b>Diret&oacute;rios:</b><br><br>";
245
                        for (var ig=0;ig<retorno.data.diretorios.length; ig++)
246
                        {
247
                                ins += "<span style=cursor:pointer onclick=listaArquivos('"+g_dirbase+d+"/"+retorno.data.diretorios[ig]+"') ><img src="+g_locaplic+"/imagens/folder-s.gif />"+retorno.data.diretorios[ig]+"</span><br><br>";
248
                        }
249
                        ins += "<b>Arquivos:</b><br><br>";
250
                        for (var ig=0;ig<retorno.data.arquivos.length; ig++)
251
                        {
252
                                ins += "<a href='"+g_dirbaseDown+d+"/"+retorno.data.arquivos[ig]+"' target=new >"+retorno.data.arquivos[ig]+"</a><br><br>";
253
                        }
254
                        document.getElementById("corpo").innerHTML = ins;
255
                }
256
        };
257
        var p = g_locaplic+"/classesphp/mapa_controle.php?funcao=listaArquivos&map_file=&diretorio="+dir;
258
        var cp = new cpaint();
259
        //cp.set_debug(2)
260
        cp.set_response_type("JSON");
261
        cp.call(p,"listaDiretorios",volta);
262
}
263
/*
264
Gera os arquivos para download do shape file de um tema.
265

266
*/
267
function datadownload_download(obj)
268
{
269
        if(!$i("panellistaarquivos")){
270
                YAHOO.namespace("datadownloadLista");
271
                YAHOO.datadownloadLista.panel = new YAHOO.widget.Panel("panellistaarquivos", {zIndex:2000, iframe:false, width:"450px",align:"left", visible:false, draggable:true, close:true, modal:true } );
272
                YAHOO.datadownloadLista.panel.setHeader("Arquivos");
273
                YAHOO.datadownloadLista.panel.setBody("");
274
                YAHOO.datadownloadLista.panel.setFooter("");
275
                YAHOO.datadownloadLista.panel.render(document.body);
276
                YAHOO.datadownloadLista.panel.center();
277
        };
278
        YAHOO.datadownloadLista.panel.setBody($trad("d28"));
279
        YAHOO.datadownloadLista.panel.show();
280
        //document.getElementById("corpo").innerHTML = "Aguarde. Gerando arquivos..."
281
        var p = g_locaplic+"/classesphp/mapa_controle.php?map_file=&funcao=download3&tema="+obj.title;
282
        //caso a camada venha do sistema de metadados estatisticos e seja uma variavel
283
        if(obj.name && obj.name === "metaestat"){
284
                p = g_locaplic+"/classesphp/mapa_controle.php?map_file=&funcao=download3&id_medida_variavel="+obj.title;
285
        }
286
        if(obj.name && obj.name === "regioesmetaestat"){
287
                p = g_locaplic+"/classesphp/mapa_controle.php?map_file=&funcao=download3&codigo_tipo_regiao="+obj.title.replace("metaregiao_","");
288
        }
289

    
290
        temaEscolhidoDownload = obj.title;
291
        var cp = new cpaint();
292
        //cp.set_debug(2)
293
        cp.set_response_type("JSON");
294
        cp.call(p,"downloadTema2",mostraDownload);
295
}
296
/*
297
Mostra na tela os arquivos convertidos para shape file com link para download.
298
*/
299
function mostraDownload(retorno)
300
{
301
        var ins = "";
302
        if (retorno.data != undefined)
303
        {
304
                retorno = retorno.data;
305
                var arqs = retorno.arquivos.split(",");
306
                var n = arqs.length;
307
                if(retorno == "erro")
308
                {ins = "<p style=color:red >Ocorreu um erro. O tema n&atilde;o foi encontrado. Pode ser que o c&oacute;digo do tema n&atilde;o existe na defini&ccedil;&atilde;o do mapfile. Informe o administrador do sistema.<br>";}
309
                else
310
                {
311
                        ins = "<b>Links de acesso:</b><br><br>";
312
                        ins += "<a href='"+window.location.href.split("?")[0]+"?tema="+retorno.tema+"&temaDownload="+retorno.tema+"'>Link permanente de acesso<br><br>";
313
                        ins += "<a href='"+window.location.protocol+"//"+window.location.host+"/"+retorno.mapfileurl+"' target=blank >Arquivo de configura&ccedil;&atilde;o Mapfile</a><br>";
314
                        ins += "<a href='"+g_locaplic+"/classesphp/mapa_controle.php?funcao=TEMA2SLD&tema="+retorno.tema+"&map_file="+retorno.mapfile+"' target=blank >Arquivo de legenda SLD</a><br><br>";
315
                        ins += "Servi&ccedil;o OGC: "+g_locaplic+"/ogc.php?tema="+retorno.tema+"<br><br>";
316
                        ins += "<a href='"+g_locaplic+"/ogc.php?tema="+retorno.tema+"&SERVICE=WMS&VERSION=1.1.0&REQUEST=GetCapabilities' target=blank >OGC GetCapabilities</a><br><br>";
317

    
318
                        for (var arq=0;arq<n;arq++)
319
                        {
320
                                ins += "<a href='"+window.location.protocol+"//"+window.location.host+"/"+arqs[arq]+"'>"+arqs[arq]+"</a><br>";
321
                        }
322
                        ins += "<br><a href='"+g_locaplic+"/fontetema.php?tema="+temaEscolhidoDownload+"' target=blank >Fonte</a>";
323
                        if(retorno.nreg)
324
                        {ins += "<br><br>N&uacute;mero de registros ="+retorno.nreg;}
325
                }
326
        }
327
        else
328
        {
329
                ins = "<p style=color:red >Ocorreu um erro<br>";
330
        }
331
        YAHOO.datadownloadLista.panel.setBody(ins);
332
        YAHOO.datadownloadLista.panel.show();
333
}
334
/*
335
Mostra uma lista de links baseado em um arquivo rss.
336

337
Utilizado para acrescentar outros links no sistema de download
338

339
Por default, o rss &eacute; menutemas/linksdownload.xml
340

341
Parametros:
342

343
rss - endere&ccedil;o do arquivo rss.
344
*/
345
function dataDownloadLinks(rss)
346
{
347
        var monta = function(retorno)
348
        {
349
                var reg = /Erro/gi;
350
                if (retorno.data.search(reg) != -1)
351
                {
352
                        alert("OOps! Ocorreu um erro\n"+retorno.data);
353
                        return;
354
                }
355
                var linhas = retorno.data.split("|");
356
                var ins = "";
357
                var n = linhas.length;
358
                if(n == 1){return;}
359
                for (var i=0;i<n; i++)
360
                {
361
                        var caso = linhas[i].split("#");
362
                        if (i > 0)
363
                        {
364
                                ins += "<a style=text-align:left href='"+caso[2]+"' target=blank >"+caso[0]+"&nbsp;("+caso[1]+")</a>";
365
                                ins += "<br>";
366
                        }
367
                        else
368
                        {ins += "<p class=clique ><b>"+caso[0]+"</b>&nbsp;"+caso[1]+"&nbsp;</p>";}
369
                }
370
                document.getElementById("RSSl").innerHTML = ins;
371
        };
372
        if (document.getElementById("RSSl"))
373
        {
374
                if (rss.length > 0)
375
                {
376
                        var p = g_locaplic+"/classesphp/wscliente.php?funcao=listaRSSws2&rss="+rss.join("|")+"&tipo=DOWNLOAD";
377
                        var cp = new cpaint();
378
                        //cp.set_debug(2)
379
                        cp.set_response_type("JSON");
380
                        cp.call(p,"listaRSSws2",monta);
381
                }
382
        }
383
}