From bb0c3e92c222a3c48ce4eb9584db8d7f6e354b3f Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Wed, 18 Feb 2015 15:04:09 +0000 Subject: [PATCH] - --- ferramentas/melhorcaminho/dicionario.js | 9 +++++++-- ferramentas/melhorcaminho/exec.php | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- ferramentas/melhorcaminho/index.js | 61 ++++++++++++++++++++++++++++++++++++------------------------- 3 files changed, 125 insertions(+), 36 deletions(-) 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 += "

"; + 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", @@ -267,7 +278,7 @@ i3GEOF.melhorcaminho = { v1 = $i("i3GEOmelhorcaminhoLut1").value; v2 = $i("i3GEOmelhorcaminhoLut2").value; v3 = $i("i3GEOmelhorcaminhoLut3").value; - v = ">= " + v1 + "e < " + v2 + " = " + v3; + v = ">= " + v1 + "e <= " + v2 + " = " + v3; n = v1 + "," + v2 + "," + v3; onde = $i("i3GEOmelhorcaminhoLut"); novo = "
" @@ -319,7 +330,7 @@ i3GEOF.melhorcaminho = { retorno = function(retorno) { var dms,dmsx,dmsy; i3GEO.janela.fechaAguarde("shape2pontos"); - i3GEOF.melhorcaminho.COORDENADASTEMA = retorno.data; + i3GEOF.melhorcaminho.COORDENADASTEMA = retorno; i3GEOF.melhorcaminho.t3(); }; i3GEO.janela.abreAguarde("shape2pontos", $trad("o1")); @@ -388,7 +399,7 @@ i3GEOF.melhorcaminho = { $i("i3GEOmelhorcaminhoresultadoFim").innerHTML = retorno.data; }; p = i3GEO.configura.locaplic+"/ferramentas/melhorcaminho/exec.php?g_sid="+i3GEO.configura.sid - +"&funcao=melhorcaminho&pta="+pta+"&ptb="+ptb+"&lut="+lut+"&raster="+raster; + +"&funcao=melhorcaminho&pta="+pta+"&ptb="+ptb+"&lut="+lut+"&raster="+raster+"&buffer="+$i("i3GEOmelhorcaminhoBuffer").value; cp = new cpaint(); cp.set_response_type("JSON"); cp.call(p,"melhorcaminho",fim); -- libgit2 0.21.2