/**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     $stations = Station::all();
     // holds measurements to add separately from the per-station batches. this speeds up
     // inserting measurements for stations that don't get a history significantly.
     $later = [];
     foreach ($stations as $station) {
         $date = Carbon::now();
         $temp = ['station_id' => $station->id, 'time' => $date->format(DateTime::ATOM), 'temperature' => $this->getRandomDouble(-30, 40, 1), 'dew_point' => $this->getRandomDouble(-40, 35, 1), 'station_pressure' => $this->getRandomDouble(900, 1100, 1), 'sea_level_pressure' => $this->getRandomDouble(900, 1100, 1), 'visibility' => $this->getRandomDouble(0, 165, 1), 'precipitation' => $this->getRandomDouble(0, 15, 1), 'snow_depth' => $this->getRandomDouble(0, 90, 1), 'events' => rand(0, 1) . rand(0, 1) . rand(0, 1) . rand(0, 1) . rand(0, 1) . rand(0, 1), 'cloud_cover' => $this->getRandomDouble(0, 100, 1), 'wind_direction' => rand(0, 359), 'wind_speed' => $this->getRandomDouble(0, 80, 1)];
         // generate more measurements for some stations
         if ($station->longitude > $this->between[0] && $station->longitude < $this->between[1]) {
             $data = [$temp];
             for ($i = 0; $i < $this->seedAmount; $i++) {
                 // travel back in tiiime!
                 $date->subSeconds(44);
                 $temp = ['station_id' => $station->id, 'time' => $date->format(DateTime::ATOM), 'temperature' => $this->createRandomValueBasedOn($temp['temperature']), 'dew_point' => $this->createRandomValueBasedOn($temp['dew_point']), 'station_pressure' => $this->createRandomValueBasedOn($temp['station_pressure']), 'sea_level_pressure' => $this->createRandomValueBasedOn($temp['sea_level_pressure']), 'visibility' => $this->createRandomValueBasedOn($temp['visibility']), 'precipitation' => $this->createRandomValueBasedOn($temp['precipitation']), 'snow_depth' => $this->createRandomValueBasedOn($temp['snow_depth']), 'events' => rand(0, 1) . rand(0, 1) . rand(0, 1) . rand(0, 1) . rand(0, 1) . rand(0, 1), 'cloud_cover' => $this->createRandomValueBasedOn($temp['cloud_cover']), 'wind_direction' => $this->createRandomValueBasedOn($temp['wind_direction']), 'wind_speed' => $this->createRandomValueBasedOn($temp['wind_speed'])];
                 $data[] = $temp;
             }
             DB::table('measurements')->insert($data);
         } else {
             $later[] = $temp;
             if (count($later) > $this->seedAmount) {
                 DB::table('measurements')->insert($later);
                 $later = [];
             }
         }
     }
     if (count($later) > 0) {
         DB::table('measurements')->insert($later);
     }
 }
 public function showStationInformation()
 {
     $stations = Station::all();
     if (!empty($stations)) {
         foreach ($stations as $station) {
             echo $station->name . "<br/>";
         }
         echo "Those were the stations!";
     } else {
         echo "No stations!";
     }
 }
 /**
  * Returns a single graph line for a given property and station over the
  * past 24 hours.
  */
 public function showGraphJson(Request $request)
 {
     $property = $request->input('property');
     $station = Station::find($request->input('station'));
     $interval = $request->input('interval', 1);
     $measurements = $station->measurements()->where('time', '>', Carbon::now()->subDay())->orderBy('time', 'asc')->select(['time', $property])->get();
     return $measurements->map(function ($model) use($property, $interval) {
         $time = Carbon::parse($model->time)->timestamp;
         return [$time, (double) $model->{$property}, (int) floor($time / (int) $interval)];
     })->groupBy(2)->map(function ($list) {
         return [floor($list->average(0)), $list->average(1)];
     })->values();
 }
 public function index()
 {
     $field['numberFields'] = array_merge(self::$FIELDS['measurements']['numberFields'], self::$FIELDS['stations']['numberFields']);
     $field['nameFields'] = self::$FIELDS['stations']['nameFields'];
     $field['showOnlyFields'] = ['events'];
     foreach (self::$FIELDS['measurements']['numberFields'] as $numberField) {
         $fieldValues[$numberField]['min'] = Measurement::min($numberField);
         $fieldValues[$numberField]['max'] = Measurement::max($numberField);
     }
     foreach (self::$FIELDS['stations']['numberFields'] as $numberField) {
         $fieldValues[$numberField]['min'] = Station::min($numberField);
         $fieldValues[$numberField]['max'] = Station::max($numberField);
     }
     return view('weather.export', ['fields' => $field, 'stations' => Station::all()->sortBy('name'), 'countries' => Station::distinct('country')->lists('country')->sort(), 'fieldValues' => $fieldValues]);
 }
 public function showMeasurements($id)
 {
     $measurements = Station::find($id)->measurements();
     return view('measurement.overview', ['measurements' => $measurements->paginate(30)]);
 }
 /**
  * Displays information per station of the last
  * 24 hours.
  */
 public function showPerStation(Request $request)
 {
     $station = Station::find($request->input('station'));
     return ['station' => $station, 'measurements' => $station->measurements()->where('time', '>=', Carbon::now()->subDay())->get()];
 }