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,6 +272,8 @@ $ignorar - valor que será ignorado na listagem final | ||
| 272 | } | 272 | } |
| 273 | $ncor = $novoestilo->color; | 273 | $ncor = $novoestilo->color; |
| 274 | $ncor->setrgb((mt_rand(0,255)),(mt_rand(0,255)),(mt_rand(0,255))); | 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 | $classe->setexpression($expressao); | 277 | $classe->setexpression($expressao); |
| 276 | $classe->set("name",$nomeclasse); | 278 | $classe->set("name",$nomeclasse); |
| 277 | $classe->set("title",($this->layer->name)."+".$i); | 279 | $classe->set("title",($this->layer->name)."+".$i); |
| @@ -282,6 +284,76 @@ $ignorar - valor que será ignorado na listagem final | @@ -282,6 +284,76 @@ $ignorar - valor que será ignorado na listagem final | ||
| 282 | else | 284 | else |
| 283 | {return ("erro. Nenhum valor numerico no item");} | 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 | function: quartis | 358 | function: quartis |
| 287 | 359 | ||
| @@ -351,6 +423,8 @@ Include: | @@ -351,6 +423,8 @@ Include: | ||
| 351 | $classe->set("name",$nomeClasse); | 423 | $classe->set("name",$nomeClasse); |
| 352 | $ncor = $novoestilo->color; | 424 | $ncor = $novoestilo->color; |
| 353 | $ncor->setrgb(255,$vcor[$i],$vcor[$i]); | 425 | $ncor->setrgb(255,$vcor[$i],$vcor[$i]); |
| 426 | + $ncor = $novoestilo->outlinecolor; | ||
| 427 | + $ncor->setrgb(255,255,255); | ||
| 354 | } | 428 | } |
| 355 | $this->layer->setMetaData("cache",""); | 429 | $this->layer->setMetaData("cache",""); |
| 356 | return ("ok"); | 430 | return ("ok"); |
| @@ -426,6 +500,8 @@ $itemNome - item que ser&aacute; usado para definir os nomes das classes (por de | @@ -426,6 +500,8 @@ $itemNome - item que ser&aacute; usado para definir os nomes das classes (por de | ||
| 426 | $estilo = $classes[$i]->getStyle(0); | 500 | $estilo = $classes[$i]->getStyle(0); |
| 427 | $ncor = $estilo->color; | 501 | $ncor = $estilo->color; |
| 428 | $ncor->setrgb((mt_rand(0,255)),(mt_rand(0,255)),(mt_rand(0,255))); | 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 | if ($this->layer->type == 0) //tipo ponto | 505 | if ($this->layer->type == 0) //tipo ponto |
| 430 | { | 506 | { |
| 431 | $estilo->set("symbolname","ponto"); | 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,6 +1081,8 @@ Altera uma classe de um tema, aplicando uma nova classifica&ccedil;&atilde;o ou | ||
| 1081 | {$retorno = $m->valorunico($item,$ignorar);} | 1081 | {$retorno = $m->valorunico($item,$ignorar);} |
| 1082 | if ($opcao == "intervalosiguais") | 1082 | if ($opcao == "intervalosiguais") |
| 1083 | {$retorno = $m->intervalosiguais($item,$nclasses,$ignorar);} | 1083 | {$retorno = $m->intervalosiguais($item,$nclasses,$ignorar);} |
| 1084 | + if ($opcao == "quantil") | ||
| 1085 | + {$retorno = $m->quantil($item,$nclasses,$ignorar);} | ||
| 1084 | if ($opcao == "quartis") | 1086 | if ($opcao == "quartis") |
| 1085 | { | 1087 | { |
| 1086 | if(!isset($tipoLegenda)) | 1088 | if(!isset($tipoLegenda)) |
ferramentas/legenda/index.js
| @@ -216,6 +216,7 @@ i3GEOF.legenda = { | @@ -216,6 +216,7 @@ i3GEOF.legenda = { | ||
| 216 | {onclick:{fn: i3GEOF.legenda.valorC}} | 216 | {onclick:{fn: i3GEOF.legenda.valorC}} |
| 217 | ); | 217 | ); |
| 218 | $i("i3GEOlegendabotao8-button").style.width = "200px"; | 218 | $i("i3GEOlegendabotao8-button").style.width = "200px"; |
| 219 | + | ||
| 219 | new YAHOO.widget.Button( | 220 | new YAHOO.widget.Button( |
| 220 | "i3GEOlegendabotao9", | 221 | "i3GEOlegendabotao9", |
| 221 | {onclick:{fn: i3GEOF.legenda.valorQ}} | 222 | {onclick:{fn: i3GEOF.legenda.valorQ}} |
| @@ -223,6 +224,12 @@ i3GEOF.legenda = { | @@ -223,6 +224,12 @@ i3GEOF.legenda = { | ||
| 223 | $i("i3GEOlegendabotao9-button").style.width = "200px"; | 224 | $i("i3GEOlegendabotao9-button").style.width = "200px"; |
| 224 | 225 | ||
| 225 | new YAHOO.widget.Button( | 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 | "i3GEOlegendabotao10", | 233 | "i3GEOlegendabotao10", |
| 227 | {onclick:{fn: i3GEOF.legenda.aplicaEstilo}} | 234 | {onclick:{fn: i3GEOF.legenda.aplicaEstilo}} |
| 228 | ); | 235 | ); |
| @@ -394,6 +401,7 @@ i3GEOF.legenda = { | @@ -394,6 +401,7 @@ i3GEOF.legenda = { | ||
| 394 | ' <p class=paragrafo >Número de classes:'+ | 401 | ' <p class=paragrafo >Número de classes:'+ |
| 395 | $inputText("","","i3GEOlegendanclasses","",3,"5") + | 402 | $inputText("","","i3GEOlegendanclasses","",3,"5") + |
| 396 | ' <p class=paragrafo ><input id=i3GEOlegendabotao8 size="25" type="button" value="Intervalos iguais">'+ | 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 | ' <hr><p class=paragrafo >Cria classes para um item numérico utilizando os quartis (o item utilizado é o mesmo indicado acima)</p>'+ | 405 | ' <hr><p class=paragrafo >Cria classes para um item numérico utilizando os quartis (o item utilizado é o mesmo indicado acima)</p>'+ |
| 398 | ' <p class=paragrafo ><input id=i3GEOlegendabotao9 size="25" type="button" value="Quartis">'+ | 406 | ' <p class=paragrafo ><input id=i3GEOlegendabotao9 size="25" type="button" value="Quartis">'+ |
| 399 | ' <p class=paragrafo >Estilo dos nomes das classes: ' + | 407 | ' <p class=paragrafo >Estilo dos nomes das classes: ' + |
| @@ -1097,6 +1105,35 @@ i3GEOF.legenda = { | @@ -1097,6 +1105,35 @@ i3GEOF.legenda = { | ||
| 1097 | catch(e){i3GEO.janela.tempoMsg("Erro: "+ e);i3GEOF.legenda.aguarde.visibility = "hidden";} | 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 | Function: representacao | 1137 | Function: representacao |
| 1101 | 1138 | ||
| 1102 | Altera o tipo de representação do tema (linear ou poligonoal) | 1139 | Altera o tipo de representação do tema (linear ou poligonoal) |