import rasterio as rio
import rioxarray as rx
from rasterio.session import AWSSession
from rasterio.warp import calculate_default_transform
Rasterio with NetCDF, VSIS3, and earthaccess
def configure_auth():
import boto3
import earthaccess
= earthaccess.login()
auth = auth.get_s3_credentials("PODAAC")
s3_credentials = boto3.Session(
session =s3_credentials["accessKeyId"],
aws_access_key_id=s3_credentials["secretAccessKey"],
aws_secret_access_key=s3_credentials["sessionToken"],
aws_session_token="us-west-2",
region_name
)= rio.Env(
rio_env
AWSSession(session),
)__enter__()
rio_env.return rio_env
def warp_resample():
= "podaac-ops-cumulus-protected"
bucket = "MUR-JPL-L4-GLOB-v4.1/20020601090000-JPL-L4_GHRSST-SSTfnd-MUR-GLOB-v02.0-fv04.1.nc"
input_uri = f"NETCDF:/vsis3/{bucket}/{input_uri}:analysed_sst"
src = "EPSG:3857"
dstSRS = "EPSG:4326"
srcSRS = height = 256
width = [
te -20037508.342789244,
-20037508.342789244,
20037508.342789244,
20037508.342789244,
]
= rx.open_rasterio(src) # , mask_and_scale=True)
da = da.rio.write_crs(srcSRS)
da = da.rio.clip_box(
da *te,
=dstSRS,
crs
)= calculate_default_transform(
dst_transform, w, h
srcSRS,
dstSRS,
da.rio.width,
da.rio.height,*da.rio.bounds(),
=width,
dst_width=height,
dst_height
)return da.rio.reproject(dstSRS, shape=(h, w), transform=dst_transform)
if __name__ == "__main__":
= configure_auth()
rio_env
warp_resample()__exit__() rio_env.