/* Title: Melhor caminho Calcula o melhor caminho entre dois pontos com base em uma imagem raster Arquivo: i3geo/ferramentas/melhorcaminho/index.js.php Licenca: GPL2 i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil Desenvolvedor: Edmar Moretti edmar.moretti@gmail.com Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU conforme publicada pela Free Software Foundation; Este programa é distribuído na expectativa de que seja útil, porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral do GNU para mais detalhes. Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto com este programa; se não, escreva para a Free Software Foundation, Inc., no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ //TODO incluir opcao de buffer //TODO incluir opcao de selecao de elementos //TODO calcular valor pelo shapefile //TODO gerar o relatorio if(typeof(i3GEOF) === 'undefined'){ var i3GEOF = {}; } /* Classe: i3GEOF.melhorcaminho */ i3GEOF.melhorcaminho = { /* Variavel: aguarde Estilo do objeto DOM com a imagem de aguarde existente no cabeçalho da janela. */ aguarde: "", COORDENADASTEMA: "", /* Para efeitos de compatibilidade antes da versão 4.7 que não tinha dicionário */ criaJanelaFlutuante: function(){ i3GEOF.melhorcaminho.iniciaDicionario(); }, /* Function: iniciaDicionario Carrega o dicionário e chama a função que inicia a ferramenta O Javascript é carregado com o id i3GEOF.nomedaferramenta.dicionario_script */ iniciaDicionario: function(){ if(typeof(i3GEOF.melhorcaminho.dicionario) === 'undefined'){ i3GEO.util.scriptTag( i3GEO.configura.locaplic+"/ferramentas/melhorcaminho/dicionario.js", "i3GEOF.melhorcaminho.iniciaJanelaFlutuante()", "i3GEOF.melhorcaminho.dicionario_script" ); } else{ i3GEOF.melhorcaminho.iniciaJanelaFlutuante(); } }, /* Function: inicia Inicia a ferramenta. É chamado por criaJanelaFlutuante Parametro: iddiv {String} - id do div que receberá o conteudo HTML da ferramenta */ inicia: function(iddiv){ if(i3GEOF.melhorcaminho.MUSTACHE == ""){ $.get(i3GEO.configura.locaplic + "/ferramentas/melhorcaminho/template_mst.html", function(template) { i3GEOF.melhorcaminho.MUSTACHE = template; i3GEOF.melhorcaminho.inicia(iddiv); }); return; } $i(iddiv).innerHTML = i3GEOF.melhorcaminho.html(); i3GEOF.melhorcaminho.t0(); }, /* Function: html Gera o código html para apresentação das opções da ferramenta Retorno: String com o código html */ html:function(){ var ins = ''; ins += '
'; ins += '
'; ins += '
'; ins += '
'; return ins; }, /* Function: iniciaJanelaFlutuante Cria a janela flutuante para controle da ferramenta. */ iniciaJanelaFlutuante: function(){ var minimiza,cabecalho,janela,divid,titulo,temp; if($i("i3GEOF.melhorcaminho")){ return; } //cria a janela flutuante titulo = "" + $trad("melhorcaminho") + ""; cabecalho = function(){ i3GEO.navega.ativaPan(); }; minimiza = function(){ i3GEO.janela.minimiza("i3GEOF.melhorcaminho",200); }; janela = i3GEO.janela.cria( "430px", "210px", "", "", "", titulo, "i3GEOF.melhorcaminho", false, "hd", cabecalho, minimiza, "", false, "", "", "", "", "14" ); divid = janela[2].id; janela[0].setFooter("
"); i3GEOF.melhorcaminho.aguarde = $i("i3GEOF.melhorcaminho_imagemCabecalho").style; i3GEOF.melhorcaminho.inicia(divid); temp = function(){ i3GEO.eventos.cliquePerm.ativa(); i3GEO.eventos.removeEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoA()","i3GEOF.melhorcaminho.capturaPontoB()"]); }; YAHOO.util.Event.addListener(janela[0].close, "click", temp); }, t0: function() { var ins = "" + "

"+$trad('ajuda',i3GEOF.melhorcaminho.dicionario) + "

"+$trad('ajuda2',i3GEOF.melhorcaminho.dicionario) + "

"+$trad('ajuda3',i3GEOF.melhorcaminho.dicionario); i3GEO.util.proximoAnterior("","i3GEOF.melhorcaminho.t1()",ins,"i3GEOF.melhorcaminho.t0","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape"); }, t1: function(){ var ins = "

"+$trad('raster',i3GEOF.melhorcaminho.dicionario) +" :
" + "

" + "
"; i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t0()","i3GEOF.melhorcaminho.t2()",ins,"i3GEOF.melhorcaminho.t1","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape"); i3GEOF.melhorcaminho.comboTemasRaster(); }, t2: function(){ i3GEOF.melhorcaminho.COORDENADASTEMA = ""; var ins = "

"+$trad('temas',i3GEOF.melhorcaminho.dicionario) +" :
" + "

" + "
"; i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t1()","i3GEOF.melhorcaminho.t3()",ins,"i3GEOF.melhorcaminho.t2","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape"); i3GEOF.melhorcaminho.comboTemas(); }, t3: function(){ var ins, retorno = i3GEOF.melhorcaminho.COORDENADASTEMA; ins = "

"+$trad('pti',i3GEOF.melhorcaminho.dicionario)+""; ins += "

X (long): "; ins += $trad('grau',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('minuto',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('segundo',i3GEOF.melhorcaminho.dicionario)+"

"; ins += "
"; ins += "
"; ins += "
"; ins += "

Y (lat): "; ins += $trad('grau',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('minuto',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('segundo',i3GEOF.melhorcaminho.dicionario)+"

"; ins += "
"; ins += "
"; ins += "
"; i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t2()","i3GEOF.melhorcaminho.t4()",ins,"i3GEOF.melhorcaminho.t3","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape"); i3GEO.eventos.cliquePerm.desativa(); i3GEO.eventos.removeEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoB()"]); i3GEO.eventos.adicionaEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoA()"]); //calcula as coordenadas em DD if(retorno != ""){ dms = i3GEO.calculo.dd2dms(retorno.data.ax,retorno.data.ay); dmsx = dms[0].split(" "); dmsy = dms[1].split(" "); $i("i3GEOmelhorcaminhoxg").value = dmsx[0]; $i("i3GEOmelhorcaminhoxm").value = dmsx[1]; $i("i3GEOmelhorcaminhoxs").value = dmsx[2]; $i("i3GEOmelhorcaminhoyg").value = dmsy[0]; $i("i3GEOmelhorcaminhoym").value = dmsy[1]; $i("i3GEOmelhorcaminhoys").value = dmsy[2]; } }, t4: function(){ var ins, retorno = i3GEOF.melhorcaminho.COORDENADASTEMA; ins = "

