Commit 656ddd8411374f7cb237d25ec75041a7c4f6aa07
1 parent
1eb465ae
Exists in
master
Novo método de classificação baseado na metade dos valores
Showing
5 changed files
with
214 additions
and
1 deletions
Show diff stats
classesphp/classe_alteraclasse.php
| @@ -319,6 +319,109 @@ class Alteraclasse | @@ -319,6 +319,109 @@ class Alteraclasse | ||
| 319 | {return ("erro. Nenhum valor numerico no item"); | 319 | {return ("erro. Nenhum valor numerico no item"); |
| 320 | } | 320 | } |
| 321 | } | 321 | } |
| 322 | + /* | ||
| 323 | + function: metade | ||
| 324 | + | ||
| 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 | + | ||
| 327 | + Parametros: | ||
| 328 | + | ||
| 329 | + $item - item da tabela de atributos | ||
| 330 | + | ||
| 331 | + $itemid - item que identifica unicamente cada registro | ||
| 332 | + | ||
| 333 | + $ignorar - valor que será ignorado na listagem final | ||
| 334 | + */ | ||
| 335 | + function metade($item,$itemid,$ignorar) | ||
| 336 | + { | ||
| 337 | + if(!$this->layer){ | ||
| 338 | + return "erro"; | ||
| 339 | + } | ||
| 340 | + //cria um array contendo o id como chave e o valor | ||
| 341 | + $valores = $this->pegaValores($this->mapa,$this->layer,$item,true,$ignorar); | ||
| 342 | + $ids = $this->pegaValores($this->mapa,$this->layer,$itemid,false,$ignorar); | ||
| 343 | + $lista = array(); | ||
| 344 | + for ($i = 0; $i < count($valores); ++$i){ | ||
| 345 | + $lista[$ids[$i]] = $valores[$i]; | ||
| 346 | + } | ||
| 347 | + | ||
| 348 | + if (count($lista) > 0){ | ||
| 349 | + asort($lista); | ||
| 350 | + //$valores = array_unique($valores); | ||
| 351 | + $numValues = count($lista); | ||
| 352 | + //soma os valores | ||
| 353 | + $total = array_sum($lista); | ||
| 354 | + //metade | ||
| 355 | + $metade = $total / 2; | ||
| 356 | + //separa os dados em dois conjuntos | ||
| 357 | + $metadeInf = array(); | ||
| 358 | + $metadeSup = array(); | ||
| 359 | + $IdNumerico = true; | ||
| 360 | + $soma = 0; | ||
| 361 | + $somaInf = 0; | ||
| 362 | + $somaSup = 0; | ||
| 363 | + $maxMetade1 = 0; | ||
| 364 | + foreach ($lista as $k => $v) { | ||
| 365 | + $soma = $soma + $v; | ||
| 366 | + if($soma < $metade){ | ||
| 367 | + $metadeInf[] = $k; | ||
| 368 | + $somaInf = $soma; | ||
| 369 | + $maxMetade1 = $v; | ||
| 370 | + } | ||
| 371 | + else{ | ||
| 372 | + $metadeSup[] = $k; | ||
| 373 | + $somaSup = $somaSup + $v; | ||
| 374 | + } | ||
| 375 | + } | ||
| 376 | + $percInf = ($somaInf * 100) / $total; | ||
| 377 | + $percSup = ($somaSup * 100) / $total; | ||
| 378 | + | ||
| 379 | + $numclassesatual = $this->layer->numclasses; | ||
| 380 | + //apaga todas as classes existentes | ||
| 381 | + $classetemp = $this->layer->getClass(0); | ||
| 382 | + $estilotemp = $classetemp->getStyle(0); | ||
| 383 | + for ($i=0; $i < $numclassesatual; ++$i){ | ||
| 384 | + $classe = $this->layer->getClass($i); | ||
| 385 | + $classe->set("status",MS_DELETE); | ||
| 386 | + } | ||
| 387 | + //adiciona as classes novas | ||
| 388 | + $expressao = "('[".$itemid."]'in'".implode(",",$metadeInf)."')"; | ||
| 389 | + $nomeclasse = "Tot ".$somaInf.' ('.round($percInf,2).'%) Max: '.$maxMetade1; | ||
| 390 | + $classe = ms_newClassObj($this->layer); | ||
| 391 | + $novoestilo = ms_newStyleObj($classe); | ||
| 392 | + if ($this->layer->type == 0){ | ||
| 393 | + $novoestilo->set("symbolname","ponto"); | ||
| 394 | + $novoestilo->set("size","6"); | ||
| 395 | + } | ||
| 396 | + $ncor = $novoestilo->color; | ||
| 397 | + $ncor->setrgb(246,183,134); | ||
| 398 | + $ncor = $novoestilo->outlinecolor; | ||
| 399 | + $ncor->setrgb(255,255,255); | ||
| 400 | + $classe->setexpression($expressao); | ||
| 401 | + $classe->set("name",$nomeclasse); | ||
| 402 | + | ||
| 403 | + $expressao = "('[".$itemid."]'in'".implode(",",$metadeSup)."')"; | ||
| 404 | + $nomeclasse = "Tot ".$somaSup.' ('.round($percSup,2).'%) '; | ||
| 405 | + $classe = ms_newClassObj($this->layer); | ||
| 406 | + $novoestilo = ms_newStyleObj($classe); | ||
| 407 | + if ($this->layer->type == 0){ | ||
| 408 | + $novoestilo->set("symbolname","ponto"); | ||
| 409 | + $novoestilo->set("size","6"); | ||
| 410 | + } | ||
| 411 | + $ncor = $novoestilo->color; | ||
| 412 | + $ncor->setrgb(210,111,111); | ||
| 413 | + $ncor = $novoestilo->outlinecolor; | ||
| 414 | + $ncor->setrgb(255,255,255); | ||
| 415 | + $classe->setexpression($expressao); | ||
| 416 | + $classe->set("name",$nomeclasse); | ||
| 417 | + | ||
| 418 | + $this->layer->setMetaData("cache",""); | ||
| 419 | + return ("ok"); | ||
| 420 | + } | ||
| 421 | + else{ | ||
| 422 | + return ("erro. Nenhum valor numerico no item"); | ||
| 423 | + } | ||
| 424 | + } | ||
| 322 | /* | 425 | /* |
| 323 | function: quantil | 426 | function: quantil |
| 324 | 427 |
classesphp/mapa_controle.php
| @@ -1215,6 +1215,9 @@ switch (strtoupper($funcao)) | @@ -1215,6 +1215,9 @@ switch (strtoupper($funcao)) | ||
| 1215 | if ($opcao == "quebrasnaturais"){ | 1215 | if ($opcao == "quebrasnaturais"){ |
| 1216 | $retorno = $m->quebrasnaturais($item,$nclasses,$ignorar); | 1216 | $retorno = $m->quebrasnaturais($item,$nclasses,$ignorar); |
| 1217 | } | 1217 | } |
| 1218 | + if ($opcao == "metade"){ | ||
| 1219 | + $retorno = $m->metade($item,$itemid,$ignorar); | ||
| 1220 | + } | ||
| 1218 | if ($opcao == "quartis"){ | 1221 | if ($opcao == "quartis"){ |
| 1219 | if(!isset($tipoLegenda)) | 1222 | if(!isset($tipoLegenda)) |
| 1220 | { | 1223 | { |
ferramentas/legenda/dicionario.js
| @@ -758,5 +758,26 @@ i3GEOF.legenda.dicionario = | @@ -758,5 +758,26 @@ i3GEOF.legenda.dicionario = | ||
| 758 | en : "", | 758 | en : "", |
| 759 | es : "" | 759 | es : "" |
| 760 | } | 760 | } |
| 761 | - ] | 761 | + ], |
| 762 | + "metade" : [ | ||
| 763 | + { | ||
| 764 | + pt : "Metade", | ||
| 765 | + en : "", | ||
| 766 | + es : "" | ||
| 767 | + } | ||
| 768 | + ], | ||
| 769 | + "duasmetades" : [ | ||
| 770 | + { | ||
| 771 | + pt : "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", | ||
| 772 | + en : "", | ||
| 773 | + es : "" | ||
| 774 | + } | ||
| 775 | + ], | ||
| 776 | + "iunico" : [ | ||
| 777 | + { | ||
| 778 | + pt : "Coluna que identifica cada registro de forma única", | ||
| 779 | + en : "", | ||
| 780 | + es : "" | ||
| 781 | + } | ||
| 782 | + ] | ||
| 762 | }; | 783 | }; |
ferramentas/legenda/index.js
| @@ -208,6 +208,12 @@ i3GEOF.legenda = | @@ -208,6 +208,12 @@ i3GEOF.legenda = | ||
| 208 | } | 208 | } |
| 209 | }); | 209 | }); |
| 210 | b.addClass("rodar"); | 210 | b.addClass("rodar"); |
| 211 | + b = new YAHOO.widget.Button("i3GEOlegendabotaoMetade", { | ||
| 212 | + onclick : { | ||
| 213 | + fn : i3GEOF.legenda.metade | ||
| 214 | + } | ||
| 215 | + }); | ||
| 216 | + b.addClass("rodar"); | ||
| 211 | b = new YAHOO.widget.Button("i3GEOlegendabotao7", { | 217 | b = new YAHOO.widget.Button("i3GEOlegendabotao7", { |
| 212 | onclick : { | 218 | onclick : { |
| 213 | fn : i3GEOF.legenda.representacao | 219 | fn : i3GEOF.legenda.representacao |
| @@ -346,6 +352,12 @@ i3GEOF.legenda = | @@ -346,6 +352,12 @@ i3GEOF.legenda = | ||
| 346 | if ($i("i3GEOlegendaClassesValorUnico")) { | 352 | if ($i("i3GEOlegendaClassesValorUnico")) { |
| 347 | $i("i3GEOlegendaClassesValorUnico").innerHTML = retorno.dados; | 353 | $i("i3GEOlegendaClassesValorUnico").innerHTML = retorno.dados; |
| 348 | } | 354 | } |
| 355 | + if ($i("i3GEOlegendaitensMetade")) { | ||
| 356 | + $i("i3GEOlegendaitensMetade").innerHTML = retorno.dados; | ||
| 357 | + } | ||
| 358 | + if ($i("i3GEOlegendaitensMetadeId")) { | ||
| 359 | + $i("i3GEOlegendaitensMetadeId").innerHTML = retorno.dados; | ||
| 360 | + } | ||
| 349 | if ($i("i3GEOlegendaitensValorClass")) { | 361 | if ($i("i3GEOlegendaitensValorClass")) { |
| 350 | $i("i3GEOlegendaitensValorClass").innerHTML = retorno.dados; | 362 | $i("i3GEOlegendaitensValorClass").innerHTML = retorno.dados; |
| 351 | } | 363 | } |
| @@ -1297,6 +1309,67 @@ i3GEOF.legenda = | @@ -1297,6 +1309,67 @@ i3GEOF.legenda = | ||
| 1297 | i3GEO.janela.tempoMsg("Selecione um item!"); | 1309 | i3GEO.janela.tempoMsg("Selecione um item!"); |
| 1298 | return; | 1310 | return; |
| 1299 | } | 1311 | } |
| 1312 | + if ($i("i3GEOFlegendaaplicaextent").checked === true) { | ||
| 1313 | + p += "&ext=" + i3GEO.util.extOSM2Geo(i3GEO.parametros.mapexten); | ||
| 1314 | + } else { | ||
| 1315 | + p += "&ext=" + i3GEO.util.extOSM2Geo(i3GEO.parametros.extentTotal); | ||
| 1316 | + } | ||
| 1317 | + i3GEOF.legenda.aguarde.visibility = "visible"; | ||
| 1318 | + cp.set_response_type("JSON"); | ||
| 1319 | + cp.call(p, "alteraclasse", fim); | ||
| 1320 | + } catch (e) { | ||
| 1321 | + i3GEO.janela.tempoMsg("Erro: " + e); | ||
| 1322 | + i3GEOF.legenda.aguarde.visibility = "hidden"; | ||
| 1323 | + } | ||
| 1324 | + }, | ||
| 1325 | + /* | ||
| 1326 | + * Function: metade | ||
| 1327 | + * | ||
| 1328 | + * Duas classes concentrando a soma das metades | ||
| 1329 | + * | ||
| 1330 | + * Veja: | ||
| 1331 | + * | ||
| 1332 | + * <ALTERACLASSE> | ||
| 1333 | + */ | ||
| 1334 | + metade : function() { | ||
| 1335 | + try { | ||
| 1336 | + if (i3GEOF.legenda.aguarde.visibility === "visible") { | ||
| 1337 | + return; | ||
| 1338 | + } | ||
| 1339 | + var item = $i("i3GEOlegendaitensMetade").getElementsByTagName("select")[0].value, | ||
| 1340 | + itemid = $i("i3GEOlegendaitensMetadeId").getElementsByTagName("select")[0].value, | ||
| 1341 | + ext = i3GEO.util.extOSM2Geo(i3GEO.parametros.mapexten), | ||
| 1342 | + p = i3GEO.configura.locaplic + "/classesphp/mapa_controle.php?g_sid=" | ||
| 1343 | + + i3GEO.configura.sid | ||
| 1344 | + + "&funcao=alteraclasse" | ||
| 1345 | + + "&tema=" | ||
| 1346 | + + i3GEOF.legenda.tema | ||
| 1347 | + + "&item=" | ||
| 1348 | + + item | ||
| 1349 | + + "&itemid=" | ||
| 1350 | + + itemid | ||
| 1351 | + + "&opcao=metade&ignorar=" | ||
| 1352 | + + $i("i3GEOlegendaignorar").value | ||
| 1353 | + + "&ext=" | ||
| 1354 | + + ext, | ||
| 1355 | + cp = new cpaint(), | ||
| 1356 | + fim = function() { | ||
| 1357 | + i3GEOF.legenda.aposAlterarLegenda(); | ||
| 1358 | + i3GEOF.legenda.aguarde.visibility = "hidden"; | ||
| 1359 | + }; | ||
| 1360 | + if (item == "") { | ||
| 1361 | + i3GEO.janela.tempoMsg("Selecione um item!"); | ||
| 1362 | + return; | ||
| 1363 | + } | ||
| 1364 | + if (itemid == "") { | ||
| 1365 | + i3GEO.janela.tempoMsg("Selecione um item!"); | ||
| 1366 | + return; | ||
| 1367 | + } | ||
| 1368 | + if ($i("i3GEOFlegendaaplicaextent").checked === true) { | ||
| 1369 | + p += "&ext=" + i3GEO.util.extOSM2Geo(i3GEO.parametros.mapexten); | ||
| 1370 | + } else { | ||
| 1371 | + p += "&ext=" + i3GEO.util.extOSM2Geo(i3GEO.parametros.extentTotal); | ||
| 1372 | + } | ||
| 1300 | i3GEOF.legenda.aguarde.visibility = "visible"; | 1373 | i3GEOF.legenda.aguarde.visibility = "visible"; |
| 1301 | cp.set_response_type("JSON"); | 1374 | cp.set_response_type("JSON"); |
| 1302 | cp.call(p, "alteraclasse", fim); | 1375 | cp.call(p, "alteraclasse", fim); |
ferramentas/legenda/template_mst.html
| @@ -187,6 +187,19 @@ | @@ -187,6 +187,19 @@ | ||
| 187 | </fieldset> | 187 | </fieldset> |
| 188 | <br> | 188 | <br> |
| 189 | <fieldset style='padding: 5px; margin: 2px;'> | 189 | <fieldset style='padding: 5px; margin: 2px;'> |
| 190 | + <legend>{{{metade}}}</legend> | ||
| 191 | + <p class='paragrafo'>{{{duasmetades}}}</p> | ||
| 192 | + <div id='i3GEOlegendaitensMetade' class='styled-select'></div> | ||
| 193 | + <br> | ||
| 194 | + <p class='paragrafo'>{{{iunico}}}</p> | ||
| 195 | + <div id='i3GEOlegendaitensMetadeId' class='styled-select'></div> | ||
| 196 | + <br> | ||
| 197 | + <p class='paragrafo'> | ||
| 198 | + <input id='i3GEOlegendabotaoMetade' size='25' type='button' value='{{{aplicar}}}' /> | ||
| 199 | + </p> | ||
| 200 | + </fieldset> | ||
| 201 | + <br> | ||
| 202 | + <fieldset style='padding: 5px; margin: 2px;'> | ||
| 190 | <legend>{{{calcularQuartil}}}</legend> | 203 | <legend>{{{calcularQuartil}}}</legend> |
| 191 | <p class='paragrafo'>{{{criaQuartis}}}</p> | 204 | <p class='paragrafo'>{{{criaQuartis}}}</p> |
| 192 | <div id='i3GEOlegendaitensValorQuartil' class='styled-select'></div> | 205 | <div id='i3GEOlegendaitensValorQuartil' class='styled-select'></div> |