Commit a63b125eb5db9559b3ea15b20b41df13d3178d18

Authored by Edmar Moretti
1 parent 7595060e

Classificador pela média

classesphp/classe_alteraclasse.php
... ... @@ -321,15 +321,15 @@ class Alteraclasse
321 321 }
322 322 /*
323 323 function: metade
324   -
  324 +
325 325 Classifica os dados em duas classes, a primeira concentra os registros que somados correspondem à primeira metade do total e a segunda classe corresponde à segunda metade
326   -
  326 +
327 327 Parametros:
328   -
  328 +
329 329 $item - item da tabela de atributos
330   -
  330 +
331 331 $itemid - item que identifica unicamente cada registro
332   -
  332 +
333 333 $ignorar - valor que será ignorado na listagem final
334 334 */
335 335 function metade($item,$itemid,$ignorar)
... ... @@ -423,6 +423,75 @@ class Alteraclasse
423 423 }
424 424 }
425 425 /*
  426 + function: classemedia
  427 +
  428 + Classifica os dados em duas classes, a primeira concentra os registros que estão abaixo da média e a segunda aqueles que são iguais ou superiores a média
  429 +
  430 + Parametros:
  431 +
  432 + $item - item da tabela de atributos
  433 +
  434 + $ignorar - valor que será ignorado na listagem final
  435 + */
  436 + function classemedia($item,$ignorar)
  437 + {
  438 + if(!$this->layer){
  439 + return "erro";
  440 + }
  441 + $valores = $this->pegaValores($this->mapa,$this->layer,$item,false,$ignorar);
  442 +
  443 + if (count($valores) > 0){
  444 + $media = array_sum($valores) / count($valores);
  445 +
  446 + $numclassesatual = $this->layer->numclasses;
  447 + //apaga todas as classes existentes
  448 + $classetemp = $this->layer->getClass(0);
  449 + $estilotemp = $classetemp->getStyle(0);
  450 + for ($i=0; $i < $numclassesatual; ++$i){
  451 + $classe = $this->layer->getClass($i);
  452 + $classe->set("status",MS_DELETE);
  453 + }
  454 + //adiciona as classes novas
  455 + $expressao = "([".$item."]<".$media.")";
  456 + $nomeclasse = "< media ".$media;
  457 + $classe = ms_newClassObj($this->layer);
  458 +
  459 + $novoestilo = ms_newStyleObj($classe);
  460 + if ($this->layer->type == 0){
  461 + $novoestilo->set("symbolname","ponto");
  462 + $novoestilo->set("size","6");
  463 + }
  464 + $ncor = $novoestilo->color;
  465 + $ncor->setrgb(200,183,134);
  466 + $ncor = $novoestilo->outlinecolor;
  467 + $ncor->setrgb(255,255,255);
  468 + $classe->setexpression($expressao);
  469 + $classe->set("name",$nomeclasse);
  470 +
  471 + $expressao = "([".$item."]>=".$media.")";
  472 + $nomeclasse = ">= media ".$media;
  473 + $classe = ms_newClassObj($this->layer);
  474 +
  475 + $novoestilo = ms_newStyleObj($classe);
  476 + if ($this->layer->type == 0){
  477 + $novoestilo->set("symbolname","ponto");
  478 + $novoestilo->set("size","6");
  479 + }
  480 + $ncor = $novoestilo->color;
  481 + $ncor->setrgb(210,100,100);
  482 + $ncor = $novoestilo->outlinecolor;
  483 + $ncor->setrgb(255,255,255);
  484 + $classe->setexpression($expressao);
  485 + $classe->set("name",$nomeclasse);
  486 +
  487 + $this->layer->setMetaData("cache","");
  488 + return ("ok");
  489 + }
  490 + else{
  491 + return ("erro. Nenhum valor numerico no item");
  492 + }
  493 + }
  494 + /*
426 495 function: quantil
427 496  
428 497 Cria classes em um objeto layer com intervalos baseados no calculo de quantil
... ...
classesphp/mapa_controle.php
... ... @@ -1218,6 +1218,9 @@ switch (strtoupper($funcao))
1218 1218 if ($opcao == "metade"){
1219 1219 $retorno = $m->metade($item,$itemid,$ignorar);
1220 1220 }
  1221 + if ($opcao == "media"){
  1222 + $retorno = $m->classemedia($item,$ignorar);
  1223 + }
1221 1224 if ($opcao == "quartis"){
1222 1225 if(!isset($tipoLegenda))
1223 1226 {
... ... @@ -2346,7 +2349,7 @@ switch (strtoupper($funcao))
2346 2349 Valor: LISTAINTERFACES
2347 2350  
2348 2351 Lista as interfaces de abertura de mapas
2349   -
  2352 +
2350 2353 Pesquisa na pasta interfaces e na pasta definida em $customDir
2351 2354 */
2352 2355 case "LISTAINTERFACES":
... ...
ferramentas/legenda/dicionario.js
... ... @@ -779,5 +779,19 @@ i3GEOF.legenda.dicionario =
779 779 en : "",
780 780 es : ""
781 781 }
782   - ]
  782 + ],
  783 + "media" : [
  784 + {
  785 + pt : "M&eacute;dia",
  786 + en : "",
  787 + es : ""
  788 + }
  789 + ],
  790 + "duasmedias" : [
  791 + {
  792 + pt : "Classifica os dados em duas classes, a primeira concentra os registros que est&atilde;o abaixo da m&eacute;dia e a segunda aqueles que s&atilde;o iguais ou superiores a m&eacute;dia",
  793 + en : "",
  794 + es : ""
  795 + }
  796 + ]
