def sun_elevation_on_earth(self, when_utc=None): """Return Sun elevation on Earth of location at when_utc.""" if when_utc is None: when_utc = dt.datetime.utcnow() _, elevation = sun_azimuth_elevation(self.latitude_deg, self.longitude_deg, when_utc) return elevation
def predict_passes(satellite_id, tle, target, start_date, end_date, min_tca_elevation=None, min_sun_elevation=None): """ Predict the passes of a satellite over a location on TCA between two dates. """ _, line1, line2 = split_tle(tle) predictor = get_predictor_from_tle_lines((line1, line2)) location = target.as_op_location() start_date = ensure_naive(start_date) end_date = ensure_naive(end_date) # this is done like this, because orbit_predictor interprets max_elevation_gt=None as # an angle and explodes extra_filters = {} if min_tca_elevation is not None: extra_filters['max_elevation_gt'] = min_tca_elevation passes_iterator = predictor.passes_over(location, start_date, limit_date=end_date, **extra_filters) for pass_ in passes_iterator: azimuth_elevation = sun_azimuth_elevation( location.latitude_deg, location.longitude_deg, pass_.max_elevation_date, ) if min_sun_elevation is not None and azimuth_elevation.elevation < min_sun_elevation: # Sun is too low, skip this pass continue yield Pass( satellite_id=satellite_id, target_id=target.object_id, aos=make_aware(pass_.aos, timezone=pytz.utc), los=make_aware(pass_.los, timezone=pytz.utc), tca=make_aware(pass_.max_elevation_date, timezone=pytz.utc), tca_elevation=pass_.max_elevation_deg, sun_azimuth=azimuth_elevation.azimuth, sun_elevation=azimuth_elevation.elevation, )
def test_19(self): date = self.base_date + dt.timedelta(hours=19) azimuth, elevation = sun_azimuth_elevation(*self.coords, when=date) self.assertAlmostEqual(azimuth, 275.51, delta=0.5) self.assertAlmostEqual(elevation, -15.55, delta=0.5)
def assertElevation(self, date, expected): lat, lon = self.location _, actual = sun_azimuth_elevation(lat, lon, date) self.assertAlmostEqual(actual, expected, delta=4)
def test_14(self): date = self.base_date + dt.timedelta(hours=14) azimuth, elevation = sun_azimuth_elevation(*self.coords, when=date) self.assertAlmostEqual(azimuth, 280.49, delta=0.5) self.assertAlmostEqual(elevation, 58.96, delta=0.5)
def test_16(self): date = self.base_date + dt.timedelta(hours=16) azimuth, elevation = sun_azimuth_elevation(*self.coords, when=date) self.assertAlmostEqual(azimuth, 276.14, delta=0.5) self.assertAlmostEqual(elevation, 29.26, delta=0.5)
def test_12(self): date = self.base_date + dt.timedelta(hours=12) azimuth, elevation = sun_azimuth_elevation(*self.coords, when=date) self.assertAlmostEqual(azimuth, 353.54, delta=0.5) self.assertAlmostEqual(elevation, 84.55, delta=0.5)
def test_13(self): date = self.base_date + dt.timedelta(hours=13) azimuth, elevation = sun_azimuth_elevation(*self.coords, when=date) self.assertAlmostEqual(azimuth, 289.36, delta=0.5) self.assertAlmostEqual(elevation, 73.5, delta=0.5)
def test_10(self): date = self.base_date + dt.timedelta(hours=10) azimuth, elevation = sun_azimuth_elevation(*self.coords, when=date) self.assertAlmostEqual(azimuth, 79, delta=0.5) self.assertAlmostEqual(elevation, 60.16, delta=0.5)
def test_11(self): date = self.base_date + dt.timedelta(hours=11) azimuth, elevation = sun_azimuth_elevation(*self.coords, when=date) self.assertAlmostEqual(azimuth, 69.05, delta=0.5) self.assertAlmostEqual(elevation, 74.64, delta=0.5)
def test_9(self): date = self.base_date + dt.timedelta(hours=9) azimuth, elevation = sun_azimuth_elevation(*self.coords, when=date) self.assertAlmostEqual(azimuth, 82.21, delta=0.5) self.assertAlmostEqual(elevation, 45.36, delta=0.5)
def test_8(self): date = self.base_date + dt.timedelta(hours=8) azimuth, elevation = sun_azimuth_elevation(*self.coords, when=date) self.assertAlmostEqual(azimuth, 83.64, delta=0.5) self.assertAlmostEqual(elevation, 30.67, delta=0.5)
def test_return_value(self): obj = sun_azimuth_elevation(*self.coords, when=self.base_date) self.assertTrue(hasattr(obj, 'azimuth')) self.assertTrue(hasattr(obj, 'elevation'))
def test_default_when(self): sun_azimuth_elevation(0, 0)
def test_15(self): date = self.base_date + timedelta(hours=15) azimuth, elevation = sun_azimuth_elevation(*self.coords, when=date) self.assertAlmostEqual(azimuth, 277.49, delta=0.5) self.assertAlmostEqual(elevation, 44.14, delta=0.5)