Save PIREP route to ACARS data table #102

This commit is contained in:
Nabeel Shahzad
2018-01-01 13:48:02 -06:00
parent 216d686cc7
commit b456dc1a71
16 changed files with 258 additions and 43 deletions

View File

@@ -3,6 +3,9 @@
namespace App\Services;
use App\Models\Acars;
use App\Models\Airport;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Support\Collection;
use Log;
use \GeoJson\Geometry\Point;
@@ -34,6 +37,64 @@ class GeoService extends BaseService
$this->navRepo = $navRepo;
}
/**
* Parse a route string into a collection of Navadata points
* TODO: Add the distance calculation in here
* @param $route
* @param Airport|null $dep
* @param Airport|null $arr
* @return array|Collection
*/
public function routeToNavPoints($route, Airport $dep=null, Airport $arr=null)
{
$route = trim($route);
if(empty($route)) {
return collect();
}
$skip_points = ['SID', 'STAR'];
if($dep !== null) {
$skip_points[] = $dep->icao;
}
if($arr !== null) {
$skip_points[] = $arr->icao;
}
# Iterate through the route
$route = collect(explode(' ', $route))
->transform(function($point) use ($skip_points) {
$point = trim($point);
if(empty($point)) {
return false;
}
if(\in_array($point, $skip_points, true)) {
return false;
}
try {
$navpoints = $this->navRepo->findWhere(['id'=>$point]);
} catch(ModelNotFoundException $e) {
return false;
}
if($navpoints->count() === 0) {
return false;
} elseif ($navpoints->count() === 1) {
return $navpoints[0];
}
# find the closest waypoint...
})
->filter(function($value, $key) {
return !empty($value);
});
return $route;
}
/**
* Determine the closest set of coordinates from the starting position
* @param array $coordStart