diff --git a/classesphp/classe_alteraclasse.php b/classesphp/classe_alteraclasse.php index e8d9d34..d319940 100644 --- a/classesphp/classe_alteraclasse.php +++ b/classesphp/classe_alteraclasse.php @@ -272,6 +272,8 @@ $ignorar - valor que será ignorado na listagem final } $ncor = $novoestilo->color; $ncor->setrgb((mt_rand(0,255)),(mt_rand(0,255)),(mt_rand(0,255))); + $ncor = $novoestilo->outlinecolor; + $ncor->setrgb(255,255,255); $classe->setexpression($expressao); $classe->set("name",$nomeclasse); $classe->set("title",($this->layer->name)."+".$i); @@ -282,6 +284,76 @@ $ignorar - valor que será ignorado na listagem final else {return ("erro. Nenhum valor numerico no item");} } + /* + function: quantil + + Cria classes em um objeto layer com intervalos baseados no calculo de quantil + + Parametros: + + $item - item da tabela de atributos + + $nclasses - número de classes + + $ignorar - valor que será ignorado na listagem final + */ + function quantil($item,$nclasses,$ignorar) + { + if(!$this->layer){return "erro";} + $valores = $this->pegaValores($this->mapa,$this->layer,$item,true,$ignorar); + if (count($valores) > 0){ + //rotina obtida do pacote TME + sort($valores); + $valores = array_unique($valores); + $numValues = count($valores); + $classNum = $numValues / $nclasses; // Number in each class + for ($i = 0; $i < $nclasses; $i++) { + $position = (int)($classNum * $i); + $classBreaks[] = $valores[$position]; + } + $classBreaks[] = $valores[$numValues-1]; // Last class break = biggest value + //echo "
";var_dump($classBreaks);exit; + $numclassesatual = $this->layer->numclasses; + //apaga todas as classes existentes + $classetemp = $this->layer->getClass(0); + $estilotemp = $classetemp->getStyle(0); + for ($i=0; $i < $numclassesatual; ++$i){ + $classe = $this->layer->getClass($i); + $classe->set("status",MS_DELETE); + } + //adiciona as classes novas + for ($i=0; $i < $nclasses; ++$i){ + $expressao = "(([".$item."]>".$classBreaks[$i].")and([".$item."]<=".$classBreaks[$i + 1]."))"; + $nomeclasse = "> ".$classBreaks[$i]." e <= que ".($classBreaks[$i + 1]); + if($i == 0){ + $expressao = "([".$item."]<=".$classBreaks[$i + 1].")"; + $nomeclasse = "<= que ".($classBreaks[$i + 1]); + } + if($i == ($nclasses - 1)){ + $expressao = "([".$item."] >=".$classBreaks[$i].")"; + $nomeclasse = ">= que ".($classBreaks[$i]); + } + $classe = ms_newClassObj($this->layer); + $novoestilo = ms_newStyleObj($classe); + if ($this->layer->type == 0){ + $novoestilo->set("symbolname","ponto"); + $novoestilo->set("size","6"); + } + $ncor = $novoestilo->color; + $ncor->setrgb((mt_rand(0,255)),(mt_rand(0,255)),(mt_rand(0,255))); + $ncor = $novoestilo->outlinecolor; + $ncor->setrgb(255,255,255); + $classe->setexpression($expressao); + $classe->set("name",$nomeclasse); + //$classe->set("title",($this->layer->name)."+".$i); + } + $this->layer->setMetaData("cache",""); + return ("ok"); + } + else{ + return ("erro. Nenhum valor numerico no item"); + } + } /* function: quartis @@ -351,6 +423,8 @@ Include: $classe->set("name",$nomeClasse); $ncor = $novoestilo->color; $ncor->setrgb(255,$vcor[$i],$vcor[$i]); + $ncor = $novoestilo->outlinecolor; + $ncor->setrgb(255,255,255); } $this->layer->setMetaData("cache",""); return ("ok"); @@ -426,6 +500,8 @@ $itemNome - item que será usado para definir os nomes das classes (por de $estilo = $classes[$i]->getStyle(0); $ncor = $estilo->color; $ncor->setrgb((mt_rand(0,255)),(mt_rand(0,255)),(mt_rand(0,255))); + $ncor = $estilo->outlinecolor; + $ncor->setrgb(255,255,255); if ($this->layer->type == 0) //tipo ponto { $estilo->set("symbolname","ponto"); diff --git a/classesphp/mapa_controle.php b/classesphp/mapa_controle.php index 48d0d43..8899069 100644 --- a/classesphp/mapa_controle.php +++ b/classesphp/mapa_controle.php @@ -1081,6 +1081,8 @@ Altera uma classe de um tema, aplicando uma nova classificação ou {$retorno = $m->valorunico($item,$ignorar);} if ($opcao == "intervalosiguais") {$retorno = $m->intervalosiguais($item,$nclasses,$ignorar);} + if ($opcao == "quantil") + {$retorno = $m->quantil($item,$nclasses,$ignorar);} if ($opcao == "quartis") { if(!isset($tipoLegenda)) diff --git a/ferramentas/legenda/index.js b/ferramentas/legenda/index.js index 5094e5c..211ccd0 100644 --- a/ferramentas/legenda/index.js +++ b/ferramentas/legenda/index.js @@ -216,6 +216,7 @@ i3GEOF.legenda = { {onclick:{fn: i3GEOF.legenda.valorC}} ); $i("i3GEOlegendabotao8-button").style.width = "200px"; + new YAHOO.widget.Button( "i3GEOlegendabotao9", {onclick:{fn: i3GEOF.legenda.valorQ}} @@ -223,6 +224,12 @@ i3GEOF.legenda = { $i("i3GEOlegendabotao9-button").style.width = "200px"; new YAHOO.widget.Button( + "i3GEOlegendabotaoQuantil", + {onclick:{fn: i3GEOF.legenda.valorQu}} + ); + $i("i3GEOlegendabotaoQuantil-button").style.width = "200px"; + + new YAHOO.widget.Button( "i3GEOlegendabotao10", {onclick:{fn: i3GEOF.legenda.aplicaEstilo}} ); @@ -394,6 +401,7 @@ i3GEOF.legenda = { 'Número de classes:'+ $inputText("","","i3GEOlegendanclasses","",3,"5") + '
'+ + ' '+ '
Cria classes para um item numérico utilizando os quartis (o item utilizado é o mesmo indicado acima)
'+ ''+ '
Estilo dos nomes das classes: ' + @@ -1097,6 +1105,35 @@ i3GEOF.legenda = { catch(e){i3GEO.janela.tempoMsg("Erro: "+ e);i3GEOF.legenda.aguarde.visibility = "hidden";} }, /* + Function: valorQu + + Altera a leganda do tema por meio do calculo de quantis + + Veja: + +
+ */ + valorQu: function(){ + try{ + if(i3GEOF.legenda.aguarde.visibility === "visible") + {return;} + var item = $i("i3GEOlegendaSelItem").value, + nclasses = $i("i3GEOlegendanclasses").value, + p = i3GEO.configura.locaplic+"/classesphp/mapa_controle.php?g_sid="+i3GEO.configura.sid+"&funcao=alteraclasse&nclasses="+nclasses+"&tema="+i3GEOF.legenda.tema+"&item="+item+"&opcao=quantil&ignorar="+$i("i3GEOlegendaignorar").value+"&ext="+i3GEO.parametros.mapexten, + cp = new cpaint(), + fim = function(){ + i3GEOF.legenda.aposAlterarLegenda(); + i3GEOF.legenda.aguarde.visibility = "hidden"; + }; + if (item == "") + {i3GEO.janela.tempoMsg("Selecione um item!");return;} + i3GEOF.legenda.aguarde.visibility = "visible"; + cp.set_response_type("JSON"); + cp.call(p,"alteraclasse",fim); + } + catch(e){i3GEO.janela.tempoMsg("Erro: "+ e);i3GEOF.legenda.aguarde.visibility = "hidden";} + }, + /* Function: representacao Altera o tipo de representação do tema (linear ou poligonoal) -- libgit2 0.21.2