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) | ... | ... |