From 4fef75cd756038949b75915d763ee0874d8f9268 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Mon, 30 Nov 2009 12:12:41 +0000 Subject: [PATCH] inclusão de um novo método na classe selecao para permitir a seleção por atributos de forma complexa, com mais de um item e operador --- classesphp/classe_analise.php | 2 ++ classesphp/classe_selecao.php | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- classesphp/mapa_controle.php | 14 ++++++++++++++ 3 files changed, 74 insertions(+), 3 deletions(-) diff --git a/classesphp/classe_analise.php b/classesphp/classe_analise.php index 1876a9f..9762fbd 100644 --- a/classesphp/classe_analise.php +++ b/classesphp/classe_analise.php @@ -2179,6 +2179,8 @@ $operacao - Tipo de análise. $this->salva(); $final = array(); $final["layer"] = $operacao." ".(implode(" ",$lista)); + + $final["dados"][] = array("id"=>"0","wkt"=>($calculo[0]["gwkt"]),"valores"=>$valoresoriginais,"imagem"=>($imagem["url"])); $this->serializeGeo($nomegeo,$final); } diff --git a/classesphp/classe_selecao.php b/classesphp/classe_selecao.php index 945f8ec..7f76f63 100644 --- a/classesphp/classe_selecao.php +++ b/classesphp/classe_selecao.php @@ -310,9 +310,10 @@ $tipo - Tipo de operação adiciona|retira|inverte|limpa /* function: selecaoAtributos -Seleciona por atributo. +Seleção simples por atributo. Não permite composição de atributos. parameters: + $tipo - Tipo de operação adiciona|retira|inverte|limpa $item - Item que será consultado. @@ -353,8 +354,62 @@ $valor - Valor. {$this->layer->querybyattributes($item,'(['.$item.']'.$operador.' '.$valor.' )',1);} } $res_count = $this->layer->getNumresults(); - //echo '("['.$item.']"'.$operador.'"'.$valor.'")'; - //echo $res_count; + $shpi = array(); + for ($i = 0; $i < $res_count; ++$i) + { + $result = $this->layer->getResult($i); + $shpi[] = $result->shapeindex; + } + if ($tipo == "adiciona") + {return($this->selecaoAdiciona($shpi,$shp_atual));} + if ($tipo == "retira") + {return($this->selecaoRetira($shpi,$shp_atual));} + return("ok"); + } + /* + function: selecaoAtributos2 + + Seleção por atributo. Permite composição de atributos. + + parameters: + + $filtro - Expressão de seleção + + $tipo - Tipo de operação adiciona|retira|inverte|limpa + */ + function selecaoAtributos2($filtro,$tipo) + { + if ($tipo == "limpa") + {return($this->selecaoLimpa());} + if ($tipo == "inverte") + {return($this->selecaoInverte());} + if(!$this->layer){return "erro";} + $this->layer->set("template","none.htm"); + $indxlayer = $this->layer->index; + if (file_exists(($this->arquivo)."qy")) + {$this->mapa->loadquery(($this->arquivo)."qy");} + $res_count = $this->layer->getNumresults(); + $shp_atual = array(); + for ($i = 0; $i < $res_count;++$i) + { + $rc = $this->layer->getResult($i); + $shp_atual[] = $rc->shapeindex; + } + $this->mapa->freequery($indxlayer); + $shpi = array(); + $items = pegaItens($this->layer); + $filtro = str_replace("|","'",$filtro); + if ($this->layer->connectiontype == MS_POSTGIS) + { + $filtro = str_replace("'[","",$filtro); + $filtro = str_replace("[","",$filtro); + $filtro = str_replace("]'","",$filtro); + $filtro = str_replace("]","",$filtro); + $filtro = str_replace("("," ",$filtro); + $filtro = str_replace(")"," ",$filtro); + } + $this->layer->querybyattributes($items[0],$filtro,1); + $res_count = $this->layer->getNumresults(); $shpi = array(); for ($i = 0; $i < $res_count; ++$i) { diff --git a/classesphp/mapa_controle.php b/classesphp/mapa_controle.php index 5674074..dcc610e 100644 --- a/classesphp/mapa_controle.php +++ b/classesphp/mapa_controle.php @@ -2494,6 +2494,20 @@ Include: $cp->set_data($m->selecaoAtributos($tipo,$item,$operador,$valor)); break; /* +Property: selecaoatrib2 + +Seleciona elementos com base nos atributos utilizando sintaxe complexa. + +Include: + +*/ + case "selecaoatrib2": + include_once("classe_selecao.php"); + copiaSeguranca($map_file); + $m = new Selecao($map_file,$tema); + $cp->set_data($m->selecaoAtributos2($filtro,$tipo)); + break; +/* Property: selecaotema Sleciona elementos de um tema com base em outro tema. -- libgit2 0.21.2