"+$trad('ptf',i3GEOF.melhorcaminho.dicionario)+""; ins += "

X (long): "; ins += $trad('grau',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('minuto',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('segundo',i3GEOF.melhorcaminho.dicionario)+"

"; ins += "
"; ins += "
"; ins += "
"; ins += "

Y (lat): "; ins += $trad('grau',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('minuto',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('segundo',i3GEOF.melhorcaminho.dicionario)+"

"; ins += "
"; ins += "
"; ins += "
"; i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t3()","i3GEOF.melhorcaminho.t5()",ins,"i3GEOF.melhorcaminho.t4","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape"); i3GEO.eventos.cliquePerm.desativa(); i3GEO.eventos.removeEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoA()"]); i3GEO.eventos.adicionaEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoB()"]); //calcula as coordenadas em DD if(retorno != ""){ dms = i3GEO.calculo.dd2dms(retorno.data.bx,retorno.data.by); dmsx = dms[0].split(" "); dmsy = dms[1].split(" "); $i("i3GEOmelhorcaminhoixg").value = dmsx[0]; $i("i3GEOmelhorcaminhoixm").value = dmsx[1]; $i("i3GEOmelhorcaminhoixs").value = dmsx[2]; $i("i3GEOmelhorcaminhoiyg").value = dmsy[0]; $i("i3GEOmelhorcaminhoiym").value = dmsy[1]; $i("i3GEOmelhorcaminhoiys").value = dmsy[2]; } }, t5: function(){ var b, ins = "

