예제 #1
0
 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
예제 #2
0
파일: orbits.py 프로젝트: fisadev/sateye
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)
예제 #4
0
 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)