public function new_item_info()
 {
     $origin = Airport::where('id', Input::get('origin_airport_id'))->first();
     $destination = Airport::where('id', Input::get('destination_airport_id'))->first();
     $distance = great_circle_distance($origin->lat, $origin->lng, $destination->lat, $destination->lng);
     return Response::json(array('flight_duration' => flight_duration(Input::get('speed'), $distance), 'origin_iata_code' => $origin->iata_code, 'distance' => $distance, 'destination_iata_code' => $destination->iata_code));
 }
 public function show($origin_id, $destination_id)
 {
     $origin = $this->airportRepo->getById($origin_id);
     $destination = $this->airportRepo->getById($destination_id);
     $this->routeDemandUtility->setRoute($origin, $destination);
     $distance = great_circle_distance($origin->lat, $origin->lng, $destination->lat, $destination->lng);
     $flights['to'] = $this->timetableRepo->getByRoute($origin, $destination);
     $flights['return'] = $this->timetableRepo->getByRoute($destination, $origin);
     $data = array('origin' => $origin, 'destination' => $destination, 'year' => round($this->routeDemandUtility->getPaxPerYear()), 'week' => round($this->routeDemandUtility->getPaxPerWeek()), 'distance' => round($distance), 'flights' => $flights);
     return View::make('routes/show_ajax', $data);
 }
 public function start()
 {
     $timetableItems = $this->timetableRepo->getTimetableItemsBeyondFlightBorad();
     $flights = array();
     foreach ($timetableItems as $item) {
         $newFlight = new \Flight();
         $departure_time = $this->makeDepartureTimestamp($item->departure_day_of_week, $item->departure_hour);
         $arrival_time = clone $departure_time;
         $arrival_time->addSeconds($item->flight_duration);
         $newFlight->fill(['timetable_id' => $item->id, 'airline_id' => $item->airline_id, 'airplane_id' => $item->airplane_id, 'origin_airport_id' => $item->origin_airport_id, 'destination_airport_id' => $item->destination_airport_id, 'departure_time' => $departure_time, 'arrival_time' => $arrival_time, 'distance' => great_circle_distance($item->origin->lat, $item->origin->lng, $item->destination->lat, $item->destination->lng), 'flight_number' => $item->flight_number]);
         array_push($flights, $newFlight);
     }
     $this->addedFlights = count($flights);
     $this->flightRepo->saveMany($flights);
 }
 private function distanceFactor($origin, $destination)
 {
     $distance = great_circle_distance($origin->lat, $origin->lng, $destination->lat, $destination->lng);
     $factor = 0;
     if ($distance > 10) {
         $factor = 0.001;
     }
     if ($distance > 50) {
         $factor = 0.01;
     }
     if ($distance > 100) {
         $factor = 0.2;
     }
     if ($distance > 300) {
         $factor = 0.5;
     }
     if ($distance > 500) {
         $factor = 0.9;
     }
     if ($distance > 700) {
         $factor = 1;
     }
     if ($distance > 1600) {
         $factor = 0.9;
     }
     if ($distance > 2000) {
         $factor = 0.8;
     }
     if ($distance > 2500) {
         $factor = 0.5;
     }
     if ($distance > 3000) {
         $factor = 0.3;
     }
     if ($distance > 4000) {
         $factor = 0.2;
     }
     if ($distance > 6000) {
         $factor = 0.1;
     }
     if ($distance > 9000) {
         $factor = 0.05;
     }
     if ($origin->role == 5 and $destination->role == 5) {
         $factor += 1;
     }
     return $factor;
 }
 /**
  * A basic functional test example.
  *
  * @return void
  */
 public function testDistance()
 {
     $this->assertEquals(1470, great_circle_distance('52.16583252', '20.96722221', '51.47083282', '-0.46055600'));
 }