/**
  * Add points to an existing long lat
  * @param $request
  * @return Response
  */
 public function addPointsToPath(Request $request)
 {
     $new_points = $request['points'];
     $array = GeoHelper::sanitizePoints($new_points);
     //dd($array);
     $old_path = $request['path'];
     $decoded_path = GeoHelper::decode($old_path);
     $points = array_merge($decoded_path, $array);
     return GeoHelper::encode($points);
 }
 public static function resolveNewSegmentFromActivity($token, $travel_data, $new_activity)
 {
     $iterinary = self::getUserCurrentIterinary($token);
     //        return $iterinary;
     if (!$iterinary || isset($iterinary['err'])) {
         $response = ['err code' => '403', 'message' => 'no current iterinaries found for user'];
         return $response;
     }
     //        dd($new_activity);
     $route = $iterinary->route;
     $last_activity = self::getLastActivity($token);
     //        return $last_activity;
     $segment = new Segment();
     //        return $last_activity;
     $segment->destination_name = $last_activity->place_name;
     $segment->origin_pos = $last_activity->lat . ',' . $last_activity->lng;
     $segment->details = $travel_data['transpo_details'];
     $segment->mode = $travel_data['mode'];
     $segment->day = self::getDiffInDays($token, $iterinary->id);
     $segment->origin_name = $new_activity['place_name'];
     $segment->destination_pos = $new_activity['lat'] . ',' . $new_activity['lng'];
     //        return $iterinary;
     $segment->price = $travel_data['expense'];
     $segment->sequence = $route->segments()->count() + 1;
     $points = array_merge([$last_activity->lat, $last_activity->lng], [$new_activity['lat'], $new_activity['lng']]);
     $segment->path = GeolocationHelper::encode($points);
     $segment->distance = GeolocationHelper::calculateDistance($segment);
     $segment->duration = GeolocationHelper::durationFromLastActivity($last_activity);
     $activity = new Activity();
     $activity->iterinary_id = $iterinary->id;
     $activity->day = self::getDiffInDays($token, $iterinary->id);
     $activity->end_time = Carbon::now()->toTimeString();
     $activity->start_time = $last_activity->created_at->toTimeString();
     // end activity
     // from end segment function
     //        $segment->destination_name = $destination_name;
     //        $segment->destination_pos = $lat . ',' . $lng;
     //        $segment->price = $price;
     //        $segment->distance = GeolocationHelper::calculateDistance($segment);
     //        $segment->duration = GeolocationHelper::calculateDuration($segment);
     //        $points = array_merge(GeolocationHelper::parseLongLat($segment->origin_pos), [$lng, $lat]);
     //
     //        $segment->path = GeolocationHelper::encode($points);
     //end from end segemtn function
     //        dd($segment);
     $route->segments()->save($segment);
     $segment->activity()->save($activity);
 }
 /**
  * @param $origin
  * @param $destination
  * @return string
  */
 public static function getFlightPath($origin, $destination)
 {
     $array = [];
     // FORMAT
     //        $array = [
     //            0 => [lat,lng],
     //            1 => [lat,lng]
     //        ];
     $array[0] = Geohelper::parseLongLat($origin);
     $array[1] = Geohelper::parseLongLat($destination);
     $path = Geohelper::encode($array);
     return $path;
 }
 /**
  * @return \Symfony\Component\HttpFoundation\Response
  */
 public function getPath()
 {
     $iterinary_id = Input::get('iterinary_id');
     $iterinary = Iterinary::find($iterinary_id);
     $route = $iterinary->route;
     if (!$route) {
         return response()->json(['err' => 'route not found'], 404);
     }
     //        dd($iterinary)
     $segments = $route->segments()->get();
     if ($segments->isEmpty()) {
         return response()->json(['err' => 'no segments', 'center_lat' => ''], 400);
     }
     $activities = $iterinary->activities()->with('typable')->get();
     $points = [];
     foreach ($segments as $segment) {
         $points[] = GeolocationHelper::decode($segment->path);
     }
     $center[] = $points[0][0];
     $center[] += $points[0][1];
     $points = GeolocationHelper::flatten($points);
     $path = GeolocationHelper::encode($points);
     $data = ['center' => $center, 'path' => $path, 'activities' => $activities];
     return response()->json($data, 200);
 }