def create_basegrid(extent, cellsize): left, right, top, bottom = extent cellwidth, cellheight = cellsize width, height = right - left, top - bottom extent = [left, right, top, bottom] size = int(width / cellwidth), int(height / cellheight) projection = utils.projection(utils.RD) return gridtools.BaseGrid( extent=extent, size=size, projection=projection, )
def get(self): """ Return gdal dataset in rd projection. """ data = self.data() rang, azim, elev = data['polar'] rain = data['rain'] latlon = data['latlon'] anth = data['ant_alt'] theta = calc.calculate_theta( rang=rang, elev=np.radians(elev), anth=anth / 1000, ) points_aeqd = calc.calculate_cartesian( theta=theta, azim=np.radians(azim), ) projections = ( utils.projection_aeqd(*latlon), utils.projection(utils.RD), ) points_rd = utils.coordinate_transformer.transform( points=points_aeqd, projections=projections, ) # Interpolate grid_rain, grid_rang, grid_elev = self._interpolate( points=points_rd, values=( rain, rang * np.ones(rain.shape), elev * np.ones(rain.shape), ), grid=self.grid.get_grid(), ) location = utils.transform((0, 0), projections) ds_rd = self.grid.create_dataset(bands=3) ds_rd.SetMetadata(dict( source=self.signature.get_scanname(), timestamp=self.signature.get_timestamp(), station=self.signature.get_code(), location=json.dumps(location), antenna_height=json.dumps(anth), max_elevation=json.dumps(elev.max()), min_elevation=json.dumps(elev.min()), max_range=json.dumps(rang.max()), )) banddata = { BAND_RAIN: grid_rain, BAND_RANG: grid_rang, BAND_ELEV: grid_elev, } for i in range(1, ds_rd.RasterCount + 1): band = ds_rd.GetRasterBand(i) band.SetNoDataValue(banddata[i].fill_value) band.WriteArray(banddata[i].filled()) band.SetMetadata(BAND_META[i]) return ds_rd
def get(self): """ Return gdal dataset in rd projection. """ data = self.data() rang, azim, elev = data['polar'] rain = data['rain'] latlon = data['latlon'] anth = data['ant_alt'] theta = calc.calculate_theta( rang=rang, elev=np.radians(elev), anth=anth / 1000, ) points_aeqd = calc.calculate_cartesian( theta=theta, azim=np.radians(azim), ) projections = ( utils.projection_aeqd(*latlon), utils.projection(utils.RD), ) points_rd = utils.coordinate_transformer.transform( points=points_aeqd, projections=projections, ) # Interpolate grid_rain, grid_rang, grid_elev = self._interpolate( points=points_rd, values=( rain, rang * np.ones(rain.shape), elev * np.ones(rain.shape), ), grid=self.grid.get_grid(), ) location = utils.transform((0, 0), projections) ds_rd = self.grid.create_dataset(bands=3) ds_rd.SetMetadata( dict( source=self.signature.get_scanname(), timestamp=self.signature.get_timestamp(), station=self.signature.get_code(), location=json.dumps(location), antenna_height=json.dumps(anth), max_elevation=json.dumps(elev.max()), min_elevation=json.dumps(elev.min()), max_range=json.dumps(rang.max()), )) banddata = { BAND_RAIN: grid_rain, BAND_RANG: grid_rang, BAND_ELEV: grid_elev, } for i in range(1, ds_rd.RasterCount + 1): band = ds_rd.GetRasterBand(i) band.SetNoDataValue(banddata[i].fill_value) band.WriteArray(banddata[i].filled()) band.SetMetadata(BAND_META[i]) return ds_rd