Esempio n. 1
0
    def setUp(self):
        self.latitude_of_projection_origin = 0.0
        self.longitude_of_projection_origin = 0.0
        self.perspective_point_height = 35785831.0
        self.sweep_angle_axis = 'y'
        self.false_easting = 0.0
        self.false_northing = 0.0

        self.semi_major_axis = 6377563.396
        self.semi_minor_axis = 6356256.909
        self.ellipsoid = GeogCS(self.semi_major_axis, self.semi_minor_axis)
        self.globe = ccrs.Globe(semimajor_axis=self.semi_major_axis,
                                semiminor_axis=self.semi_minor_axis,
                                ellipse=None)

        # Actual and expected coord system can be re-used for
        # Geostationary.test_crs_creation and test_projection_creation.
        self.expected = ccrs.Geostationary(
            central_longitude=self.longitude_of_projection_origin,
            satellite_height=self.perspective_point_height,
            false_easting=self.false_easting,
            false_northing=self.false_northing,
            globe=self.globe,
            sweep_axis=self.sweep_angle_axis)
        self.geo_cs = Geostationary(self.latitude_of_projection_origin,
                                    self.longitude_of_projection_origin,
                                    self.perspective_point_height,
                                    self.sweep_angle_axis, self.false_easting,
                                    self.false_northing, self.ellipsoid)
Esempio n. 2
0
class Test(tests.IrisTest):
    def setUp(self):
        self.latitude_of_projection_origin = 0.0
        self.longitude_of_projection_origin = 0.0
        self.perspective_point_height = 35785831.0
        self.sweep_angle_axis = 'y'
        self.false_easting = 0.0
        self.false_northing = 0.0

        self.semi_major_axis = 6377563.396
        self.semi_minor_axis = 6356256.909
        self.ellipsoid = GeogCS(self.semi_major_axis, self.semi_minor_axis)
        self.globe = ccrs.Globe(semimajor_axis=self.semi_major_axis,
                                semiminor_axis=self.semi_minor_axis,
                                ellipse=None)

        # Actual and expected coord system can be re-used for
        # Geostationary.test_crs_creation and test_projection_creation.
        self.expected = ccrs.Geostationary(
            central_longitude=self.longitude_of_projection_origin,
            satellite_height=self.perspective_point_height,
            false_easting=self.false_easting,
            false_northing=self.false_northing,
            globe=self.globe,
            sweep_axis=self.sweep_angle_axis)
        self.geo_cs = Geostationary(self.latitude_of_projection_origin,
                                    self.longitude_of_projection_origin,
                                    self.perspective_point_height,
                                    self.sweep_angle_axis, self.false_easting,
                                    self.false_northing, self.ellipsoid)

    def test_crs_creation(self):
        res = self.geo_cs.as_cartopy_crs()
        self.assertEqual(res, self.expected)

    def test_projection_creation(self):
        res = self.geo_cs.as_cartopy_projection()
        self.assertEqual(res, self.expected)

    def test_non_zero_lat(self):
        with six.assertRaisesRegex(self, ValueError, 'Non-zero latitude'):
            Geostationary(0.1, self.longitude_of_projection_origin,
                          self.perspective_point_height, self.sweep_angle_axis,
                          self.false_easting, self.false_northing,
                          self.ellipsoid)

    def test_invalid_sweep(self):
        with six.assertRaisesRegex(self, ValueError,
                                   'Invalid sweep_angle_axis'):
            Geostationary(self.latitude_of_projection_origin,
                          self.longitude_of_projection_origin,
                          self.perspective_point_height, 'a',
                          self.false_easting, self.false_northing,
                          self.ellipsoid)
Esempio n. 3
0
 def test_invalid_sweep(self):
     with self.assertRaisesRegex(ValueError, 'Invalid sweep_angle_axis'):
         Geostationary(self.latitude_of_projection_origin,
                       self.longitude_of_projection_origin,
                       self.perspective_point_height, 'a',
                       self.false_easting, self.false_northing,
                       self.ellipsoid)
