mirror of
https://github.com/wavelog/wavelog.git
synced 2026-03-22 10:24:14 +00:00
[Sat planner] First version of sat planner added
This commit is contained in:
@@ -173,4 +173,103 @@ class Satellite extends CI_Controller {
|
||||
echo json_encode($satellite_data, JSON_FORCE_OBJECT);
|
||||
}
|
||||
|
||||
public function pass() {
|
||||
$this->load->model('satellite_model');
|
||||
$this->load->model('stations');
|
||||
$active_station_id = $this->stations->find_active();
|
||||
$pageData['activegrid'] = $this->stations->gridsquare_from_station($active_station_id);
|
||||
|
||||
$pageData['satellites'] = $this->satellite_model->get_all_satellites_with_tle();
|
||||
|
||||
$footerData = [];
|
||||
$footerData['scripts'] = [
|
||||
'assets/js/sections/satpasses.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/sections/satpasses.js")),
|
||||
];
|
||||
|
||||
// Render Page
|
||||
$pageData['page_title'] = "Satellite pass";
|
||||
$this->load->view('interface_assets/header', $pageData);
|
||||
$this->load->view('satellite/pass');
|
||||
$this->load->view('interface_assets/footer', $footerData);
|
||||
}
|
||||
|
||||
public function searchpasses() {
|
||||
try {
|
||||
$result = $this->get_tle_for_predict();
|
||||
$this->calcpass($result);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
header("Content-type: application/json");
|
||||
echo json_encode(['ok' => 'Error', 'message' => $e->getMessage() . $e->getCode()]);
|
||||
}
|
||||
}
|
||||
|
||||
public function get_tle_for_predict() {
|
||||
$sat = $this->security->xss_clean($this->input->post('sat'));
|
||||
$this->load->model('satellite_model');
|
||||
return $this->satellite_model->get_tle($sat);
|
||||
}
|
||||
|
||||
function calcpass($sat_tle) {
|
||||
require_once realpath(__DIR__ . "/../../predict/Predict.php");
|
||||
require_once realpath(__DIR__ . "/../../predict/Predict/Sat.php");
|
||||
require_once realpath(__DIR__ . "/../../predict/Predict/QTH.php");
|
||||
require_once realpath(__DIR__ . "/../../predict/Predict/Time.php");
|
||||
require_once realpath(__DIR__ . "/../../predict/Predict/TLE.php");
|
||||
|
||||
// Track execution time of this script
|
||||
$start = microtime(true);
|
||||
|
||||
// The observer or groundstation is called QTH in ham radio terms
|
||||
$predict = new Predict();
|
||||
$qth = new Predict_QTH();
|
||||
$qth->alt = $this->security->xss_clean($this->input->post('altitude')); // Altitude in meters
|
||||
|
||||
$strQRA = $this->security->xss_clean($this->input->post('yourgrid'));
|
||||
|
||||
if ((strlen($strQRA) % 2 == 0) && (strlen($strQRA) <= 10)) { // Check if QRA is EVEN (the % 2 does that) and smaller/equal 8
|
||||
$strQRA = strtoupper($strQRA);
|
||||
if (strlen($strQRA) == 4) $strQRA .= "LL"; // Only 4 Chars? Fill with center "LL" as only A-R allowed
|
||||
if (strlen($strQRA) == 6) $strQRA .= "55"; // Only 6 Chars? Fill with center "55"
|
||||
if (strlen($strQRA) == 8) $strQRA .= "LL"; // Only 8 Chars? Fill with center "LL" as only A-R allowed
|
||||
|
||||
if (!preg_match('/^[A-R]{2}[0-9]{2}[A-X]{2}[0-9]{2}[A-X]{2}$/', $strQRA)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(!$this->load->is_loaded('Qra')) {
|
||||
$this->load->library('Qra');
|
||||
}
|
||||
$homecoordinates = $this->qra->qra2latlong($this->security->xss_clean($this->input->post('yourgrid')));
|
||||
|
||||
$qth->lat = $homecoordinates[0];
|
||||
$qth->lon = $homecoordinates[1];
|
||||
|
||||
$temp = preg_split('/\n/', $sat_tle->tle);
|
||||
|
||||
$tle = new Predict_TLE($sat_tle->satellite, $temp[0], $temp[1]); // Instantiate it
|
||||
$sat = new Predict_Sat($tle); // Load up the satellite data
|
||||
|
||||
$now = Predict_Time::get_current_daynum(); // get the current time as Julian Date (daynum)
|
||||
|
||||
// You can modify some preferences in Predict(), the defaults are below
|
||||
//
|
||||
$predict->minEle = $this->security->xss_clean($this->input->post('minelevation')); // Minimum elevation for a pass
|
||||
// $predict->timeRes = 10; // Pass details: time resolution in seconds
|
||||
// $predict->numEntries = 20; // Pass details: number of entries per pass
|
||||
// $predict->threshold = -6; // Twilight threshold (sun must be at this lat or lower)
|
||||
|
||||
// Get the passes and filter visible only, takes about 4 seconds for 10 days
|
||||
$results = $predict->get_passes($sat, $qth, $now, 10);
|
||||
$filtered = $predict->filterVisiblePasses($results);
|
||||
|
||||
$zone = $this->security->xss_clean($this->input->post('timezone'));
|
||||
$format = 'm-d-Y H:i:s'; // Time format from PHP's date() function
|
||||
|
||||
$data['filtered'] = $filtered;
|
||||
$data['zone'] = $zone;
|
||||
$data['format'] = $format;
|
||||
$this->load->view('satellite/passtable', $data);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user