783 797 };
... ...
ferramentas/legenda/index.js
... ... @@ -222,6 +222,12 @@ i3GEOF.legenda =
222 222 }
223 223 });
224 224 b.addClass("rodar");
  225 + b = new YAHOO.widget.Button("i3GEOlegendabotaoMedia", {
  226 + onclick : {
  227 + fn : i3GEOF.legenda.media
  228 + }
  229 + });
  230 + b.addClass("rodar");
225 231 b = new YAHOO.widget.Button("i3GEOlegendabotao7", {
226 232 onclick : {
227 233 fn : i3GEOF.legenda.representacao
... ... @@ -366,6 +372,9 @@ i3GEOF.legenda =
366 372 if ($i("i3GEOlegendaitensMetadeId")) {
367 373 $i("i3GEOlegendaitensMetadeId").innerHTML = retorno.dados;
368 374 }
  375 + if ($i("i3GEOlegendaitensMedia")) {
  376 + $i("i3GEOlegendaitensMedia").innerHTML = retorno.dados;
  377 + }
369 378 if ($i("i3GEOlegendaitensValorClass")) {
370 379 $i("i3GEOlegendaitensValorClass").innerHTML = retorno.dados;
371 380 }
... ... @@ -1348,7 +1357,6 @@ i3GEOF.legenda =
1348 1357 }
1349 1358 var item = $i("i3GEOlegendaitensMetade").getElementsByTagName("select")[0].value,
1350 1359 itemid = $i("i3GEOlegendaitensMetadeId").getElementsByTagName("select")[0].value,
1351   - ext = i3GEO.util.extOSM2Geo(i3GEO.parametros.mapexten),
1352 1360 p = i3GEO.configura.locaplic + "/classesphp/mapa_controle.php?g_sid="
1353 1361 + i3GEO.configura.sid
1354 1362 + "&funcao=alteraclasse"
... ... @@ -1359,9 +1367,7 @@ i3GEOF.legenda =
1359 1367 + "&itemid="
1360 1368 + itemid
1361 1369 + "&opcao=metade&ignorar="
1362   - + $i("i3GEOlegendaignorar").value
1363   - + "&ext="
1364   - + ext,
  1370 + + $i("i3GEOlegendaignorar").value,
1365 1371 cp = new cpaint(),
1366 1372 fim = function() {
1367 1373 i3GEOF.legenda.aposAlterarLegenda();
... ... @@ -1389,6 +1395,52 @@ i3GEOF.legenda =
1389 1395 }
1390 1396 },
1391 1397 /*
  1398 + * Function: media
  1399 + *
  1400 + * Duas classes considerando a media
  1401 + *
  1402 + * Veja:
  1403 + *
  1404 + * <ALTERACLASSE>
  1405 + */
  1406 + media : function() {
  1407 + try {
  1408 + if (i3GEOF.legenda.aguarde.visibility === "visible") {
  1409 + return;
  1410 + }
  1411 + var item = $i("i3GEOlegendaitensMedia").getElementsByTagName("select")[0].value,
  1412 + p = i3GEO.configura.locaplic + "/classesphp/mapa_controle.php?g_sid="
  1413 + + i3GEO.configura.sid
  1414 + + "&funcao=alteraclasse"
  1415 + + "&tema="
  1416 + + i3GEOF.legenda.tema
  1417 + + "&item="
  1418 + + item
  1419 + + "&opcao=media&ignorar="
  1420 + + $i("i3GEOlegendaignorar").value,
  1421 + cp = new cpaint(),
  1422 + fim = function() {
  1423 + i3GEOF.legenda.aposAlterarLegenda();
  1424 + i3GEOF.legenda.aguarde.visibility = "hidden";
  1425 + };
  1426 + if (item == "") {
  1427 + i3GEO.janela.tempoMsg("Selecione um item!");
  1428 + return;
  1429 + }
  1430 + if ($i("i3GEOFlegendaaplicaextent").checked === true) {
  1431 + p += "&ext=" + i3GEO.util.extOSM2Geo(i3GEO.parametros.mapexten);
  1432 + } else {
  1433 + p += "&ext=" + i3GEO.util.extOSM2Geo(i3GEO.parametros.extentTotal);
  1434 + }
  1435 + i3GEOF.legenda.aguarde.visibility = "visible";
  1436 + cp.set_response_type("JSON");
  1437 + cp.call(p, "alteraclasse", fim);
  1438 + } catch (e) {
  1439 + i3GEO.janela.tempoMsg("Erro: " + e);
  1440 + i3GEOF.legenda.aguarde.visibility = "hidden";
  1441 + }
  1442 + },
  1443 + /*
1392 1444 * Function: valorQ
1393 1445 *
1394 1446 * Altera a leganda do tema claculando as classes pelo m&eacute;todo quartil
... ...
ferramentas/legenda/template_mst.html
... ... @@ -200,6 +200,16 @@
200 200 </fieldset>
201 201 <br>
202 202 <fieldset style='padding: 5px; margin: 2px;'>
  203 + <legend>{{{media}}}</legend>
  204 + <p class='paragrafo'>{{{duasmedias}}}</p>
  205 + <div id='i3GEOlegendaitensMedia' class='styled-select'></div>
  206 + <br>
  207 + <p class='paragrafo'>
  208 + <input id='i3GEOlegendabotaoMedia' size='25' type='button' value='{{{aplicar}}}' />
  209 + </p>
  210 + </fieldset>
  211 + <br>
  212 + <fieldset style='padding: 5px; margin: 2px;'>
203 213 <legend>{{{calcularQuartil}}}</legend>
204 214 <p class='paragrafo'>{{{criaQuartis}}}</p>
205 215 <div id='i3GEOlegendaitensValorQuartil' class='styled-select'></div>
... ...