Commit acdb0b38acaeffc1dda64686412d3e59a0415cce

Authored by Edmar Moretti
1 parent c233b02c

Inclusão do método de cálculo de classes por quantil no editor de legenda

classesphp/classe_alteraclasse.php
... ... @@ -272,6 +272,8 @@ $ignorar - valor que será ignorado na listagem final
272 272 }
273 273 $ncor = $novoestilo->color;
274 274 $ncor->setrgb((mt_rand(0,255)),(mt_rand(0,255)),(mt_rand(0,255)));
  275 + $ncor = $novoestilo->outlinecolor;
  276 + $ncor->setrgb(255,255,255);
275 277 $classe->setexpression($expressao);
276 278 $classe->set("name",$nomeclasse);
277 279 $classe->set("title",($this->layer->name)."+".$i);
... ... @@ -282,6 +284,76 @@ $ignorar - valor que será ignorado na listagem final
282 284 else
283 285 {return ("erro. Nenhum valor numerico no item");}
284 286 }
  287 + /*
  288 + function: quantil
  289 +
  290 + Cria classes em um objeto layer com intervalos baseados no calculo de quantil
  291 +
  292 + Parametros:
  293 +
  294 + $item - item da tabela de atributos
  295 +
  296 + $nclasses - número de classes
  297 +
  298 + $ignorar - valor que será ignorado na listagem final
  299 + */
  300 + function quantil($item,$nclasses,$ignorar)
  301 + {
  302 + if(!$this->layer){return "erro";}
  303 + $valores = $this->pegaValores($this->mapa,$this->layer,$item,true,$ignorar);
  304 + if (count($valores) > 0){
  305 + //rotina obtida do pacote TME
  306 + sort($valores);
  307 + $valores = array_unique($valores);
  308 + $numValues = count($valores);
  309 + $classNum = $numValues / $nclasses; // Number in each class
  310 + for ($i = 0; $i < $nclasses; $i++) {
  311 + $position = (int)($classNum * $i);
  312 + $classBreaks[] = $valores[$position];
  313 + }
  314 + $classBreaks[] = $valores[$numValues-1]; // Last class break = biggest value
  315 + //echo "<pre>";var_dump($classBreaks);exit;
  316 + $numclassesatual = $this->layer->numclasses;
  317 + //apaga todas as classes existentes
  318 + $classetemp = $this->layer->getClass(0);
  319 + $estilotemp = $classetemp->getStyle(0);
  320 + for ($i=0; $i < $numclassesatual; ++$i){
  321 + $classe = $this->layer->getClass($i);
  322 + $classe->set("status",MS_DELETE);
  323 + }
  324 + //adiciona as classes novas
  325 + for ($i=0; $i < $nclasses; ++$i){
  326 + $expressao = "(([".$item."]>".$classBreaks[$i].")and([".$item."]<=".$classBreaks[$i + 1]."))";
  327 + $nomeclasse = "> ".$classBreaks[$i]." e <= que ".($classBreaks[$i + 1]);
  328 + if($i == 0){
  329 + $expressao = "([".$item."]<=".$classBreaks[$i + 1].")";
  330 + $nomeclasse = "<= que ".($classBreaks[$i + 1]);
  331 + }
  332 + if($i == ($nclasses - 1)){
  333 + $expressao = "([".$item."] >=".$classBreaks[$i].")";
  334 + $nomeclasse = ">= que ".($classBreaks[$i]);
  335 + }
  336 + $classe = ms_newClassObj($this->layer);
  337 + $novoestilo = ms_newStyleObj($classe);
  338 + if ($this->layer->type == 0){
  339 + $novoestilo->set("symbolname","ponto");
  340 + $novoestilo->set("size","6");
  341 + }
  342 + $ncor = $novoestilo->color;
  343 + $ncor->setrgb((mt_rand(0,255)),(mt_rand(0,255)),(mt_rand(0,255)));
  344 + $ncor = $novoestilo->outlinecolor;
  345 + $ncor->setrgb(255,255,255);
  346 + $classe->setexpression($expressao);
  347 + $classe->set("name",$nomeclasse);
  348 + //$classe->set("title",($this->layer->name)."+".$i);
  349 + }
  350 + $this->layer->setMetaData("cache","");
  351 + return ("ok");
  352 + }
  353 + else{
  354 + return ("erro. Nenhum valor numerico no item");
  355 + }
  356 + }
