def test_projection_test(self): """Test identification of non-lat/lon projections.""" src_crs = ccrs.PlateCarree() trg_crs = ccrs.LambertConformal(central_longitude=50, central_latitude=10) trg_crs_iris = coord_systems.LambertConformal(central_lon=50, central_lat=10) lons = self.cube.coord('longitude').points lats = self.cube.coord('latitude').points xvals, yvals = [], [] for lon, lat in zip(lons, lats): x_trg, y_trg = trg_crs.transform_point(lon, lat, src_crs) xvals.append(x_trg) yvals.append(y_trg) new_x = AuxCoord(xvals, standard_name='projection_x_coordinate', units='m', coord_system=trg_crs_iris) new_y = AuxCoord(yvals, standard_name='projection_y_coordinate', units='m', coord_system=trg_crs_iris) cube = Cube(self.cube.data, long_name="air_temperature", dim_coords_and_dims=[(self.cube.coord('time'), 0)], aux_coords_and_dims=[(new_y, 1), (new_x, 2)], units="K") plugin = lat_lon_determine expected = trg_crs result = plugin(cube) self.assertEqual(expected, result)
def different_projection(self, method, ancillary_data, additional_data, expected, **kwargs): """Test that the plugin copes with non-lat/lon grids.""" trg_crs = None src_crs = ccrs.PlateCarree() trg_crs = ccrs.LambertConformal(central_longitude=50, central_latitude=10) trg_crs_iris = coord_systems.LambertConformal(central_lon=50, central_lat=10) lons = self.cube.coord('longitude').points lats = self.cube.coord('latitude').points x, y = [], [] for lon, lat in zip(lons, lats): x_trg, y_trg = trg_crs.transform_point(lon, lat, src_crs) x.append(x_trg) y.append(y_trg) new_x = AuxCoord(x, standard_name='projection_x_coordinate', units='m', coord_system=trg_crs_iris) new_y = AuxCoord(y, standard_name='projection_y_coordinate', units='m', coord_system=trg_crs_iris) cube = Cube(self.cube.data, long_name="air_temperature", dim_coords_and_dims=[(self.cube.coord('time'), 0)], aux_coords_and_dims=[(new_y, 1), (new_x, 2)], units="K") plugin = Plugin(method) with iris.FUTURE.context(cell_datetime_objects=True): cube = cube.extract(self.time_extract) result = plugin.process(cube, self.sites, self.neighbour_list, ancillary_data, additional_data, **kwargs) self.assertEqual(cube.coord_system(), trg_crs_iris) self.assertAlmostEqual(result.data, expected) self.assertEqual(result.coord(axis='y').name(), 'latitude') self.assertEqual(result.coord(axis='x').name(), 'longitude') self.assertAlmostEqual(result.coord(axis='y').points, 4.74) self.assertAlmostEqual(result.coord(axis='x').points, 9.47)