'; echo ' ' . __("Satellite") . ' ' . __("Date") . ' ' . __("Sked AOS Time") . ' ' . __("Sked LOS Time") . ' ' . __("Duration") . ' '; foreach ($overlaps as $overlap) { $satellite = $overlap['grid1']->satname; $skedDate = Predict_Time::daynum2readable($overlap['grid1']->visible_aos, $zone ?? 'UTC', $format); $skedAOS = $overlap['grid1']->visible_aos < $overlap['grid2']->visible_aos ? $overlap['grid2']->visible_aos : $overlap['grid1']->visible_aos; $skedLOS = $overlap['grid1']->visible_los < $overlap['grid2']->visible_los ? $overlap['grid1']->visible_los : $overlap['grid2']->visible_los; $timestamp = strtotime($date); echo ''; echo "". $satellite . ""; echo "" . date($custom_date_format, $timestamp) . ""; echo "" . Predict_Time::daynum2readable($skedAOS, $zone ?? 'UTC', $format) . ""; echo "" . Predict_Time::daynum2readable($skedLOS, $zone ?? 'UTC', $format) . ""; echo "" . returntimediff(Predict_Time::daynum2readable($skedAOS, $zone ?? 'UTC', $format), Predict_Time::daynum2readable($skedLOS, $zone ?? 'UTC', $format), $format) . ""; echo ""; } echo ''; echo ''; foreach ($overlaps as $overlap) { echo ''; echo ''; echo ''; echo ''; echo ''; $aos_az = round($overlap['grid1']->visible_aos_az); echo ''; $max_el = round($overlap['grid1']->max_el); echo ''; echo ''; $los_az = round($overlap['grid1']->visible_los_az); echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; $aos_az = round($overlap['grid2']->visible_aos_az); echo ''; $max_el = round($overlap['grid2']->max_el); echo ''; echo ''; $los_az = round($overlap['grid2']->visible_los_az); echo ''; echo ''; echo ""; // Separator row } echo ""; echo "
' . __("Grid") . ' ' . __("Satellite") . ' ' . __("AOS Time") . ' ' . __("Duration") . ' ' . __("AOS Azimuth") . ' ' . __("Max Elevation") . ' ' . __("LOS Time") . ' ' . __("LOS Azimuth") . '
' . strtoupper($yourgrid) . '' . $overlap['grid1']->satname . '' . Predict_Time::daynum2readable($overlap['grid1']->visible_aos, $zone ?? 'UTC', $format) . '' . returntimediff(Predict_Time::daynum2readable($overlap['grid1']->visible_aos, $zone ?? 'UTC', $format), Predict_Time::daynum2readable($overlap['grid1']->visible_los, $zone ?? 'UTC', $format), $format) . '' . $aos_az . ' ° (' . azDegreesToDirection($overlap['grid1']->visible_aos_az) . ')' . $max_el . ' °' . Predict_Time::daynum2readable($overlap['grid1']->visible_los, $zone ?? 'UTC', $format) . '' . $los_az . ' ° (' . azDegreesToDirection($overlap['grid1']->visible_los_az) . ')
' . strtoupper($skedgrid) . '' . $overlap['grid2']->satname . '' . Predict_Time::daynum2readable($overlap['grid2']->visible_aos, $zone ?? 'UTC', $format) . '' . returntimediff(Predict_Time::daynum2readable($overlap['grid2']->visible_aos, $zone ?? 'UTC', $format), Predict_Time::daynum2readable($overlap['grid2']->visible_los, $zone ?? 'UTC', $format), $format) . '' . $aos_az . ' ° (' . azDegreesToDirection($overlap['grid2']->visible_aos_az) . ')' . $max_el . ' °' . Predict_Time::daynum2readable($overlap['grid2']->visible_los, $zone ?? 'UTC', $format) . '' . $los_az . ' ° (' . azDegreesToDirection($overlap['grid2']->visible_los_az) . ')
---
"; echo ""; } else { echo '
'; echo '

'.__('Search failed!').'

'; echo '

'.__('No overlapping passes found. Please check the input parameters.').'

'; echo '
'; } function returntimediff($start, $end, $format) { $datetime1 = DateTime::createFromFormat($format, $end); $datetime2 = DateTime::createFromFormat($format, $start); $interval = $datetime1->diff($datetime2); $diff = sprintf('%02d', (($interval->h*60)+$interval->i)).':'.sprintf('%02d', $interval->s).' '.__("min"); return $diff; } function azDegreesToDirection($az = 0) { $i = floor($az / 22.5); $m = (22.5 * (2 * $i + 1)) / 2; $i = ($az >= $m) ? $i + 1 : $i; return trim(substr('N NNENE ENEE ESESE SSES SSWSW WSWW WNWNW NNWN ', $i * 3, 3)); }