Esempio n. 4
0
    def test_geo_cs(self):
        latitude_of_projection_origin = 0.0
        longitude_of_projection_origin = 2.0
        perspective_point_height = 2000000.0
        sweep_angle_axis = 'x'
        false_easting = 100.0
        false_northing = 200.0

        semi_major_axis = 6377563.396
        semi_minor_axis = 6356256.909
        ellipsoid = GeogCS(semi_major_axis, semi_minor_axis)

        coord_system = Geostationary(
            latitude_of_projection_origin=latitude_of_projection_origin,
            longitude_of_projection_origin=longitude_of_projection_origin,
            perspective_point_height=perspective_point_height,
            sweep_angle_axis=sweep_angle_axis,
            false_easting=false_easting,
            false_northing=false_northing,
            ellipsoid=ellipsoid)
        expected = {
            'grid_mapping_name': b'geostationary',
            'latitude_of_projection_origin': latitude_of_projection_origin,
            'longitude_of_projection_origin': longitude_of_projection_origin,
            'perspective_point_height': perspective_point_height,
            'sweep_angle_axis': sweep_angle_axis,
            'false_easting': false_easting,
            'false_northing': false_northing,
            'semi_major_axis': semi_major_axis,
            'semi_minor_axis': semi_minor_axis,
            'longitude_of_prime_meridian': 0,
        }
        self._test(coord_system, expected)
Esempio n. 5
0
    def test_geo_cs(self):
        latitude_of_projection_origin = 0.0
        longitude_of_projection_origin = 2.0
        perspective_point_height = 2000000.0
        sweep_angle_axis = "x"
        false_easting = 100.0
        false_northing = 200.0

        semi_major_axis = 6377563.396
        semi_minor_axis = 6356256.909
        ellipsoid = GeogCS(semi_major_axis, semi_minor_axis)

        coord_system = Geostationary(
            latitude_of_projection_origin=latitude_of_projection_origin,
            longitude_of_projection_origin=longitude_of_projection_origin,
            perspective_point_height=perspective_point_height,
            sweep_angle_axis=sweep_angle_axis,
            false_easting=false_easting,
            false_northing=false_northing,
            ellipsoid=ellipsoid,
        )
        expected = {
            "grid_mapping_name": b"geostationary",
            "latitude_of_projection_origin": latitude_of_projection_origin,
            "longitude_of_projection_origin": longitude_of_projection_origin,
            "perspective_point_height": perspective_point_height,
            "sweep_angle_axis": sweep_angle_axis,
            "false_easting": false_easting,
            "false_northing": false_northing,
            "semi_major_axis": semi_major_axis,
            "semi_minor_axis": semi_minor_axis,
            "longitude_of_prime_meridian": 0,
        }
        self._test(coord_system, expected)
Esempio n. 6
0
 def test_optional_args_None(self):
     # Check expected defaults with optional args=None.
     crs = Geostationary(0,
                         0,
                         1000,
                         "y",
                         false_easting=None,
                         false_northing=None)
     self._check_crs_defaults(crs)
Esempio n. 7
0
 def test_set_optional_args(self):
     # Check that setting the optional (non-ellipse) args works.
     crs = Geostationary(0,
                         0,
                         1000,
                         "y",
                         false_easting=100,
                         false_northing=-200)
     self.assertEqualAndKind(crs.false_easting, 100.0)
     self.assertEqualAndKind(crs.false_northing, -200.0)
Esempio n. 8
0
 def test_non_zero_lat(self):
     with self.assertRaisesRegex(ValueError, "Non-zero latitude"):
         Geostationary(
             0.1,
             self.longitude_of_projection_origin,
             self.perspective_point_height,
             self.sweep_angle_axis,
             self.false_easting,
             self.false_northing,
             self.ellipsoid,
         )
Esempio n. 9
0
    def setUp(self):
        # Set everything to non-default values.
        self.latitude_of_projection_origin = 0  # For now, Cartopy needs =0.
        self.longitude_of_projection_origin = 123.0
        self.perspective_point_height = 9999.0
        self.sweep_angle_axis = "x"
        self.false_easting = 100.0
        self.false_northing = -200.0

        self.semi_major_axis = 4000.0
        self.semi_minor_axis = 3900.0
        self.ellipsoid = GeogCS(self.semi_major_axis, self.semi_minor_axis)
        self.globe = ccrs.Globe(
            semimajor_axis=self.semi_major_axis,
            semiminor_axis=self.semi_minor_axis,
            ellipse=None,
        )

        # Actual and expected coord system can be re-used for
        # Geostationary.test_crs_creation and test_projection_creation.
        self.expected = ccrs.Geostationary(
            central_longitude=self.longitude_of_projection_origin,
            satellite_height=self.perspective_point_height,
            false_easting=self.false_easting,
            false_northing=self.false_northing,
            globe=self.globe,
            sweep_axis=self.sweep_angle_axis,
        )
        self.geo_cs = Geostationary(
            self.latitude_of_projection_origin,
            self.longitude_of_projection_origin,
            self.perspective_point_height,
            self.sweep_angle_axis,
            self.false_easting,
            self.false_northing,
            self.ellipsoid,
        )
    def _test(self,
              inverse_flattening=False,
              replace_props=None,
              remove_props=None):
        """
        Generic test that can check vertical perspective validity with or
        without inverse flattening.
        """
        # Make a dictionary of the non-ellipsoid properties to be added to both a test
        # coord-system, and a test grid-mapping cf_var.
        non_ellipsoid_kwargs = {
            "latitude_of_projection_origin": 0.0,
            "longitude_of_projection_origin": 2.0,
            "perspective_point_height": 2000000.0,
            "sweep_angle_axis": "x",
            "false_easting": 100.0,
            "false_northing": 200.0,
        }

        # Make specified adjustments to the non-ellipsoid properties.
        if remove_props:
            for key in remove_props:
                non_ellipsoid_kwargs.pop(key, None)
        if replace_props:
            for key, value in replace_props.items():
                non_ellipsoid_kwargs[key] = value

        # Make a dictionary of ellipsoid properties, to be added to both a test
        # ellipsoid and the grid-mapping cf_var.
        ellipsoid_kwargs = {"semi_major_axis": 6377563.396}
        if inverse_flattening:
            ellipsoid_kwargs["inverse_flattening"] = 299.3249646
        else:
            ellipsoid_kwargs["semi_minor_axis"] = 6356256.909

        cf_grid_var_kwargs = non_ellipsoid_kwargs.copy()
        cf_grid_var_kwargs.update(ellipsoid_kwargs)
        cf_grid_var = mock.Mock(spec=[], **cf_grid_var_kwargs)
        cs = build_geostationary_coordinate_system(None, cf_grid_var)
        ellipsoid = iris.coord_systems.GeogCS(**ellipsoid_kwargs)
        expected = Geostationary(ellipsoid=ellipsoid, **non_ellipsoid_kwargs)
        self.assertEqual(cs, expected)
Esempio n. 11
0
    def _test(self, inverse_flattening=False):
        """
        Generic test that can check vertical perspective validity with or
        without inverse flattening.
        """
        cf_grid_var_kwargs = {
            'spec': [],
            'latitude_of_projection_origin': 0.0,
            'longitude_of_projection_origin': 2.0,
            'perspective_point_height': 2000000.0,
            'sweep_angle_axis': 'x',
            'false_easting': 100.0,
            'false_northing': 200.0,
            'semi_major_axis': 6377563.396
        }

        ellipsoid_kwargs = {'semi_major_axis': 6377563.396}
        if inverse_flattening:
            ellipsoid_kwargs['inverse_flattening'] = 299.3249646
        else:
            ellipsoid_kwargs['semi_minor_axis'] = 6356256.909
        cf_grid_var_kwargs.update(ellipsoid_kwargs)

        cf_grid_var = mock.Mock(**cf_grid_var_kwargs)
        ellipsoid = iris.coord_systems.GeogCS(**ellipsoid_kwargs)

        cs = build_geostationary_coordinate_system(None, cf_grid_var)
        expected = Geostationary(
            latitude_of_projection_origin=cf_grid_var.
            latitude_of_projection_origin,
            longitude_of_projection_origin=cf_grid_var.
            longitude_of_projection_origin,
            perspective_point_height=cf_grid_var.perspective_point_height,
            sweep_angle_axis=cf_grid_var.sweep_angle_axis,
            false_easting=cf_grid_var.false_easting,
            false_northing=cf_grid_var.false_northing,
            ellipsoid=ellipsoid)

        self.assertEqual(cs, expected)
