Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import rasterio
- from rasterio.transform import from_bounds as transform_from_bounds
- from rasterio.warp import reproject, transform_bounds
- from rasterio.windows import transform as window_transform
- with rasterio.open(source_path) as src:
- tile_bounds_src_crs = transform_bounds(dst_srs, src.crs, *tile_bounds)
- tile_window = src.window(*tile_bounds_src_crs)
- tile_data = src.read(window=tile_window)
- # translate the values into the desired range
- if scaled_min_max_pixel_values:
- for i, scaled_vals in enumerate(scaled_min_max_pixel_values):
- try:
- tile_data[i] = numpy.interp(tile_data[i],
- [tile_data[i].min(), tile_data[i].max()],
- scaled_vals)
- except IndexError:
- self.logger.warn('Too many scaled_min_max_values passed')
- kwds = {
- 'transform': transform_from_bounds(*tile_bounds, tile_size, tile_size),
- 'driver': 'PNG',
- 'dtype': 'uint8',
- 'height': tile_size,
- 'width': tile_size,
- 'crs': dst_srs,
- 'count': src.count + 1
- }
- # create the output directory
- os.makedirs(os.path.dirname(output_path), exist_ok=True)
- with rasterio.open(output_path, 'w', **kwds) as dst:
- for i in range(1, src.count + 1):
- reproject_args = {
- 'source': tile_data[i-1],
- 'src_crs': src.crs,
- 'src_transform': window_transform(tile_window, src.transform),
- 'destination': rasterio.band(dst, i),
- 'resampling': self._get_resample_alg_value(resample_alg),
- 'dst_alpha': src.count + i
- }
- # can only specify nan nodata value on float32 and float64 input bands
- if src.dtypes[i-1].startswith('float'):
- reproject_args['src_nodata'] = numpy.nan
- reproject(**reproject_args)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement