Last active
November 20, 2019 08:08
-
-
Save hevgyrt/77154094289a7bdf250a19efa9d6716d to your computer and use it in GitHub Desktop.
Read Sentinel-2 L2A (bottom of atmosphere) product in NetCDF/CF by means of OPeNDAP from satellittdata.no
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"__This notebook shows how to read Sentinel-2 L2A products in NetCDF/CF by means of OPeNDAP.__\n", | |
"\n", | |
"Data is served through the Norwegian ground degment for satellite data (www.satellittdata.no)." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from netCDF4 import Dataset\n", | |
"\n", | |
"s2_url = \"http://nbstds.met.no/thredds/dodsC/NBS/test/S2B_MSIL2A_20191001T105849_N0213_R094_T32VLK_20191001T140823.nc\"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"ncin = Dataset(s2_url,'r')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"<class 'netCDF4._netCDF4.Dataset'>\n", | |
"root group (NETCDF3_CLASSIC data model, file format DAP2):\n", | |
" _NCProperties: version=2,netcdf=4.6.2,hdf5=1.10.5\n", | |
" title: Sentinel-2 Level-2A data\n", | |
" netcdf4_version_id: 4.6.2\n", | |
" file_creation_date: 2019-10-04T14:23:24Z\n", | |
" AOT_QUANTIFICATION_VALUE: 1000.0\n", | |
" AOT_QUANTIFICATION_VALUE_UNIT: none\n", | |
" AOT_RETRIEVAL_ACCURACY: 0.0\n", | |
" BOA_QUANTIFICATION_VALUE: 10000\n", | |
" BOA_QUANTIFICATION_VALUE_UNIT: none\n", | |
" CLOUD_COVERAGE_ASSESSMENT: 12.157538\n", | |
" CLOUD_SHADOW_PERCENTAGE: 4.118643\n", | |
" DARK_FEATURES_PERCENTAGE: 3.206031\n", | |
" DATATAKE_1_DATATAKE_SENSING_START: 2019-10-01T10:58:49.025Z\n", | |
" DATATAKE_1_DATATAKE_TYPE: INS-NOBS\n", | |
" DATATAKE_1_ID: GS2B_20191001T105849_013419_N02.13\n", | |
" DATATAKE_1_SENSING_ORBIT_DIRECTION: DESCENDING\n", | |
" DATATAKE_1_SPACECRAFT_NAME: Sentinel-2B\n", | |
" DEGRADED_ANC_DATA_PERCENTAGE: 0.0\n", | |
" DEGRADED_MSI_DATA_PERCENTAGE: 0\n", | |
" FOOTPRINT: POLYGON((5.558265107108251 58.5945886925831, 7.446490338604399 58.631278079015125, 7.488843962689502 57.64542268456104, 5.651925366744611 57.61010611826214, 5.558265107108251 58.5945886925831))\n", | |
" FORMAT_CORRECTNESS: PASSED\n", | |
" GENERAL_QUALITY: PASSED\n", | |
" GENERATION_TIME: 2019-10-01T14:08:23.000000Z\n", | |
" GEOMETRIC_QUALITY: PASSED\n", | |
" HIGH_PROBA_CLOUDS_PERCENTAGE: 4.753667\n", | |
" MEDIUM_PROBA_CLOUDS_PERCENTAGE: 4.436034\n", | |
" NODATA_PIXEL_PERCENTAGE: 0.0\n", | |
" NOT_VEGETATED_PERCENTAGE: 0.846361\n", | |
" PREVIEW_GEO_INFO: Not applicable\n", | |
" PREVIEW_IMAGE_URL: Not applicable\n", | |
" PROCESSING_BASELINE: 02.13\n", | |
" PROCESSING_LEVEL: Level-2A\n", | |
" PRODUCT_START_TIME: 2019-10-01T10:58:49.025Z\n", | |
" PRODUCT_STOP_TIME: 2019-10-01T10:58:49.025Z\n", | |
" PRODUCT_TYPE: S2MSI2A\n", | |
" PRODUCT_URI: S2B_MSIL2A_20191001T105849_N0213_R094_T32VLK_20191001T140823.SAFE\n", | |
" RADIATIVE_TRANSFER_ACCURACY: 0.0\n", | |
" RADIOMETRIC_QUALITY: PASSED\n", | |
" REFLECTANCE_CONVERSION_U: 0.996095409614864\n", | |
" SATURATED_DEFECTIVE_PIXEL_PERCENTAGE: 0.0\n", | |
" SENSOR_QUALITY: PASSED\n", | |
" SNOW_ICE_PERCENTAGE: 4.508333\n", | |
" SPECIAL_VALUE_NODATA: 0\n", | |
" SPECIAL_VALUE_SATURATED: 65535\n", | |
" THIN_CIRRUS_PERCENTAGE: 2.967837\n", | |
" UNCLASSIFIED_PERCENTAGE: 2.507394\n", | |
" VEGETATION_PERCENTAGE: 22.086824\n", | |
" WATER_PERCENTAGE: 50.568879\n", | |
" WATER_VAPOUR_RETRIEVAL_ACCURACY: 0.0\n", | |
" WVP_QUANTIFICATION_VALUE: 1000.0\n", | |
" WVP_QUANTIFICATION_VALUE_UNIT: cm\n", | |
" Conventions: CF-1.6\n", | |
" summary: Sentinel-2 Multi-Spectral Instrument Level-2A product.\n", | |
" keywords: [Earth Science, Atmosphere, Atmospheric radiation, Reflectance]\n", | |
" keywords_vocabulary: GCMD Science Keywords\n", | |
" institution: Norwegian Meteorological Institute\n", | |
" history: 2019-10-04T14:23:24Z. Converted from SAFE to NetCDF by NBS team.\n", | |
" source: surface observation\n", | |
" orbitNumber: 013419\n", | |
" relativeOrbitNumber: 94\n", | |
" DODS.strlen: 10694\n", | |
" DODS.dimName: dimension_SAFE_structure\n", | |
" dimensions(sizes): dimension_rgb(3), maxStrlen64(64), time(1), x(10980), y(10980)\n", | |
" variables(dimensions): int32 \u001b[4mtime\u001b[0m(time), int32 \u001b[4mx\u001b[0m(x), int32 \u001b[4my\u001b[0m(y), int8 \u001b[4mTCI\u001b[0m(time,dimension_rgb,y,x), int32 \u001b[4mUTM_projection\u001b[0m(), |S1 \u001b[4mS2_Level_2A_Product_Metadata\u001b[0m(maxStrlen64), |S1 \u001b[4mINSPIRE_Metadata\u001b[0m(maxStrlen64), |S1 \u001b[4mS2_Level_2A_Tile1_Metadata\u001b[0m(maxStrlen64), |S1 \u001b[4mFormat_OLQC_Report_Tile1_InformationData\u001b[0m(maxStrlen64), |S1 \u001b[4mGeneral_OLQC_Report_Tile1_InformationData\u001b[0m(maxStrlen64), |S1 \u001b[4mGeometric_OLQC_Report_Tile1_InformationData\u001b[0m(maxStrlen64), |S1 \u001b[4mRadiometric_OLQC_Report_Tile1_InformationData\u001b[0m(maxStrlen64), |S1 \u001b[4mSensor_OLQC_Report_Tile1_InformationData\u001b[0m(maxStrlen64), |S1 \u001b[4mS2_Level_2A_Datastrip1_Metadata\u001b[0m(maxStrlen64), |S1 \u001b[4mFormat_OLQC_Report_Datastrip1_InformationData\u001b[0m(maxStrlen64), |S1 \u001b[4mGeneral_OLQC_Report_Datastrip1_InformationData\u001b[0m(maxStrlen64), |S1 \u001b[4mGeometric_OLQC_Report_Datastrip1_InformationData\u001b[0m(maxStrlen64), |S1 \u001b[4mRadiometric_OLQC_Report_Datastrip1_InformationData\u001b[0m(maxStrlen64), |S1 \u001b[4mSensor_OLQC_Report_Datastrip1_InformationData\u001b[0m(maxStrlen64), |S1 \u001b[4mSAFE_structure\u001b[0m(maxStrlen64), float32 \u001b[4mlat\u001b[0m(y,x), float32 \u001b[4mlon\u001b[0m(y,x), int16 \u001b[4mB4\u001b[0m(time,y,x), int16 \u001b[4mB3\u001b[0m(time,y,x), int16 \u001b[4mB2\u001b[0m(time,y,x), int16 \u001b[4mB8\u001b[0m(time,y,x), int16 \u001b[4mB5\u001b[0m(time,y,x), int16 \u001b[4mB6\u001b[0m(time,y,x), int16 \u001b[4mB7\u001b[0m(time,y,x), int16 \u001b[4mB8A\u001b[0m(time,y,x), int16 \u001b[4mB11\u001b[0m(time,y,x), int16 \u001b[4mB12\u001b[0m(time,y,x), int16 \u001b[4mB1\u001b[0m(time,y,x), int16 \u001b[4mB9\u001b[0m(time,y,x), int8 \u001b[4mClouds\u001b[0m(time,y,x), int8 \u001b[4mMSK_DEFECT_B12\u001b[0m(time,y,x), int8 \u001b[4mMSK_DETFOO_B01\u001b[0m(time,y,x), int8 \u001b[4mMSK_DETFOO_B02\u001b[0m(time,y,x), int8 \u001b[4mMSK_DETFOO_B03\u001b[0m(time,y,x), int8 \u001b[4mMSK_DETFOO_B04\u001b[0m(time,y,x), int8 \u001b[4mMSK_DETFOO_B05\u001b[0m(time,y,x), int8 \u001b[4mMSK_DETFOO_B06\u001b[0m(time,y,x), int8 \u001b[4mMSK_DETFOO_B07\u001b[0m(time,y,x), int8 \u001b[4mMSK_DETFOO_B08\u001b[0m(time,y,x), int8 \u001b[4mMSK_DETFOO_B09\u001b[0m(time,y,x), int8 \u001b[4mMSK_DETFOO_B10\u001b[0m(time,y,x), int8 \u001b[4mMSK_DETFOO_B11\u001b[0m(time,y,x), int8 \u001b[4mMSK_DETFOO_B12\u001b[0m(time,y,x), int8 \u001b[4mMSK_DETFOO_B8A\u001b[0m(time,y,x), int8 \u001b[4mMSK_NODATA_B01\u001b[0m(time,y,x), int8 \u001b[4mMSK_NODATA_B04\u001b[0m(time,y,x), int8 \u001b[4mMSK_NODATA_B05\u001b[0m(time,y,x), int8 \u001b[4mMSK_NODATA_B07\u001b[0m(time,y,x), int8 \u001b[4mMSK_NODATA_B08\u001b[0m(time,y,x), int8 \u001b[4mMSK_NODATA_B09\u001b[0m(time,y,x), int8 \u001b[4mMSK_NODATA_B10\u001b[0m(time,y,x), int8 \u001b[4mMSK_CLDPRB\u001b[0m(time,y,x), int8 \u001b[4mMSK_SNWPRB\u001b[0m(time,y,x), int16 \u001b[4mAOT\u001b[0m(time,y,x), int16 \u001b[4mWVP\u001b[0m(time,y,x), int8 \u001b[4mSCL\u001b[0m(time,y,x), float32 \u001b[4msun_zenith\u001b[0m(time,y,x), float32 \u001b[4msun_azimuth\u001b[0m(time,y,x), float32 \u001b[4mview_zenith_B1\u001b[0m(time,y,x), float32 \u001b[4mview_azimuth_B1\u001b[0m(time,y,x), float32 \u001b[4mview_zenith_B2\u001b[0m(time,y,x), float32 \u001b[4mview_azimuth_B2\u001b[0m(time,y,x), float32 \u001b[4mview_zenith_B3\u001b[0m(time,y,x), float32 \u001b[4mview_azimuth_B3\u001b[0m(time,y,x), float32 \u001b[4mview_zenith_B4\u001b[0m(time,y,x), float32 \u001b[4mview_azimuth_B4\u001b[0m(time,y,x), float32 \u001b[4mview_zenith_B5\u001b[0m(time,y,x), float32 \u001b[4mview_azimuth_B5\u001b[0m(time,y,x), float32 \u001b[4mview_zenith_B6\u001b[0m(time,y,x), float32 \u001b[4mview_azimuth_B6\u001b[0m(time,y,x), float32 \u001b[4mview_zenith_B7\u001b[0m(time,y,x), float32 \u001b[4mview_azimuth_B7\u001b[0m(time,y,x), float32 \u001b[4mview_zenith_B8\u001b[0m(time,y,x), float32 \u001b[4mview_azimuth_B8\u001b[0m(time,y,x), float32 \u001b[4mview_zenith_B8A\u001b[0m(time,y,x), float32 \u001b[4mview_azimuth_B8A\u001b[0m(time,y,x), float32 \u001b[4mview_zenith_B9\u001b[0m(time,y,x), float32 \u001b[4mview_azimuth_B9\u001b[0m(time,y,x), float32 \u001b[4mview_zenith_B10\u001b[0m(time,y,x), float32 \u001b[4mview_azimuth_B10\u001b[0m(time,y,x), float32 \u001b[4mview_zenith_B11\u001b[0m(time,y,x), float32 \u001b[4mview_azimuth_B11\u001b[0m(time,y,x), float32 \u001b[4mview_zenith_B12\u001b[0m(time,y,x), float32 \u001b[4mview_azimuth_B12\u001b[0m(time,y,x)\n", | |
" groups: \n", | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"# Printing the content of the dataset\n", | |
"print(ncin)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"<class 'netCDF4._netCDF4.Variable'>\n", | |
"int16 B2(time, y, x)\n", | |
" _FillValue: 0\n", | |
" units: 1\n", | |
" coordinates: lat lon\n", | |
" grid_mapping: UTM_projection\n", | |
" standard_name: toa_bidirectional_reflectance\n", | |
" long_name: Reflectance in band B2\n", | |
" bandwidth: 65\n", | |
" bandwidth_unit: nm\n", | |
" wavelength: 490\n", | |
" wavelength_unit: nm\n", | |
" solar_irradiance: 1959.77\n", | |
" solar_irradiance_unit: W/m2/um\n", | |
" _Unsigned: true\n", | |
" _ChunkSizes: [ 1 32 32]\n", | |
"unlimited dimensions: \n", | |
"current shape = (1, 10980, 10980)\n", | |
"filling off\n", | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"# print metadata for reflectance band B2\n", | |
"print(ncin['B2'])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[[6288 6328 6288 ... 12176 12224 12112]\n", | |
" [6280 6284 6288 ... 12256 12184 12048]\n", | |
" [6232 6172 6216 ... 12184 12128 12080]\n", | |
" ...\n", | |
" [11888 11864 11848 ... 8912 8744 8800]\n", | |
" [11584 11544 11424 ... 8832 8696 8560]\n", | |
" [11280 11136 10896 ... 8880 8688 8544]]\n" | |
] | |
} | |
], | |
"source": [ | |
"# print a subset of the data\n", | |
"print(ncin['B2'][0,100:300,200:400]) #time=0, y=100:300, x=200:400" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment