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)
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)
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_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)
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)
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)
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 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 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)
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)
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)
def test_no_optional_args(self): # Check expected defaults with no optional args. crs = Geostationary(0, 0, 1000, "y") self._check_crs_defaults(crs)