...
...
@@ -0,0 +1,380 @@
1
+/*
2
+Title: Melhor caminho
3
+
4
+Calcula o melhor caminho entre dois pontos com base em uma imagem raster
5
+
6
+Arquivo:
7
+
8
+i3geo/ferramentas/melhorcaminho/index.js.php
9
+
10
+Licenca:
11
+
12
+GPL2
13
+
14
+i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
15
+
16
+Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil
17
+Desenvolvedor: Edmar Moretti edmar.moretti@gmail.com
18
+
19
+Este programa é software livre; você pode redistribuí-lo
20
+e/ou modificá-lo sob os termos da Licença Pública Geral
21
+GNU conforme publicada pela Free Software Foundation;
22
+
23
+Este programa é distribuído na expectativa de que seja útil,
24
+porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita
25
+de COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
26
+Consulte a Licença Pública Geral do GNU para mais detalhes.
27
+Você deve ter recebido uma cópia da Licença Pública Geral do
28
+GNU junto com este programa; se não, escreva para a
29
+Free Software Foundation, Inc., no endereço
30
+59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
31
+*/
32
+
33
+if(typeof(i3GEOF) === 'undefined'){
34
+ var i3GEOF = {};
35
+}
36
+/*
37
+Classe: i3GEOF.melhorcaminho
38
+
39
+*/
40
+i3GEOF.melhorcaminho = {
41
+ /*
42
+ Variavel: aguarde
43
+
44
+ Estilo do objeto DOM com a imagem de aguarde existente no cabeçalho da janela.
45
+ */
46
+ aguarde: "",
47
+ COORDENADASTEMA: "",
48
+ /*
49
+ Para efeitos de compatibilidade antes da versão 4.7 que não tinha dicionário
50
+ */
51
+ criaJanelaFlutuante: function(){
52
+ i3GEOF.melhorcaminho.iniciaDicionario();
53
+ },
54
+ /*
55
+ Function: iniciaDicionario
56
+
57
+ Carrega o dicionário e chama a função que inicia a ferramenta
58
+
59
+ O Javascript é carregado com o id i3GEOF.nomedaferramenta.dicionario_script
60
+ */
61
+ iniciaDicionario: function(){
62
+ if(typeof(i3GEOF.melhorcaminho.dicionario) === 'undefined'){
63
+ i3GEO.util.scriptTag(
64
+ i3GEO.configura.locaplic+"/ferramentas/melhorcaminho/dicionario.js",
65
+ "i3GEOF.melhorcaminho.iniciaJanelaFlutuante()",
66
+ "i3GEOF.melhorcaminho.dicionario_script"
67
+ );
68
+ }
69
+ else{
70
+ i3GEOF.melhorcaminho.iniciaJanelaFlutuante();
71
+ }
72
+ },
73
+ /*
74
+ Function: inicia
75
+
76
+ Inicia a ferramenta. É chamado por criaJanelaFlutuante
77
+
78
+ Parametro:
79
+
80
+ iddiv {String} - id do div que receberá o conteudo HTML da ferramenta
81
+ */
82
+ inicia: function(iddiv){
83
+ try{
84
+ i3GEO.util.mudaCursor(i3GEO.configura.cursores,"default",i3GEO.Interface.IDMAPA,i3GEO.configura.locaplic);
85
+ $i(iddiv).innerHTML += i3GEOF.melhorcaminho.html();
86
+ i3GEOF.melhorcaminho.t0();
87
+ }
88
+ catch(erro){i3GEO.janela.tempoMsg(erro);}
89
+ },
90
+ /*
91
+ Function: html
92
+
93
+ Gera o código html para apresentação das opções da ferramenta
94
+
95
+ Retorno:
96
+
97
+ String com o código html
98
+ */
99
+ html:function(){
100
+ var ins = '';
101
+ ins += '<div style="padding:5px;background-color:#F2F2F2;top:0px;left:0px;display:block;width:98%;" id="i3GEOmelhorcaminhoresultado" >';
102
+ ins += '</div>';
103
+ ins += '<div style="top:10px;left:0px;display:block;width:98%;color:red" id="i3GEOmelhorcaminhofim" >';
104
+ ins += '</div>';
105
+ return ins;
106
+ },
107
+ /*
108
+ Function: iniciaJanelaFlutuante
109
+
110
+ Cria a janela flutuante para controle da ferramenta.
111
+ */
112
+ iniciaJanelaFlutuante: function(){
113
+ var minimiza,cabecalho,janela,divid,titulo,temp;
114
+ if($i("i3GEOF.melhorcaminho")){
115
+ return;
116
+ }
117
+ //cria a janela flutuante
118
+ titulo = $trad("melhorcaminho")+" <a class=ajuda_usuario target=_blank href='" + i3GEO.configura.locaplic + "/ajuda_usuario.php?idcategoria=3&idajuda=14' > </a>";
119
+ cabecalho = function(){
120
+ i3GEO.barraDeBotoes.execBotao("pan");
121
+ };
122
+ minimiza = function(){
123
+ i3GEO.janela.minimiza("i3GEOF.melhorcaminho");
124
+ };
125
+ janela = i3GEO.janela.cria(
126
+ "400px",
127
+ "190px",
128
+ "",
129
+ "",
130
+ "",
131
+ titulo,
132
+ "i3GEOF.melhorcaminho",
133
+ false,
134
+ "hd",
135
+ cabecalho,
136
+ minimiza,
137
+ "",
138
+ false,
139
+ i3GEO.configura.locaplic+"/imagens/oxygen/16x16/accessories-calculator.png"
140
+ );
141
+ divid = janela[2].id;
142
+ janela[0].setFooter("<div id=i3GEOF.melhorcaminho_rodape style=background-color:#F2F2F2; ></div>");
143
+ i3GEOF.melhorcaminho.aguarde = $i("i3GEOF.melhorcaminho_imagemCabecalho").style;
144
+ i3GEOF.melhorcaminho.inicia(divid);
145
+ temp = function(){
146
+ i3GEO.eventos.cliquePerm.ativa();
147
+ i3GEO.eventos.removeEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoA()","i3GEOF.melhorcaminho.capturaPontoB()"]);
148
+ };
149
+ YAHOO.util.Event.addListener(janela[0].close, "click", temp);
150
+ },
151
+ t0: function()
152
+ {
153
+ var ins = "<img class=i3GeoExemploImg src='"+i3GEO.configura.locaplic+"/ferramentas/melhorcaminho/exemplo.png' />" +
154
+ "<p class='paragrafo' >"+$trad('ajuda',i3GEOF.melhorcaminho.dicionario) +
155
+ "<p class='paragrafo'>"+$trad('ajuda2',i3GEOF.melhorcaminho.dicionario) +
156
+ "<p class='paragrafo'>"+$trad('ajuda3',i3GEOF.melhorcaminho.dicionario);
157
+ i3GEO.util.proximoAnterior("","i3GEOF.melhorcaminho.t1()",ins,"i3GEOF.melhorcaminho.t0","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape");
158
+ },
159
+ t1: function(){
160
+ var ins = "<p class='paragrafo'>"+$trad('raster',i3GEOF.melhorcaminho.dicionario) +" :<br>" +
161
+ "<div class='styled-select' id='i3GEOmelhorcaminhoDivRaster'></div>" +
162
+ "<br>";
163
+ i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t0()","i3GEOF.melhorcaminho.t2()",ins,"i3GEOF.melhorcaminho.t1","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape");
164
+ i3GEOF.melhorcaminho.comboTemasRaster();
165
+ },
166
+ t2: function(){
167
+ var ins = "<p class='paragrafo'>"+$trad('temas',i3GEOF.melhorcaminho.dicionario) +" :<br>" +
168
+ "<div class='styled-select' id='i3GEOmelhorcaminhoDivTema'></div>" +
169
+ "<br>";
170
+ i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t1()","i3GEOF.melhorcaminho.t3()",ins,"i3GEOF.melhorcaminho.t2","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape");
171
+ i3GEOF.melhorcaminho.comboTemas();
172
+ },
173
+ t3: function(){
174
+ var ins = "<p class='paragrafo'><b>"+$trad('pti',i3GEOF.melhorcaminho.dicionario)+"</b>";
175
+ ins += "<p class='paragrafo'>X (long): ";
176
+ ins += $trad('grau',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('minuto',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('segundo',i3GEOF.melhorcaminho.dicionario)+"</p>";
177
+ ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='float:left;' ><input id='i3GEOmelhorcaminhoxg' title='grau' type=text value='1'/></div>";
178
+ ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='float:left;margin-left:10px;margin-right:10px;' ><input id='i3GEOmelhorcaminhoxm' title='minuto' type=text value='00'/></div>";
179
+ ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='margin-left:10px;' ><input id='i3GEOmelhorcaminhoxs' title='segundo' type=text value='00.00'/></div>";
180
+
181
+ ins += "<br><p class='paragrafo'>Y (lat): ";
182
+ ins += $trad('grau',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('minuto',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('segundo',i3GEOF.melhorcaminho.dicionario)+"</p>";
183
+ ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='float:left;' ><input id='i3GEOmelhorcaminhoyg' title='grau' type=text value='1'/></div>";
184
+ ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='float:left;margin-left:10px;' ><input id='i3GEOmelhorcaminhoym' title='minuto' type=text value='00'/></div>";
185
+ ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='float:left;margin-left:10px;' ><input id='i3GEOmelhorcaminhoys' title='segundo' type=text value='00.00'/></div>";
186
+
187
+ i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t2()","i3GEOF.melhorcaminho.t4()",ins,"i3GEOF.melhorcaminho.t3","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape");
188
+ i3GEO.eventos.cliquePerm.desativa();
189
+ i3GEO.eventos.adicionaEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoA()"]);
190
+ //calcula as coordenadas em DD
191
+ dms = i3GEO.calculo.dd2dms(retorno.data.ax,retorno.data.ay);
192
+ dmsx = dms[0].split(" ");
193
+ dmsy = dms[1].split(" ");
194
+ $i("i3GEOmelhorcaminhoxg").value = dmsx[0];
195
+ $i("i3GEOmelhorcaminhoxm").value = dmsx[1];
196
+ $i("i3GEOmelhorcaminhoxs").value = dmsx[2];
197
+ $i("i3GEOmelhorcaminhoyg").value = dmsy[0];
198
+ $i("i3GEOmelhorcaminhoym").value = dmsy[1];
199
+ $i("i3GEOmelhorcaminhoys").value = dmsy[2];
200
+ },
201
+ t4: function(){
202
+ var ins = "<p class='paragrafo'><b>"+$trad('ptf',i3GEOF.melhorcaminho.dicionario)+"</b>";
203
+ ins += "<p class='paragrafo'>X (long): ";
204
+ ins += $trad('grau',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('minuto',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('segundo',i3GEOF.melhorcaminho.dicionario)+"</p>";
205
+ ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='float:left;' ><input id='i3GEOmelhorcaminhoixg' title='grau' type=text value='1'/></div>";
206
+ ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='float:left;margin-left:10px;margin-right:10px;' ><input id='i3GEOmelhorcaminhoixm' title='minuto' type=text value='00'/></div>";
207
+ ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='margin-left:10px;' ><input id='i3GEOmelhorcaminhoixs' title='segundo' type=text value='00.00'/></div>";
208
+
209
+ ins += "<br><p class='paragrafo'>Y (lat): ";
210
+ ins += $trad('grau',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('minuto',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('segundo',i3GEOF.melhorcaminho.dicionario)+"</p>";
211
+ ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='float:left;' ><input id='i3GEOmelhorcaminhoiyg' title='grau' type=text value='1'/></div>";
212
+ ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='float:left;margin-left:10px;' ><input id='i3GEOmelhorcaminhoiym' title='minuto' type=text value='00'/></div>";
213
+ ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='float:left;margin-left:10px;' ><input id='i3GEOmelhorcaminhoiys' title='segundo' type=text value='00.00'/></div>";
214
+
215
+ i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t3()","i3GEOF.melhorcaminho.t5()",ins,"i3GEOF.melhorcaminho.t4","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape");
216
+
217
+ i3GEO.eventos.cliquePerm.desativa();
218
+ i3GEO.eventos.adicionaEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoB()"]);
219
+ //calcula as coordenadas em DD
220
+ dms = i3GEO.calculo.dd2dms(retorno.data.bx,retorno.data.by);
221
+ dmsx = dms[0].split(" ");
222
+ dmsy = dms[1].split(" ");
223
+ $i("i3GEOmelhorcaminhoixg").value = dmsx[0];
224
+ $i("i3GEOmelhorcaminhoixm").value = dmsx[1];
225
+ $i("i3GEOmelhorcaminhoixs").value = dmsx[2];
226
+ $i("i3GEOmelhorcaminhoiyg").value = dmsy[0];
227
+ $i("i3GEOmelhorcaminhoiym").value = dmsy[1];
228
+ $i("i3GEOmelhorcaminhoiys").value = dmsy[2];
229
+ },
230
+ t5: function(){
231
+ var ins = "<p class='paragrafo'><b>"+$trad('numero',i3GEOF.melhorcaminho.dicionario)+"</b>";
232
+ ins += "<p class='paragrafo'>X</p>";
233
+ ins += "<div class='i3geoForm i3geoFormIconeEdita' ><input id='i3GEOmelhorcaminhonptx' title='pontos em x' type=text value='10'/></div>";
234
+ ins += "<br><p class='paragrafo'>Y";
235
+ ins += "<div class='i3geoForm i3geoFormIconeEdita' ><input id='i3GEOmelhorcaminhonpty' title='pontos em y' type=text value='10'/></div>";
236
+
237
+ i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t2()","i3GEOF.melhorcaminho.t4()",ins,"i3GEOF.melhorcaminho.t3","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape");
238
+ },
239
+ t6: function(){
240
+ var b,ins = "<p class='paragrafo'><b>"+$trad('adicionaTema',i3GEOF.melhorcaminho.dicionario)+"</b>";
241
+ ins += "<p class='paragrafo'><input id=i3GEOmelhorcaminhobotao1 size=18 class=executar type='button' value='"+$trad('criaGrade',i3GEOF.melhorcaminho.dicionario)+"' />";
242
+
243
+ i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t3()","",ins,"i3GEOF.melhorcaminho.t4","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape");
244
+ b = new YAHOO.widget.Button(
245
+ "i3GEOmelhorcaminhobotao1",
246
+ {onclick:{fn: i3GEOF.melhorcaminho.criaGrade}}
247
+ );
248
+ b.addClass("rodar");
249
+ },
250
+ comboTemasRaster: function(){
251
+ i3GEO.util.comboTemas(
252
+ "i3GEOmelhorcaminhoRaster",
253
+ function(retorno){
254
+ $i("i3GEOmelhorcaminhoDivRaster").innerHTML = retorno.dados;
255
+ $i("i3GEOmelhorcaminhoDivRaster").style.display = "block";
256
+ },
257
+ "i3GEOmelhorcaminhoDivRaster",
258
+ "",
259
+ false,
260
+ "raster",
261
+ " "
262
+ );
263
+ },
264
+ comboTemas: function(){
265
+ i3GEO.util.comboTemas(
266
+ "i3GEOmelhorcaminhoTema",
267
+ function(retorno){
268
+ $i("i3GEOmelhorcaminhoDivTema").innerHTML = retorno.dados;
269
+ $i("i3GEOmelhorcaminhoDivTema").style.display = "block";
270
+ if ($i("i3GEOmelhorcaminhoTema")){
271
+ $i("i3GEOmelhorcaminhoTema").onchange = function(){
272
+ //captura o ponto inicial e final
273
+ i3GEOF.melhorcaminho.shape2pontos($i("i3GEOmelhorcaminhoTema").value);
274
+ };
275
+ }
276
+ },
277
+ "i3GEOmelhorcaminhoDivTema",
278
+ "",
279
+ false,
280
+ "naoraster",
281
+ " "
282
+ );
283
+ },
284
+ shape2pontos: function(tema){
285
+ var p, par, retorno
286
+ p = i3GEO.configura.locaplic + "/ferramentas/melhorcaminho/exec.php?g_sid="+i3GEO.configura.sid;
287
+ par = "funcao=shape2pontos&tema=" + tema;
288
+ retorno = function(retorno) {
289
+ var dms,dmsx,dmsy;
290
+ i3GEO.janela.fechaAguarde("shape2pontos");
291
+ i3GEOF.melhorcaminho.COORDENADASTEMA = retorno.data;
292
+ i3GEOF.melhorcaminho.t3();
293
+ };
294
+ i3GEO.janela.abreAguarde("shape2pontos", $trad("o1"));
295
+ cpJSON.call(p, "foo", retorno, par);
296
+ },
297
+ capturaPontoA: function(){
298
+ i3GEO.eventos.cliqueCapturaPt(
299
+ "i3GEOmelhorcaminhoxg",
300
+ "i3GEOmelhorcaminhoxm",
301
+ "i3GEOmelhorcaminhoxs",
302
+ "i3GEOmelhorcaminhoyg",
303
+ "i3GEOmelhorcaminhoym",
304
+ "i3GEOmelhorcaminhoys"
305
+ );
306
+ },
307
+ capturaPontoB: function(){
308
+ i3GEO.eventos.cliqueCapturaPt(
309
+ "i3GEOmelhorcaminhoixg",
310
+ "i3GEOmelhorcaminhoixm",
311
+ "i3GEOmelhorcaminhoixs",
312
+ "i3GEOmelhorcaminhoiyg",
313
+ "i3GEOmelhorcaminhoiym",
314
+ "i3GEOmelhorcaminhoiys"
315
+ );
316
+ },
317
+ /*
318
+ Function: criaGrade
319
+
320
+ Cria a grade e adiciona um novo tema ao mapa
321
+
322
+ Veja:
323
+
324
+ <GRADEDEPOL>
325
+ */
326
+ criaGrade: function(){
327
+ try{
328
+ if(i3GEOF.melhorcaminho.aguarde.visibility === "visible")
329
+ {return;}
330
+ i3GEOF.melhorcaminho.aguarde.visibility = "visible";
331
+ var dx,dy,ix,iy,nptx,npty,fim,p,cp,proj="nao";
332
+ if(!$i("i3GEOmelhorcaminhoProj").checked){
333
+ dx = i3GEO.calculo.dms2dd($i("i3GEOmelhorcaminhoxg").value,$i("i3GEOmelhorcaminhoxm").value,$i("i3GEOmelhorcaminhoxs").value);
334
+ dy = i3GEO.calculo.dms2dd($i("i3GEOmelhorcaminhoyg").value,$i("i3GEOmelhorcaminhoym").value,$i("i3GEOmelhorcaminhoys").value);
335
+ }
336
+ else{
337
+ proj = "sim";
338
+ dx = $i("i3GEOmelhorcaminhoxg").value;
339
+ dy = $i("i3GEOmelhorcaminhoyg").value;
340
+ }
341
+ ix = i3GEO.calculo.dms2dd($i("i3GEOmelhorcaminhoixg").value,$i("i3GEOmelhorcaminhoixm").value,$i("i3GEOmelhorcaminhoixs").value);
342
+ iy = i3GEO.calculo.dms2dd($i("i3GEOmelhorcaminhoiyg").value,$i("i3GEOmelhorcaminhoiym").value,$i("i3GEOmelhorcaminhoiys").value);
343
+ nptx = $i("i3GEOmelhorcaminhonptx").value;
344
+ npty = $i("i3GEOmelhorcaminhonpty").value;
345
+ if ((dx == 0) || (dy == 0))
346
+ {i3GEO.janela.tempoMsg($trad('msg',i3GEOF.melhorcaminho.dicionario));return;}
347
+ if ((nptx == 0) || (npty == 0))
348
+ {i3GEO.janela.tempoMsg($trad('msg2',i3GEOF.melhorcaminho.dicionario));return;}
349
+ if (nptx * npty > 10000)
350
+ {i3GEO.janela.tempoMsg($trad('msg2',i3GEOF.melhorcaminho.dicionario));return;}
351
+ fim = function(retorno){
352
+ i3GEOF.melhorcaminho.aguarde.visibility = "hidden";
353
+ if (retorno.data == undefined )
354
+ {$i("i3GEOmelhorcaminhofim").innerHTML = "<p class='paragrafo'>Erro. ";}
355
+ else
356
+ {i3GEO.atualiza("");}
357
+ };
358
+ p = i3GEO.configura.locaplic+"/ferramentas/melhorcaminho/exec.php?g_sid="+i3GEO.configura.sid+"&proj="+proj+"&funcao=gradedepol&xdd="+dx+"&ydd="+dy+"&px="+ix+"&py="+iy+"&nptx="+nptx+"&npty="+npty;
359
+ cp = new cpaint();
360
+ cp.set_response_type("JSON");
361
+ cp.call(p,"melhorcaminho",fim);
362
+ }
363
+ catch(e){$i("i3GEOmelhorcaminhofim").innerHTML = "<p class='paragrafo' >Erro. "+e;i3GEOF.melhorcaminho.aguarde.visibility = "hidden";}
364
+ },
365
+ /*
366
+ Function: capturaPonto
367
+
368
+ Captura um ponto no mapa e preenche os campos de coordenadas de início da grade
369
+ */
370
+ capturaPonto: function(){
371
+ i3GEO.eventos.cliqueCapturaPt(
372
+ "i3GEOmelhorcaminhoixg",
373
+ "i3GEOmelhorcaminhoixm",
374
+ "i3GEOmelhorcaminhoixs",
375
+ "i3GEOmelhorcaminhoiyg",
376
+ "i3GEOmelhorcaminhoiym",
377
+ "i3GEOmelhorcaminhoiys"
378
+ );
379
+ }
380
+};
...
...