goergen95 / dariusgoergen

My personal website
https://www.dariusgoergen.com/
0 stars 0 forks source link

contents/blog/2020-06-14-nat2tif/ #9

Open utterances-bot opened 1 year ago

utterances-bot commented 1 year ago

Darius A. Görgen - Translating EUMETSAT’s .nat files to GTiff

Python code to translate EUMETSAT’s .nat datasets to GTiffs.

https://www.dariusgoergen.com/contents/blog/2020-06-14-nat2tif/

ManuelSalvoldi commented 1 year ago

Hi Darius, thank you for this useful information! Two questions: 1) I loaded the dataset VIS006 with calibration="reflectance", and I noticed that the values are very big (in my case, from 6 to 85). I expected to have something between 0 and 1. I need reflectance to compute some vegetation indices. Do you know if there is a scale factor?

2) Do you know if there are "surface reflectance products" for MSG? If not, how can we perform atmospheric correction to SEVIRI-MSG15 images? Thank and ciao Manuel

goergen95 commented 1 year ago

Hi Manuel, thanks for your interest!

ManuelSalvoldi commented 1 year ago

thank you Darius! here is the link with the NAT and the output Geotiff file: https://we.tl/t-ufnlY6XlOj

I selected the followings: calibration = "reflectance" dataset = "VIS006" llx = -18. # lower left x coordinate in degrees lly = 10. # lower left y coordinate in degrees urx = 40. # upper right x coordinate in degrees ury = 20. # upper right y coordinate in degrees resolution = 0.03 # target resolution in degrees (3000 meters)

Concerning 2) I just wondering if we can monitor land and to compute some soil/vegetation indices as usually done for LEO images (e.g. Sentinel-2).

ciao Manuel

goergen95 commented 1 year ago

I believe satpy converts to reflectance values in the 0 to 100 range. That means that the reflectance in your crop is between 6 and 85%. You can of course use xarray syntax to convert to the 0/1 range:

from satpy import Scene
import numpy as np

file = "MSG2-SEVI-MSG15-0100-NA-20200115111244.253000000Z-NA.nat"
reader = "seviri_l1b_native"
scn = Scene(filenames = {reader:[file]})
scn.load(["VIS006"], calibration="reflectance")
scn["VIS006"] = scn["VIS006"] / 100
np.nanmax(scn["VIS006"].values)
ManuelSalvoldi commented 1 year ago

thank you for the clarification