From 79ff2e03c09fef209f9111a89e301869c0b2dca0 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Wed, 18 Feb 2015 04:17:48 +0000 Subject: [PATCH] Complementação da ferramenta de melhor caminho e inclusão de novas infos no teste de instalação --- ferramentas/melhorcaminho/LEIAME | 46 ++++++++++++++++++++++++++++++++-------------- ferramentas/melhorcaminho/dicionario.js | 2 +- ferramentas/melhorcaminho/exec.php | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- ferramentas/melhorcaminho/index.js | 20 ++++++++++++++------ testainstal.php | 19 +++++++------------ 5 files changed, 139 insertions(+), 35 deletions(-) diff --git a/ferramentas/melhorcaminho/LEIAME b/ferramentas/melhorcaminho/LEIAME index d876965..6fc2391 100755 --- a/ferramentas/melhorcaminho/LEIAME +++ b/ferramentas/melhorcaminho/LEIAME @@ -1,24 +1,42 @@ -para execução do script é necessário executar as seguintes linhas no terminal +para execução do script é necessário executar as seguintes linhas no terminal sudo apt-get install python-pip python-dev build-essential sudo pip install --upgrade pip sudo pip install gdal scikit-image pyyaml -É necessário instalar tbm o YAML no PHP: + Caso ocorra erro no pip experimente instalar com apt-get: + sudo apt-get install python-gdal + sudo apt-get install python-yaml + sudo apt-get install python-skimage + + Caso ainda ocorram problemas, você pode fazer o download das extensões e instalar com: + + python setup.py install + +É necessário instalar tbm o YAML no PHP: + +sudo apt-get install libyaml-dev +sudo apt-get install php-pear sudo pecl install yaml -Depois de instalado é necessário incluir no php.ini: +Depois de instalado é necessário incluir no php.ini: + +extension=yaml.so + +ou criar um arquivo ini específico, dessa forma: +cd /etc/php5/apache2/conf.d +sudo vi yaml.ini extension=yaml.so e reiniciar o apache -------------------------------------------------------------------------------- -O script lê os parâmetros a partir de um arquivo yaml cujo nome é definido ao executar o programa +O script lê os parâmetros a partir de um arquivo yaml cujo nome é definido ao executar o programa -Para executar o arquivo é necessário invocá-lo no terminal: +Para executar o arquivo é necessário invocá-lo no terminal: ./better_path.py /path/to/source.yaml @@ -62,26 +80,26 @@ processes: -------------------------------------------------------------------------------- -Descrição dos parâmetros: +Descrição dos parâmetros: cost_surface_path: arquivo raster com o valor do custo em cada pixel -pathresult: pasta onde serão guardados os resultados -processes: lista de processos que serão executados +pathresult: pasta onde serão guardados os resultados +processes: lista de processos que serão executados - xxxx: nome do processo (apenas para referência do programa) + xxxx: nome do processo (apenas para referência do programa) - calculation_type: tipo de cálculo que será executado no processo - file_prefix: prefixo que será usado nos arquivos resultantes do processo - lut: parâmetros de reclassificação indicando o range e o valor reclassificado + calculation_type: tipo de cálculo que será executado no processo + file_prefix: prefixo que será usado nos arquivos resultantes do processo + lut: parâmetros de reclassificação indicando o range e o valor reclassificado start_coord: ponto A stop_coord: ponto B ou informed_path: arquivo shapefile com uma linha (opcional) - buffer_km: buffer de entorno da linha reta entre A e B que será considerado no cálculo do caminho (opcional) + buffer_km: buffer de entorno da linha reta entre A e B que será considerado no cálculo do caminho (opcional) -------------------------------------------------------------------------------- Resultado: -Os arquivos shapefile e o arquivo result.yaml são gerados na pasta de destino especificada no arquivo de parâmetros +Os arquivos shapefile e o arquivo result.yaml são gerados na pasta de destino especificada no arquivo de parâmetros diff --git a/ferramentas/melhorcaminho/dicionario.js b/ferramentas/melhorcaminho/dicionario.js index 4352284..27ff74a 100755 --- a/ferramentas/melhorcaminho/dicionario.js +++ b/ferramentas/melhorcaminho/dicionario.js @@ -56,7 +56,7 @@ i3GEOF.melhorcaminho.dicionario = { es : "" } ], 'lut' : [ { - pt : "Você pode reclassificar a imagem definindo novos valores para os pixels. Escolha os valores iniciais e finais do original e o novo valor. Podem ser definidos vários valores.", + pt : "Você pode reclassificar a imagem definindo novos valores para os pixels. Escolha os valores iniciais e finais do original (intervalos fechados) e o novo valor. Podem ser definidos vários valores.", en : "", es : "" } ], diff --git a/ferramentas/melhorcaminho/exec.php b/ferramentas/melhorcaminho/exec.php index 1e590ac..9e47917 100755 --- a/ferramentas/melhorcaminho/exec.php +++ b/ferramentas/melhorcaminho/exec.php @@ -37,12 +37,95 @@ switch (strtoupper($funcao)) "by"=>$pontoB->y ); break; + case "MELHORCAMINHO": + //converte os parametros em um arquivo YAML + $mapa = ms_newMapObj($map_file); + $layer = $mapa->getlayerbyname($raster); + $cost_surface_path = $layer->data; + $prefixo = nomeRandomico(3); + if(file_exists($cost_surface_path)){ + $pathresult = $dir_tmp."/melhorcaminho_".nomeRandomico(); + //$pta = explode(",",$pta); + //$ptb = explode(",",$ptb); + mkdir ($pathresult,0777); + + $best = array( + " p1"=> array( + "calculation_type" =>"best_path", + "file_prefix" => $prefixo, + "start_coord" => "[$pta]", + "stop_coord" => "[$ptb]" + ) + ); + $cart = array( + " p2"=> array( + "calculation_type" =>"cartesian_straight_line_cost", + "file_prefix" => $prefixo, + "start_coord" => "[$pta]", + "stop_coord" => "[$ptb]" + ) + ); + + $processos = array($best,$cart); + + $a = array( + "cost_surface_path" => $cost_surface_path, + "pathresult" => $pathresult, + "processes"=> $processos + ); + $y = $pathresult."/input.yaml"; + $yaml = yaml_emit($a); + //adapta o formato YAML para que o Python entenda + $yaml = str_replace("---","",$yaml); + $yaml = str_replace("...","",$yaml); + $yaml = str_replace("- ","",$yaml); + $yaml = str_replace("'","",$yaml); + $yaml = trim($yaml)."\n"; + //salva o arquivo com os parametros + $fp = fopen($y,"w"); + fwrite($fp,$yaml); + fclose($fp); + exec(dirname(__FILE__)."/better_path.py $y"); + //adiciona o shapefile + if(file_exists($pathresult."/".$prefixo."_best_path.shp")){ + include_once("../../classesphp/classe_mapa.php"); + $m = new Mapa($map_file); + //adiciona ao mapa best_path + $retorno = $m->adicionaTemaSHP($pathresult."/".$prefixo."_best_path.shp"); + $layer = $m->mapa->getlayerbyname($prefixo."_best_path.shp"); + $layer->setmetadata("TEMA","Melhor caminho $prefixo"); + $layer->setmetadata("DOWNLOAD","SIM"); + $layer->setmetadata("TEMALOCAL","SIM"); + $classe = $layer->getclass(0); + $estilo = $classe->getstyle(0); + $cor = $estilo->color; + $cor->setRGB(255,0,0); + //cartesian_straight_line_cost + $retorno = $m->adicionaTemaSHP($pathresult."/".$prefixo."_cartesian_straight_line_cost.shp"); + $layer = $m->mapa->getlayerbyname($prefixo."_cartesian_straight_line_cost.shp"); + $layer->setmetadata("TEMA","Caminho mais curto $prefixo"); + $layer->setmetadata("DOWNLOAD","SIM"); + $layer->setmetadata("TEMALOCAL","SIM"); + $classe = $layer->getclass(0); + $estilo = $classe->getstyle(0); + $cor = $estilo->color; + $cor->setRGB(255,0,255); + $estilo->set("width",2); + $m->salva(); + } + } + else{ + $retorno = "Erro. Arquivo raster não encontrado"; + } + $retorno = ""; + break; } if (!connection_aborted()){ if(isset($map_file) && isset($postgis_mapa) && $map_file != "") restauraCon($map_file,$postgis_mapa); cpjson($retorno); } -else -{exit();} +else{ + exit(); +} ?> \ No newline at end of file diff --git a/ferramentas/melhorcaminho/index.js b/ferramentas/melhorcaminho/index.js index e4e8cad..922cacf 100644 --- a/ferramentas/melhorcaminho/index.js +++ b/ferramentas/melhorcaminho/index.js @@ -29,6 +29,10 @@ 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 = {}; @@ -186,6 +190,7 @@ i3GEOF.melhorcaminho = { 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 dms = i3GEO.calculo.dd2dms(retorno.data.ax,retorno.data.ay); @@ -215,6 +220,7 @@ i3GEOF.melhorcaminho = { 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 dms = i3GEO.calculo.dd2dms(retorno.data.bx,retorno.data.by); @@ -248,6 +254,7 @@ i3GEOF.melhorcaminho = { 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", @@ -361,8 +368,9 @@ i3GEOF.melhorcaminho = { 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); - pta = ptax+","+ptay; - ptb = ptbx+","+ptby; + //nao tire o espaco apos a virgula + pta = ptax+", "+ptay; + ptb = ptbx+", "+ptby; } catch(e){ i3GEO.janela.tempoMsg($trad('mesf2',i3GEOF.melhorcaminho.dicionario));return; } @@ -373,17 +381,17 @@ i3GEOF.melhorcaminho = { lut.push(lutObjs[i].name); } lut = lut.join("|"); - /* i3GEOF.melhorcaminho.aguarde.visibility = "visible"; fim = function(retorno){ i3GEOF.melhorcaminho.aguarde.visibility = "hidden"; i3GEO.atualiza(""); + $i("i3GEOmelhorcaminhoresultadoFim").innerHTML = retorno.data; }; - 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; + p = i3GEO.configura.locaplic+"/ferramentas/melhorcaminho/exec.php?g_sid="+i3GEO.configura.sid + +"&funcao=melhorcaminho&pta="+pta+"&ptb="+ptb+"&lut="+lut+"&raster="+raster; cp = new cpaint(); cp.set_response_type("JSON"); cp.call(p,"melhorcaminho",fim); - */ - alert("Tema: "+raster+"
A: "+pta+"
B: "+ptb+"
Lut: "+lut); + //alert("Tema: "+raster+"
A: "+pta+"
B: "+ptb+"
Lut: "+lut); } }; diff --git a/testainstal.php b/testainstal.php index 146c7c1..96ed0cc 100644 --- a/testainstal.php +++ b/testainstal.php @@ -86,23 +86,22 @@ catch(ee) echo "
TESTE DE INSTALACAO DO i3Geo
\n"; include ("versao.php"); echo "
$mensagemInicia

