Example #1
0
 /**
  * Calculate elevation value
  * 
  * This method does directly update the route object.
  */
 public function calculateElevation()
 {
     $Calculator = new Calculation\Calculator($this->Route->elevations());
     $Calculator->calculate();
     $this->Route->set(Route\Entity::ELEVATION, $Calculator->totalElevation());
     $this->Route->set(Route\Entity::ELEVATION_UP, $Calculator->elevationUp());
     $this->Route->set(Route\Entity::ELEVATION_DOWN, $Calculator->elevationDown());
 }
 /**
  * Run recalculations
  */
 public function run()
 {
     $Query = $this->getQuery();
     $Update = $this->prepareUpdate();
     while ($Data = $Query->fetch()) {
         $Elevation = \Runalyze\Model\Object::explode($Data['elevations']);
         $Calculator = new Elevation\Calculation\Calculator($Elevation);
         $Calculator->calculate();
         if ($Calculator->totalElevation() != $Data['elevation'] || $Calculator->elevationUp() != $Data['elevation_up']) {
             $Update->bindValue(':id', $Data['id']);
             $Update->bindValue(':elevation', $Calculator->totalElevation());
             $Update->bindValue(':elevation_up', $Calculator->elevationUp());
             $Update->bindValue(':elevation_down', $Calculator->elevationDown());
             $Update->execute();
             $this->NumberOfRoutes++;
         }
         $this->Results[$Data['id']] = array($Calculator->totalElevation(), $Calculator->elevationUp(), $Calculator->elevationDown());
     }
 }
Example #3
0
 public function testAlgorithmDouglasPeucker()
 {
     $Method = new ElevationMethod();
     $Method->set(ElevationMethod::DOUGLAS_PEUCKER);
     $Calc = new Calculator(array(0, 2, 4, 6, 5, 7, 4, 8, 10, 0), $Method, 2);
     $Calc->calculate();
     $this->assertEquals(13, $Calc->totalElevation());
     $this->assertEquals(13, $Calc->elevationUp());
     $this->assertEquals(13, $Calc->elevationDown());
 }
 /**
  * Get different algorithms for
  * @param array $array
  * @return string
  */
 protected function getDifferentAlgorithmsFor($array)
 {
     $Method = new ElevationMethod();
     $Calculator = new Elevation\Calculation\Calculator($array);
     $TresholdRange = range(1, 10);
     $Algorithms = array(array(ElevationMethod::NONE, false), array(ElevationMethod::THRESHOLD, true), array(ElevationMethod::DOUGLAS_PEUCKER, true));
     $Code = '<table class="fullwidth zebra-style small">';
     $Code .= '<thead>';
     $Code .= '<tr><th class="r">' . __('Threshold') . ':</th>';
     foreach ($TresholdRange as $t) {
         $Code .= '<th>' . $t . '</th>';
     }
     $Code .= '</tr>';
     $Code .= '</thead>';
     $Code .= '<tbody>';
     foreach ($Algorithms as $Algorithm) {
         $Method->set($Algorithm[0]);
         $Calculator->setMethod($Method);
         $Code .= '<tr><td class="b">' . $Method->valueAsLongString() . '</td>';
         if ($Algorithm[1]) {
             foreach ($TresholdRange as $t) {
                 $highlight = Configuration::ActivityView()->elevationMinDiff() == $t && Configuration::ActivityView()->elevationMethod()->value() == $Algorithm[0] ? ' highlight' : '';
                 $Calculator->setThreshold($t);
                 $Calculator->calculate();
                 $Code .= '<td class="r' . $highlight . '">' . $Calculator->totalElevation() . '&nbsp;m</td>';
             }
         } else {
             $Calculator->calculate();
             $Code .= '<td class="c' . (Configuration::ActivityView()->elevationMethod()->value() == $Algorithm[0] ? ' highlight' : '') . '" colspan="' . count($TresholdRange) . '">' . $Calculator->totalElevation() . '&nbsp;m</td>';
         }
         $Code .= '</tr>';
     }
     $Code .= '</tbody>';
     $Code .= '</table>';
     return $Code;
 }