Commit acdb0b38acaeffc1dda64686412d3e59a0415cce
1 parent
c233b02c
Exists in
master
and in
7 other branches
Inclusão do método de cálculo de classes por quantil no editor de legenda
Showing
3 changed files
with
115 additions
and
0 deletions
Show diff stats
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&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&ccedil;&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ú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 | + ' <input id=i3GEOlegendabotaoQuantil size="25" type="button" value="Quantil">'+ | |
| 397 | 405 | ' <hr><p class=paragrafo >Cria classes para um item numérico utilizando os quartis (o item utilizado é 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ção do tema (linear ou poligonoal) | ... | ... |