\n"; + echo "
Para mais informações sobre a instalação de pacotes complementares, como o SAIKU e ferramentas que precisam de softwares específicos, veja o link http://moodle.gvsig-training.com/course/view.php?id=11

\n"; //ip $ip = "UNKNOWN"; if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP"); else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR"); else $ip = "UNKNOWN"; - echo "
Seu endereço IP: ".$ip."

\n"; - - echo "

PHP (a versão deve ser a 5x): "; - echo "
".phpversion()."
\n"; + echo "
Seu endereço IP: ".$ip."
\n"; + echo "
Sistema operacional: ".PHP_OS."
\n"; + echo "
PHP (a versão deve ser a 5x): ".phpversion()."
\n"; include_once("classesphp/carrega_ext.php"); include_once("classesphp/funcoes_gerais.php"); $versao = versao(); $versao = $versao["principal"]; $exts = get_loaded_extensions(); - echo "MapServer (a versão deve ser >= 5.2 para que a sobreposição de temas funcione na interface Google Maps):
"; - echo "Versão:
"; + echo "
MapServer:
"; echo ms_GetVersion(); echo "

"; var_dump (versao())."

"; @@ -110,15 +109,11 @@ catch(ee) { echo "PARECE QUE O MAPSERVER NAO ESTA INSTALADO!!!

"; } - echo "
---
"; - if (get_cfg_var("safe_mode") == 1){ echo "Problema: safe_mode no php.ini deveria estar como 'Off'. O i3Geo não irá funcionar!!!
"; - echo "
---
"; } - echo "As seguintes letras devem aparecer corretamente acentuadas: çÇãâáÁóÓ"; + echo "

As seguintes letras devem aparecer corretamente acentuadas: çÇãâáÁóÓ"; echo "
Caso contrário, certifique-se que o parâmetro de configuração do Apache AddDefaultCharset esteja desativado."; - echo "
---
"; //executa as opcoes linux definidas no formulario if(!empty($_POST["criaPastaMstmp"]) && $_POST["criaPastaMstmp"] == "on"){ echo "
Criando a pasta $dir_tmp \n"; @@ -161,7 +156,7 @@ catch(ee) echo "...OK\n"; } } - echo "
Extensões:
"; + echo "

Extensões PHP:
";
 		if (!extension_loaded("curl")){
 			echo "Problema: não está instalado a curl que pode afetar algumas funcionalidades do i3Geo
"; } -- libgit2 0.21.2