if (empty($limite)) { $limite = ""; } if ($tipo == "quebrasnaturais") { $m = new Metaestat(); $dados = $m->dadosMedidaVariavel($id_medida_variavel, "", 0, "", $limite, true); $metaVariavel = $m->listaMedidaVariavel("", $id_medida_variavel); $colunavalor = $metaVariavel["colunavalor"]; $valores = array(); foreach ($dados as $d) { if ($d[$colunavalor]) { $valores[] = $d[$colunavalor]; } } include dirname(__FILE__) . "/../../pacotes/jenks-master/jenks.php"; $intervalos = getJenksClasses($numintervalos, $valores); $m->excluirRegistro("i3geoestat_classes", "id_classificacao", $id_classificacao); for ($i = 0; $i < $numintervalos; ++$i) { if ($i == $numintervalos - 1) { $expressao = "(([" . $colunavalor . "]>=" . $intervalos[$i] . "))"; $titulo = ">= " . $intervalos[$i]; } else { $expressao = "(([" . $colunavalor . "]>=" . $intervalos[$i] . ")and([" . $colunavalor . "]<" . $intervalos[$i + 1] . "))"; $titulo = ">= " . $intervalos[$i] . " e < que " . $intervalos[$i + 1]; } $id_classe = $m->alteraClasseClassificacao($id_classificacao); if (!empty($cores)) { $cor = explode(",", $cores[$i]); $vermelho = $cor[0]; $verde = $cor[1]; $azul = $cor[2];
/** * This function determines the optimum number of classes for a given set of values by calculating the goodness of variance fit (GVF) * for class sizes 4 - 7. It will return the maximum values for each class and the number of values for each class in an array for the * number of classes that best fits the data. * * @param array $values - the values you want to determine the optimum deviation for * @param int $minimumNumberOfClasses - the minimum number of classes you want to try * @param int $maximumNumberOfClasses - the maximum number of classes you want to try * @return array - the maximum values for each array and the number of values for each class */ function getOptimalClassInformation($values, $minimumNumberOfClasses = 4, $maximumNumberOfClasses = 7) { // Make sure our values are sorted array_multisort($values); $numberOfUniqueValues = count(array_unique($values)); if ($numberOfUniqueValues <= $maximumNumberOfClasses) { $maximumValues = getJenksClasses($numberOfUniqueValues, $values); $numberOfValuesPerClass = getNumberOfValuesPerClass($values, $maximumValues); return array($maximumValues, $numberOfValuesPerClass); } else { $valuesAverage = calculateAverage($values); $SDAM = 0; foreach ($values as $value) { $SDAM += pow($value - $valuesAverage, 2); } for ($classNumber = $minimumNumberOfClasses; $classNumber <= $maximumNumberOfClasses; $classNumber++) { $maximumValues = getJenksClasses($classNumber, $values); $numberOfValuesPerClass = getNumberOfValuesPerClass($values, $maximumValues); $arraySliceIndex = 0; $SDCM = 0; foreach ($numberOfValuesPerClass as $numberOfValues) { $thisClass = array_slice($values, $arraySliceIndex, $numberOfValues); $thisClassAverage = calculateAverage($thisClass); $deviationsSumForClass = 0; foreach ($thisClass as $thisValue) { $deviationsSumForClass += pow($thisValue - $thisClassAverage, 2); } $SDCM += $deviationsSumForClass; $arraySliceIndex += $numberOfValues; } $gvfsArray[$classNumber] = 1 - $SDCM / $SDAM; $returnArraysToClassNumbers[$classNumber] = array($maximumValues, $numberOfValuesPerClass); } } return $returnArraysToClassNumbers[array_search(max($gvfsArray), $gvfsArray)]; }
function quebrasnaturais($item, $nclasses, $ignorar) { if (!$this->layer) { return "erro"; } $valores = $this->pegaValores($this->mapa, $this->layer, $item, true, $ignorar); if (count($valores) > 0) { include dirname(__FILE__) . "/../pacotes/jenks-master/jenks.php"; $classBreaks = getJenksClasses($nclasses, $valores); //echo "<pre>";var_dump($classBreaks);exit; $numclassesatual = $this->layer->numclasses; //apaga todas as classes existentes $classetemp = $this->layer->getClass(0); $estilotemp = $classetemp->getStyle(0); for ($i = 0; $i < $numclassesatual; ++$i) { $classe = $this->layer->getClass($i); $classe->set("status", MS_DELETE); } //adiciona as classes novas for ($i = 0; $i < $nclasses; ++$i) { $expressao = "(([" . $item . "]>" . $classBreaks[$i] . ")and([" . $item . "]<=" . $classBreaks[$i + 1] . "))"; $nomeclasse = "> " . $classBreaks[$i] . " e <= que " . $classBreaks[$i + 1]; if ($i == 0) { $expressao = "([" . $item . "]<=" . $classBreaks[$i + 1] . ")"; $nomeclasse = "<= que " . $classBreaks[$i + 1]; } if ($i == $nclasses - 1) { $expressao = "([" . $item . "] >=" . $classBreaks[$i] . ")"; $nomeclasse = ">= que " . $classBreaks[$i]; } $classe = ms_newClassObj($this->layer); $novoestilo = ms_newStyleObj($classe); if ($this->layer->type == 0) { $novoestilo->set("symbolname", "ponto"); $novoestilo->set("size", "6"); } $ncor = $novoestilo->color; $ncor->setrgb(mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); $ncor = $novoestilo->outlinecolor; $ncor->setrgb(255, 255, 255); $classe->setexpression($expressao); $classe->set("name", $nomeclasse); //$classe->set("title",($this->layer->name)."+".$i); } $this->layer->setMetaData("cache", ""); return "ok"; } else { return "erro. Nenhum valor numerico no item"; } }