285 357 /*
286 358 function: quartis
287 359  
... ... @@ -351,6 +423,8 @@ Include:
351 423 $classe->set("name",$nomeClasse);
352 424 $ncor = $novoestilo->color;
353 425 $ncor->setrgb(255,$vcor[$i],$vcor[$i]);
  426 + $ncor = $novoestilo->outlinecolor;
  427 + $ncor->setrgb(255,255,255);
354 428 }
355 429 $this->layer->setMetaData("cache","");
356 430 return ("ok");
... ... @@ -426,6 +500,8 @@ $itemNome - item que ser&amp;aacute; usado para definir os nomes das classes (por de
426 500 $estilo = $classes[$i]->getStyle(0);
427 501 $ncor = $estilo->color;
428 502 $ncor->setrgb((mt_rand(0,255)),(mt_rand(0,255)),(mt_rand(0,255)));
  503 + $ncor = $estilo->outlinecolor;
  504 + $ncor->setrgb(255,255,255);
429 505 if ($this->layer->type == 0) //tipo ponto
430 506 {
431 507 $estilo->set("symbolname","ponto");
... ...
classesphp/mapa_controle.php
... ... @@ -1081,6 +1081,8 @@ Altera uma classe de um tema, aplicando uma nova classifica&amp;ccedil;&amp;atilde;o ou
1081 1081 {$retorno = $m->valorunico($item,$ignorar);}
1082 1082 if ($opcao == "intervalosiguais")
1083 1083 {$retorno = $m->intervalosiguais($item,$nclasses,$ignorar);}
  1084 + if ($opcao == "quantil")
  1085 + {$retorno = $m->quantil($item,$nclasses,$ignorar);}
1084 1086 if ($opcao == "quartis")
1085 1087 {
1086 1088 if(!isset($tipoLegenda))
... ...
ferramentas/legenda/index.js
... ... @@ -216,6 +216,7 @@ i3GEOF.legenda = {
216 216 {onclick:{fn: i3GEOF.legenda.valorC}}
217 217 );
218 218 $i("i3GEOlegendabotao8-button").style.width = "200px";
  219 +
219 220 new YAHOO.widget.Button(
220 221 "i3GEOlegendabotao9",
221 222 {onclick:{fn: i3GEOF.legenda.valorQ}}
... ... @@ -223,6 +224,12 @@ i3GEOF.legenda = {
223 224 $i("i3GEOlegendabotao9-button").style.width = "200px";
224 225  
225 226 new YAHOO.widget.Button(
  227 + "i3GEOlegendabotaoQuantil",
  228 + {onclick:{fn: i3GEOF.legenda.valorQu}}
  229 + );
  230 + $i("i3GEOlegendabotaoQuantil-button").style.width = "200px";
  231 +
  232 + new YAHOO.widget.Button(
226 233 "i3GEOlegendabotao10",
227 234 {onclick:{fn: i3GEOF.legenda.aplicaEstilo}}
228 235 );
... ... @@ -394,6 +401,7 @@ i3GEOF.legenda = {
394 401 ' <p class=paragrafo >N&uacute;mero de classes:'+
395 402 $inputText("","","i3GEOlegendanclasses","",3,"5") +
396 403 ' <p class=paragrafo ><input id=i3GEOlegendabotao8 size="25" type="button" value="Intervalos iguais">'+
  404 + ' &nbsp;<input id=i3GEOlegendabotaoQuantil size="25" type="button" value="Quantil">'+
397 405 ' <hr><p class=paragrafo >Cria classes para um item num&eacute;rico utilizando os quartis (o item utilizado &eacute; o mesmo indicado acima)</p>'+
398 406 ' <p class=paragrafo ><input id=i3GEOlegendabotao9 size="25" type="button" value="Quartis">'+
399 407 ' <p class=paragrafo >Estilo dos nomes das classes: ' +
... ... @@ -1097,6 +1105,35 @@ i3GEOF.legenda = {
1097 1105 catch(e){i3GEO.janela.tempoMsg("Erro: "+ e);i3GEOF.legenda.aguarde.visibility = "hidden";}
1098 1106 },
1099 1107 /*
  1108 + Function: valorQu
  1109 +
  1110 + Altera a leganda do tema por meio do calculo de quantis
  1111 +
  1112 + Veja:
  1113 +
  1114 + <ALTERACLASSE>
  1115 + */
  1116 + valorQu: function(){
  1117 + try{
  1118 + if(i3GEOF.legenda.aguarde.visibility === "visible")
  1119 + {return;}
  1120 + var item = $i("i3GEOlegendaSelItem").value,
  1121 + nclasses = $i("i3GEOlegendanclasses").value,
  1122 + 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,
  1123 + cp = new cpaint(),
  1124 + fim = function(){
  1125 + i3GEOF.legenda.aposAlterarLegenda();
  1126 + i3GEOF.legenda.aguarde.visibility = "hidden";
  1127 + };
  1128 + if (item == "")
  1129 + {i3GEO.janela.tempoMsg("Selecione um item!");return;}
  1130 + i3GEOF.legenda.aguarde.visibility = "visible";
  1131 + cp.set_response_type("JSON");
  1132 + cp.call(p,"alteraclasse",fim);
  1133 + }
  1134 + catch(e){i3GEO.janela.tempoMsg("Erro: "+ e);i3GEOF.legenda.aguarde.visibility = "hidden";}
  1135 + },
  1136 + /*
1100 1137 Function: representacao
1101 1138  
1102 1139 Altera o tipo de representa&ccedil;&atilde;o do tema (linear ou poligonoal)
... ...