/** * Execute the console command. * * @return mixed */ public function handle() { Hotspot::truncate(); $places = Place::all(); $clusters = $this->getClusters($places->all(), 1.5); $centroids = $this->getCentroids($clusters); $hotspots = array_map(function ($centroid) { $locality = $this->getLocalityForLatLon($centroid['latitude'], $centroid['longitude']); $categories = []; foreach ($centroid['places'] as $place) { foreach ($place->ranks as $rank) { if (!isset($categories[$rank->category->name])) { $categories[$rank->category->name] = 0; } $categories[$rank->category->name]++; } } arsort($categories); $categoryNames = array_keys($categories); return Hotspot::create(['name' => $locality, 'known_for' => implode(', ', $categoryNames), 'latitude' => $centroid['latitude'], 'longitude' => $centroid['longitude'], 'count' => $centroid['count']]); }, $centroids); }