Esempio n. 12
0
class Test(tests.IrisTest):
    def setUp(self):
        # Set everything to non-default values.
        self.latitude_of_projection_origin = 0  # For now, Cartopy needs =0.
        self.longitude_of_projection_origin = 123.0
        self.perspective_point_height = 9999.0
        self.sweep_angle_axis = "x"
        self.false_easting = 100.0
        self.false_northing = -200.0

        self.semi_major_axis = 4000.0
        self.semi_minor_axis = 3900.0
        self.ellipsoid = GeogCS(self.semi_major_axis, self.semi_minor_axis)
        self.globe = ccrs.Globe(
            semimajor_axis=self.semi_major_axis,
            semiminor_axis=self.semi_minor_axis,
            ellipse=None,
        )

        # Actual and expected coord system can be re-used for
        # Geostationary.test_crs_creation and test_projection_creation.
        self.expected = ccrs.Geostationary(
            central_longitude=self.longitude_of_projection_origin,
            satellite_height=self.perspective_point_height,
            false_easting=self.false_easting,
            false_northing=self.false_northing,
            globe=self.globe,
            sweep_axis=self.sweep_angle_axis,
        )
        self.geo_cs = Geostationary(
            self.latitude_of_projection_origin,
            self.longitude_of_projection_origin,
            self.perspective_point_height,
            self.sweep_angle_axis,
            self.false_easting,
            self.false_northing,
            self.ellipsoid,
        )

    def test_crs_creation(self):
        res = self.geo_cs.as_cartopy_crs()
        self.assertEqual(res, self.expected)

    def test_projection_creation(self):
        res = self.geo_cs.as_cartopy_projection()
        self.assertEqual(res, self.expected)

    def test_non_zero_lat(self):
        with self.assertRaisesRegex(ValueError, "Non-zero latitude"):
            Geostationary(
                0.1,
                self.longitude_of_projection_origin,
                self.perspective_point_height,
                self.sweep_angle_axis,
                self.false_easting,
                self.false_northing,
                self.ellipsoid,
            )

    def test_invalid_sweep(self):
        with self.assertRaisesRegex(ValueError, "Invalid sweep_angle_axis"):
            Geostationary(
                self.latitude_of_projection_origin,
                self.longitude_of_projection_origin,
                self.perspective_point_height,
                "a",
                self.false_easting,
                self.false_northing,
                self.ellipsoid,
            )

    def test_set_optional_args(self):
        # Check that setting the optional (non-ellipse) args works.
        crs = Geostationary(0,
                            0,
                            1000,
                            "y",
                            false_easting=100,
                            false_northing=-200)
        self.assertEqualAndKind(crs.false_easting, 100.0)
        self.assertEqualAndKind(crs.false_northing, -200.0)

    def _check_crs_defaults(self, crs):
        # Check for property defaults when no kwargs options were set.
        # NOTE: except ellipsoid, which is done elsewhere.
        self.assertEqualAndKind(crs.false_easting, 0.0)
        self.assertEqualAndKind(crs.false_northing, 0.0)

    def test_no_optional_args(self):
        # Check expected defaults with no optional args.
        crs = Geostationary(0, 0, 1000, "y")
        self._check_crs_defaults(crs)

    def test_optional_args_None(self):
        # Check expected defaults with optional args=None.
        crs = Geostationary(0,
                            0,
                            1000,
                            "y",
                            false_easting=None,
                            false_northing=None)
        self._check_crs_defaults(crs)
Esempio n. 13
0
 def test_no_optional_args(self):
     # Check expected defaults with no optional args.
     crs = Geostationary(0, 0, 1000, "y")
     self._check_crs_defaults(crs)