示例#1
0
 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];
示例#2
0
文件: jenks.php 项目: thofaure/jenks
/**
 * 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";
     }
 }