earth-observation-for-journ.../True-Color Image/sentinel_helpers.py

32 lines
No EOL
1.1 KiB
Python

import zipfile
import glob
from Pathlib import Path
def band_paths(p, bands, resolution=None):
'''
Given a zip file or folder at `p`, returns the paths inside p to the raster files containing
information for the given bands. Because some bands are available in more than one
resolution, this can be filtered by prodiding a third parameter (e.g. resolution='10m').
The returned paths are formatted in the zip scheme as per Apache Commons VFS if necessary
and can be directly opened by rasterio.
'''
if p.endswith('.zip'):
with zipfile.ZipFile(p) as f:
files = f.namelist()
rasters = [f for f in files if f.endswith('.jp2')]
else:
rasters = glob.glob(Path(p) / '**/*.jp2'
rasters = [r for r in rasters for b in bands if b in r]
if resolution:
rasters = [r for r in rasters if resolution in r]
rasters = ['zip+file://' + p + '!/' + r for r in rasters]
return rasters
def rgb_paths(zip_file, resolution='10m'):
return band_paths(zip_file, ['B02', 'B03', 'B04'], resolution)