diff --git a/ferramentas/melhorcaminho/dicionario.js b/ferramentas/melhorcaminho/dicionario.js
index 27ff74a..13af3f8 100755
--- a/ferramentas/melhorcaminho/dicionario.js
+++ b/ferramentas/melhorcaminho/dicionario.js
@@ -21,7 +21,7 @@ i3GEOF.melhorcaminho.dicionario = {
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.",
+ pt : "(Opcional) Escolha o tema que será utilizado para obter o ponto inicial e final. Será considerada a seleção, se houver. 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 : ""
} ],
@@ -66,7 +66,7 @@ i3GEOF.melhorcaminho.dicionario = {
es : ""
} ],
'menorque' : [ {
- pt : "menor que",
+ pt : "igual ou menor que",
en : "",
es : ""
} ],
@@ -94,5 +94,10 @@ i3GEOF.melhorcaminho.dicionario = {
pt : "Erro ao calcular as coordenadas dos pontos A e B",
en : "",
es : ""
+ } ],
+ 'buffer' : [ {
+ pt : "(Opcional) Valor em Km do entorno da linha reta entre A e B que será considerada como área onde o caminho poderá ser traçado",
+ en : "",
+ es : ""
} ]
};
diff --git a/ferramentas/melhorcaminho/exec.php b/ferramentas/melhorcaminho/exec.php
index 2a85019..391b313 100755
--- a/ferramentas/melhorcaminho/exec.php
+++ b/ferramentas/melhorcaminho/exec.php
@@ -9,18 +9,21 @@ switch (strtoupper($funcao))
case "SHAPE2PONTOS":
$mapa = ms_newMapObj($map_file);
$layer = $mapa->getlayerbyname($tema);
- $shapes = retornaShapesMapext($layer,$mapa);
+ $shapes = retornaShapesSelecionados($layer,$map_file,$mapa);
+ if(count($shapes) == 0){
+ $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);
+ $objLine = $shapes[0]->line(0);
+ $pontoA = $objLine->point(0);
+ $objLine = $shapes[count($shapes) - 1]->line(0);
+ $pontoB = $objLine->point(0);
}
//quando linha 1
if($layer->type == 1){
- $objLine = $shapes[0]->line;
+ $objLine = $shapes[0]->line(0);
$pontoA = $objLine->point(0);
$pontoB = $objLine->point($objLine->numpoints - 1);
}
@@ -50,7 +53,7 @@ switch (strtoupper($funcao))
mkdir ($pathresult,0777);
$best = array(
- " p1"=> array(
+ "p1"=> array(
"calculation_type" =>"best_path",
"file_prefix" => $prefixo,
"start_coord" => "[$pta]",
@@ -58,7 +61,7 @@ switch (strtoupper($funcao))
)
);
$cart = array(
- " p2"=> array(
+ "p2"=> array(
"calculation_type" =>"cartesian_straight_line_cost",
"file_prefix" => $prefixo,
"start_coord" => "[$pta]",
@@ -68,6 +71,39 @@ switch (strtoupper($funcao))
$processos = array($best,$cart);
+ if($buffer > 0){
+ $buf = array(
+ "p3"=> array(
+ "calculation_type" =>"best_path_within_buffer",
+ "buffer_km" => $buffer,
+ "file_prefix" => $prefixo,
+ "start_coord" => "[$pta]",
+ "stop_coord" => "[$ptb]"
+ )
+ );
+ $processos[] = $buf;
+ }
+
+ if($lut != ""){
+ //pega os valores da lut
+ $lista = explode("|",$lut);
+ $novaLut = array();
+ foreach($lista as $li){
+ $v = explode(",",$li);
+ $novaLut[] = "- {min: $v[0], max: $v[1], nv: $v[2]}";
+ }
+ $lut = array(
+ "p4"=> array(
+ "calculation_type" =>"best_path_lut",
+ "lut" => implode("\n",$novaLut),
+ "file_prefix" => $prefixo,
+ "start_coord" => "[$pta]",
+ "stop_coord" => "[$ptb]"
+ )
+ );
+ $processos[] = $lut;
+ }
+
$a = array(
"cost_surface_path" => $cost_surface_path,
"pathresult" => $pathresult,
@@ -78,9 +114,11 @@ switch (strtoupper($funcao))
//adapta o formato YAML para que o Python entenda
$yaml = str_replace("---","",$yaml);
$yaml = str_replace("...","",$yaml);
- $yaml = str_replace("- ","",$yaml);
+ $yaml = str_replace("- p"," p",$yaml);
$yaml = str_replace("'","",$yaml);
+ $yaml = str_replace('"',"",$yaml);
$yaml = trim($yaml)."\n";
+ $yaml = str_replace('|-',"",$yaml);
//salva o arquivo com os parametros
$fp = fopen($y,"w");
fwrite($fp,$yaml);
@@ -114,6 +152,41 @@ switch (strtoupper($funcao))
$cor->setRGB(255,0,255);
$estilo->set("width",2);
}
+ if(file_exists($pathresult."/".$prefixo."_best_path_within_buffer.shp")){
+ //best_path_within_buffer
+ $retorno = $m->adicionaTemaSHP($pathresult."/".$prefixo."_best_path_within_buffer.shp");
+ $layer = $m->mapa->getlayerbyname($prefixo."_best_path_within_buffer.shp");
+ $layer->setmetadata("TEMA","Caminho restrito ao buffer $prefixo");
+ $layer->setmetadata("DOWNLOAD","SIM");
+ $layer->setmetadata("TEMALOCAL","SIM");
+ $classe = $layer->getclass(0);
+ $estilo = $classe->getstyle(0);
+ $cor = $estilo->color;
+ $cor->setRGB(255,255,0);
+ //buffer
+ $retorno = $m->adicionaTemaSHP($pathresult."/".$prefixo."_buffer_best_path_within_buffer.shp");
+ $layer = $m->mapa->getlayerbyname($prefixo."_buffer_best_path_within_buffer.shp");
+ $layer->setmetadata("TEMA","Buffer $prefixo");
+ $layer->setmetadata("DOWNLOAD","SIM");
+ $layer->setmetadata("TEMALOCAL","SIM");
+ $classe = $layer->getclass(0);
+ $estilo = $classe->getstyle(0);
+ $cor = $estilo->color;
+ $cor->setRGB(-1,-1,-1);
+ $estilo->set("width",2);
+ }
+ if(file_exists($pathresult."/".$prefixo."_best_path_lut.shp")){
+ //cartesian_straight_line_cost
+ $retorno = $m->adicionaTemaSHP($pathresult."/".$prefixo."_best_path_lut.shp");
+ $layer = $m->mapa->getlayerbyname($prefixo."_best_path_lut.shp");
+ $layer->setmetadata("TEMA","Caminho mais curto reclassificado $prefixo");
+ $layer->setmetadata("DOWNLOAD","SIM");
+ $layer->setmetadata("TEMALOCAL","SIM");
+ $classe = $layer->getclass(0);
+ $estilo = $classe->getstyle(0);
+ $cor = $estilo->color;
+ $cor->setRGB(0,255,255);
+ }
$m->salva();
}
else{
diff --git a/ferramentas/melhorcaminho/index.js b/ferramentas/melhorcaminho/index.js
index 922cacf..15fde89 100644
--- a/ferramentas/melhorcaminho/index.js
+++ b/ferramentas/melhorcaminho/index.js
@@ -127,8 +127,8 @@ i3GEOF.melhorcaminho = {
i3GEO.janela.minimiza("i3GEOF.melhorcaminho");
};
janela = i3GEO.janela.cria(
- "400px",
- "190px",
+ "430px",
+ "210px",
"",
"",
"",
@@ -175,7 +175,10 @@ i3GEOF.melhorcaminho = {
i3GEOF.melhorcaminho.comboTemas();
},
t3: function(){
- var ins = "
"+$trad('pti',i3GEOF.melhorcaminho.dicionario)+""; + 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 += ""; @@ -193,18 +196,22 @@ i3GEOF.melhorcaminho = { i3GEO.eventos.removeEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoB()"]); 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]; + 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 = ""+$trad('ptf',i3GEOF.melhorcaminho.dicionario)+""; + 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 += ""; @@ -223,15 +230,17 @@ i3GEOF.melhorcaminho = { i3GEO.eventos.removeEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoA()"]); 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]; + 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);
@@ -244,6 +253,8 @@ i3GEOF.melhorcaminho = {
ins += "";
ins += "
";
ins += "
"+$trad('buffer',i3GEOF.melhorcaminho.dicionario)+"