public function distance()
 {
     $distance = 0;
     for ($i = 0; $i < count($this->places) - 1; $i++) {
         $distance += Distance::between($this->places[$i]->point, $this->places[$i + 1]->point);
     }
     return $distance;
 }
示例#2
0
 private function createRoadmaps(Roadmap $roadmap)
 {
     $places = $roadmap->getRemainingPlaces();
     $from = $roadmap->getLastPlace();
     $selections = [];
     foreach ($places as $selection) {
         $selections[] = ["distance" => Distance::between($from->point, $selection->point), "place" => $selection];
     }
     usort($selections, function ($a, $b) {
         return $a["distance"] <=> $b["distance"];
     });
     $selections = $this->selection->select($selections);
     $roadmaps = [];
     foreach ($selections as $i => $selection) {
         $currentRoadmap = $roadmap;
         if ($i != count($selections) - 1) {
             $currentRoadmap = clone $roadmap;
         }
         $currentRoadmap->addPlace($selection["place"]);
         $roadmaps[] = $currentRoadmap;
     }
     return $roadmaps;
 }