"+$trad('lut',i3GEOF.melhorcaminho.dicionario); ins += ""; ins += ""; ins += ""; ins += ""; ins += ""; ins += ""; ins += "
"+$trad('maiorque',i3GEOF.melhorcaminho.dicionario)+""+$trad('menorque',i3GEOF.melhorcaminho.dicionario)+""+$trad('novovalor',i3GEOF.melhorcaminho.dicionario)+"
 
 
"; ins += "
"; ins += "

"; ins += "

 

"+$trad('buffer',i3GEOF.melhorcaminho.dicionario)+"

"; i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t4()","i3GEOF.melhorcaminho.t6()",ins,"i3GEOF.melhorcaminho.t5","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape"); b = new YAHOO.widget.Button( "i3GEOmelhorcaminhoLut4", {onclick:{fn: i3GEOF.melhorcaminho.adicionaLut}} ); b.addClass("adicionar0"); }, t6: function(){ var b,ins = "

"+$trad('fim',i3GEOF.melhorcaminho.dicionario)+""; ins += "

"; ins += "

"; i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t5()","",ins,"i3GEOF.melhorcaminho.t6","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape"); b = new YAHOO.widget.Button( "i3GEOmelhorcaminhobotao1", {onclick:{fn: i3GEOF.melhorcaminho.executa}} ); b.addClass("rodar"); }, adicionaLut: function(){ var v1, v2, v3, onde, novo, v, n; v1 = $i("i3GEOmelhorcaminhoLut1").value; v2 = $i("i3GEOmelhorcaminhoLut2").value; v3 = $i("i3GEOmelhorcaminhoLut3").value; v = ">= " + v1 + " e <= " + v2 + " = " + v3; n = v1 + "," + v2 + "," + v3; onde = $i("i3GEOmelhorcaminhoLut"); novo = "
" + "" + "
"; onde.innerHTML += novo; }, removeLut: function(obj){ obj.parentNode.removeChild(obj); }, comboTemasRaster: function(){ i3GEO.util.comboTemas( "i3GEOmelhorcaminhoRaster", function(retorno){ $i("i3GEOmelhorcaminhoDivRaster").innerHTML = retorno.dados; $i("i3GEOmelhorcaminhoDivRaster").style.display = "block"; }, "i3GEOmelhorcaminhoDivRaster", "", false, "raster", " " ); }, comboTemas: function(){ i3GEO.util.comboTemas( "i3GEOmelhorcaminhoTema", function(retorno){ $i("i3GEOmelhorcaminhoDivTema").innerHTML = retorno.dados; $i("i3GEOmelhorcaminhoDivTema").style.display = "block"; if ($i("i3GEOmelhorcaminhoTema")){ $i("i3GEOmelhorcaminhoTema").onchange = function(){ //captura o ponto inicial e final if($i("i3GEOmelhorcaminhoTema").value == ""){ i3GEOF.melhorcaminho.COORDENADASTEMA = ""; } else{ i3GEOF.melhorcaminho.shape2pontos($i("i3GEOmelhorcaminhoTema").value); } }; } }, "i3GEOmelhorcaminhoDivTema", "", false, "naoraster", " " ); }, shape2pontos: function(tema){ var p, par, retorno; p = i3GEO.configura.locaplic + "/ferramentas/melhorcaminho/exec.php?g_sid="+i3GEO.configura.sid; par = "funcao=shape2pontos&tema=" + tema; retorno = function(retorno) { i3GEO.janela.fechaAguarde("shape2pontos"); i3GEOF.melhorcaminho.COORDENADASTEMA = retorno; i3GEOF.melhorcaminho.t3(); }; i3GEO.janela.abreAguarde("shape2pontos", $trad("o1")); cpJSON.call(p, "foo", retorno, par); }, capturaPontoA: function(){ i3GEOF.melhorcaminho.COORDENADASTEMA = ""; i3GEO.eventos.cliqueCapturaPt( "i3GEOmelhorcaminhoxg", "i3GEOmelhorcaminhoxm", "i3GEOmelhorcaminhoxs", "i3GEOmelhorcaminhoyg", "i3GEOmelhorcaminhoym", "i3GEOmelhorcaminhoys" ); }, capturaPontoB: function(){ i3GEOF.melhorcaminho.COORDENADASTEMA = ""; i3GEO.eventos.cliqueCapturaPt( "i3GEOmelhorcaminhoixg", "i3GEOmelhorcaminhoixm", "i3GEOmelhorcaminhoixs", "i3GEOmelhorcaminhoiyg", "i3GEOmelhorcaminhoiym", "i3GEOmelhorcaminhoiys" ); }, /* Function: executa */ executa: function(){ if(i3GEOF.melhorcaminho.aguarde.visibility === "visible") {return;} var raster = "",ptax,ptbx,ptby,pta,ptb,lut=[],lutObjs,n,i; //pega tema com raster if($i("i3GEOmelhorcaminhoRaster")){ raster = $i("i3GEOmelhorcaminhoRaster").value; if(raster === ""){ i3GEO.janela.tempoMsg($trad('mesf1',i3GEOF.melhorcaminho.dicionario));return; } } else{ //i3GEO.janela.tempoMsg($trad('mesf1',i3GEOF.melhorcaminho.dicionario));return; } //pega pontos A e B try{ ptax = i3GEO.calculo.dms2dd($i("i3GEOmelhorcaminhoxg").value,$i("i3GEOmelhorcaminhoxm").value,$i("i3GEOmelhorcaminhoxs").value); ptay = i3GEO.calculo.dms2dd($i("i3GEOmelhorcaminhoyg").value,$i("i3GEOmelhorcaminhoym").value,$i("i3GEOmelhorcaminhoys").value); ptbx = i3GEO.calculo.dms2dd($i("i3GEOmelhorcaminhoixg").value,$i("i3GEOmelhorcaminhoixm").value,$i("i3GEOmelhorcaminhoixs").value); ptby = i3GEO.calculo.dms2dd($i("i3GEOmelhorcaminhoiyg").value,$i("i3GEOmelhorcaminhoiym").value,$i("i3GEOmelhorcaminhoiys").value); //nao tire o espaco apos a virgula pta = ptax+", "+ptay; ptb = ptbx+", "+ptby; } catch(e){ i3GEO.janela.tempoMsg($trad('mesf2',i3GEOF.melhorcaminho.dicionario));return; } //pega lut lutObjs = $i("i3GEOmelhorcaminhoLut").getElementsByTagName("input"); n = lutObjs.length; for(i=0;iA: "+pta+"
B: "+ptb+"
Lut: "+lut); }, relatorio : function(caminho){ fim = function(retorno){ i3GEOF.melhorcaminho.aguarde.visibility = "hidden"; var r = retorno.data, chaves = i3GEO.util.listaChaves(r), n = chaves.length, ins = "", i; for(i = 0; i < n; i++){ switch (chaves[i]) { case "cartesian_straight_line_cost": ins += ""; break; case "best_path": ins += ""; break; case "best_path_within_buffer": ins += ""; break; case "informed_path_cost": ins += ""; break; case "best_path_lut": ins += ""; break; }; ins += ""; } ins += "
 TipoCusto
 Linha reta entre os pontos A e B Melhor caminho Melhor caminho dentro do buffer Linha digitalizada Melhor caminho com reclassificação dos pixels (o valor do custo é calculado sobre os valores originais, sem reclasificação)"+(r[chaves[i]].toFixed(2)).replace(".",",")+"
"; i3GEO.janela.mensagemSimples(ins, $trad('relatoriofinal',i3GEOF.melhorcaminho.dicionario)); }; p = i3GEO.configura.locaplic+"/ferramentas/melhorcaminho/exec.php?g_sid="+i3GEO.configura.sid +"&funcao=relatorio" +"&caminho="+caminho; cp = new cpaint(); cp.set_response_type("JSON"); cp.call(p,"melhorcaminho",fim); } };