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; }
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; }