diff --git a/ferramentas/melhorcaminho/dependencias.php b/ferramentas/melhorcaminho/dependencias.php
new file mode 100755
index 0000000..7f2f05f
--- /dev/null
+++ b/ferramentas/melhorcaminho/dependencias.php
@@ -0,0 +1,30 @@
+ ou com a funcao scripttag do i3Geo
+ * Alem de carregar os scripts, carrega tambem o template no formato MUSTACHE, definindo a variavel
+ * javascript i3GEOF.melhorcaminho.MUSTACHE
+ * O template e substituido pelos valores definidos em index.js no momento da inicializacao da ferramenta
+ */
+if(extension_loaded('zlib')){
+ ob_start('ob_gzhandler');
+}
+header("Content-type: text/javascript");
+include("index.js");
+include("dicionario.js");
+echo "\n";
+/**
+ * Inclui o template mustache do HTML usado para criar o conteudo da janela
+ */
+echo 'i3GEOF.melhorcaminho.MUSTACHE = "';
+$texto = file_get_contents("template_mst.html");
+$texto = str_replace("\n", "", $texto);
+$texto = str_replace("\r", "", $texto);
+$texto = str_replace("\t", "", $texto);
+$texto = str_replace('"', "'", $texto);
+echo $texto;
+echo '";';
+if(extension_loaded('zlib')){
+ ob_end_flush();
+}
+?>
\ No newline at end of file
diff --git a/ferramentas/melhorcaminho/dicionario.js b/ferramentas/melhorcaminho/dicionario.js
new file mode 100755
index 0000000..574349f
--- /dev/null
+++ b/ferramentas/melhorcaminho/dicionario.js
@@ -0,0 +1,58 @@
+//+$trad(1,i3GEOF.gradeDePoligonos.dicionario)+
+i3GEOF.melhorcaminho.dicionario = {
+ 'ajuda' : [ {
+ pt : "O melhor caminho é calculado sobre uma imagem raster. Os valores dos pixels serão considerados como o custo.",
+ en : "",
+ es : ""
+ } ],
+ 'ajuda2' : [ {
+ pt : "O cálculo é feito a partir de um ponto inicial e um final. Esses dois pontos podem ser apontados no mapa ou pode ser utilizada uma camada já existente no mapa.",
+ en : "",
+ es : ""
+ } ],
+ 'ajuda3' : [ {
+ pt : "O resultado do cálculo será incluído no mapa como uma nova camada com dados no formato shapefile.",
+ en : "",
+ es : ""
+ } ],
+ 'raster' : [ {
+ pt : "Escolha o tema que contém a imagem raster que será utilizada para traçar o melhor caminho",
+ en : "",
+ es : ""
+ } ],
+ 'temas' : [ {
+ pt : "Escolha o tema que será utilizado para obter o ponto inicial e final. No caso de tema pontual, serão considerados o primeiro e o último ponto. No caso de tema linear, serão considerados o primeiro e o último nó. No caso de tema poligonal, serão considerados o primeiro nó e o centróide.
Você pode pular essa etapa caso queira escolher os pontos clicando no mapa.",
+ en : "",
+ es : ""
+ } ],
+ 'grau' : [ {
+ pt : "Grau",
+ en : "",
+ es : ""
+ } ],
+ 'minuto' : [ {
+ pt : "Minuto",
+ en : "",
+ es : ""
+ } ],
+ 'segundo' : [ {
+ pt : "Segundo",
+ en : "",
+ es : ""
+ } ],
+ 'coord' : [ {
+ pt : "Coordenadas do ponto inicial superior esquerdo (utilize o sinal negativo no grau quando ao sul do equador e a oeste). Você pode clicar no mapa para pegar o ponto.",
+ en : "",
+ es : ""
+ } ],
+ 'pti' : [ {
+ pt : "Ponto inicial (A). Você pode clicar no mapa ou digitar novos valores",
+ en : "",
+ es : ""
+ } ],
+ 'ptf' : [ {
+ pt : "Ponto final (B). Você pode clicar no mapa ou digitar novos valores",
+ en : "",
+ es : ""
+ } ]
+};
diff --git a/ferramentas/melhorcaminho/exec.php b/ferramentas/melhorcaminho/exec.php
new file mode 100755
index 0000000..1e590ac
--- /dev/null
+++ b/ferramentas/melhorcaminho/exec.php
@@ -0,0 +1,48 @@
+getlayerbyname($tema);
+ $shapes = retornaShapesMapext($layer,$mapa);
+
+ //quando ponto 0
+ if($layer->type == 0){
+ $objLine = $shapes[0]->line;
+ $pontoA = $objLine0(0);
+ $objLine = $shapes[count($shapes) - 1]->line;
+ $pontoB = $objLine(0);
+ }
+ //quando linha 1
+ if($layer->type == 1){
+ $objLine = $shapes[0]->line;
+ $pontoA = $objLine->point(0);
+ $pontoB = $objLine->point($objLine->numpoints - 1);
+ }
+ //quando poligono 2
+ if($layer->type == 2){
+ $objLine = $shapes[0]->line(0);
+ $pontoA = $objLine->point(0);
+ $pontoB = $shapes[0]->getCentroid();
+ }
+ $retorno = array(
+ "ax"=>$pontoA->x,
+ "ay"=>$pontoA->y,
+ "bx"=>$pontoB->x,
+ "by"=>$pontoB->y
+ );
+ break;
+}
+if (!connection_aborted()){
+ if(isset($map_file) && isset($postgis_mapa) && $map_file != "")
+ restauraCon($map_file,$postgis_mapa);
+ cpjson($retorno);
+}
+else
+{exit();}
+?>
\ No newline at end of file
diff --git a/ferramentas/melhorcaminho/exemplo.png b/ferramentas/melhorcaminho/exemplo.png
new file mode 100644
index 0000000..1d06b69
Binary files /dev/null and b/ferramentas/melhorcaminho/exemplo.png differ
diff --git a/ferramentas/melhorcaminho/index.js b/ferramentas/melhorcaminho/index.js
new file mode 100644
index 0000000..d54c90a
--- /dev/null
+++ b/ferramentas/melhorcaminho/index.js
@@ -0,0 +1,380 @@
+/*
+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.
+*/
+
+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){
+ try{
+ i3GEO.util.mudaCursor(i3GEO.configura.cursores,"default",i3GEO.Interface.IDMAPA,i3GEO.configura.locaplic);
+ $i(iddiv).innerHTML += i3GEOF.melhorcaminho.html();
+ i3GEOF.melhorcaminho.t0();
+ }
+ catch(erro){i3GEO.janela.tempoMsg(erro);}
+ },
+ /*
+ 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 += '
"+$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) +" :
" +
+ "
"+$trad('temas',i3GEOF.melhorcaminho.dicionario) +" :
" +
+ "
"+$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.adicionaEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoA()"]); + //calcula as coordenadas em DD + 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 = ""+$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.adicionaEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoB()"]); + //calcula as coordenadas em DD + 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 ins = ""+$trad('numero',i3GEOF.melhorcaminho.dicionario)+""; + ins += "
X
"; + ins += ""; + ins += "Y"; + ins += "
"; + + i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t2()","i3GEOF.melhorcaminho.t4()",ins,"i3GEOF.melhorcaminho.t3","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape"); + }, + t6: function(){ + var b,ins = ""+$trad('adicionaTema',i3GEOF.melhorcaminho.dicionario)+""; + ins += "
";
+
+ i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t3()","",ins,"i3GEOF.melhorcaminho.t4","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape");
+ b = new YAHOO.widget.Button(
+ "i3GEOmelhorcaminhobotao1",
+ {onclick:{fn: i3GEOF.melhorcaminho.criaGrade}}
+ );
+ b.addClass("rodar");
+ },
+ 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
+ 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) {
+ var dms,dmsx,dmsy;
+ i3GEO.janela.fechaAguarde("shape2pontos");
+ i3GEOF.melhorcaminho.COORDENADASTEMA = retorno.data;
+ i3GEOF.melhorcaminho.t3();
+ };
+ i3GEO.janela.abreAguarde("shape2pontos", $trad("o1"));
+ cpJSON.call(p, "foo", retorno, par);
+ },
+ capturaPontoA: function(){
+ i3GEO.eventos.cliqueCapturaPt(
+ "i3GEOmelhorcaminhoxg",
+ "i3GEOmelhorcaminhoxm",
+ "i3GEOmelhorcaminhoxs",
+ "i3GEOmelhorcaminhoyg",
+ "i3GEOmelhorcaminhoym",
+ "i3GEOmelhorcaminhoys"
+ );
+ },
+ capturaPontoB: function(){
+ i3GEO.eventos.cliqueCapturaPt(
+ "i3GEOmelhorcaminhoixg",
+ "i3GEOmelhorcaminhoixm",
+ "i3GEOmelhorcaminhoixs",
+ "i3GEOmelhorcaminhoiyg",
+ "i3GEOmelhorcaminhoiym",
+ "i3GEOmelhorcaminhoiys"
+ );
+ },
+ /*
+ Function: criaGrade
+
+ Cria a grade e adiciona um novo tema ao mapa
+
+ Veja:
+
+ Erro. ";}
+ else
+ {i3GEO.atualiza("");}
+ };
+ 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;
+ cp = new cpaint();
+ cp.set_response_type("JSON");
+ cp.call(p,"melhorcaminho",fim);
+ }
+ catch(e){$i("i3GEOmelhorcaminhofim").innerHTML = " Erro. "+e;i3GEOF.melhorcaminho.aguarde.visibility = "hidden";}
+ },
+ /*
+ Function: capturaPonto
+
+ Captura um ponto no mapa e preenche os campos de coordenadas de início da grade
+ */
+ capturaPonto: function(){
+ i3GEO.eventos.cliqueCapturaPt(
+ "i3GEOmelhorcaminhoixg",
+ "i3GEOmelhorcaminhoixm",
+ "i3GEOmelhorcaminhoixs",
+ "i3GEOmelhorcaminhoiyg",
+ "i3GEOmelhorcaminhoiym",
+ "i3GEOmelhorcaminhoiys"
+ );
+ }
+};
diff --git a/ferramentas/melhorcaminho/template_mst.html b/ferramentas/melhorcaminho/template_mst.html
new file mode 100755
index 0000000..bba349f
--- /dev/null
+++ b/ferramentas/melhorcaminho/template_mst.html
@@ -0,0 +1,2 @@
+
+
+
+
+
+
+
+
+ i3Geo - Software livre para criação de mapas interativos e geoprocessamento
+ Baseado no Mapserver, é licenciado sob GPL e integra o Portal do Software Público Brasileiro
+
+
+
+
+
+
+
+
+
+
+