Australian Geoscience Datacube

Feature Summary Examples

The Australian Geoscience Datacube provides an integrated gridded data analysis environment for decades of analysis ready earth observation satellite and related data from multiple satellite and other acquisition systems.

For instructions on using the Datacube on NCI, see: http://agdc-v2.readthedocs.io/en/develop/nci_usage.html

For instructions on setting up your own instance, see: http://agdc-v2.readthedocs.io/en/develop/install.html

This notebook touches briefly on some the implimented features of the Datacube module, and is only intended to deomstrat functionality rather than be a tutorial.

In [1]:
%matplotlib inline
import datacube

If you have set up your config correctly, or are using the module on NCI, you should be able to make Datacube object that can connects to the configured datacube system.

In [2]:
dc = datacube.Datacube(app='dc-example')
dc
Out[2]:
Datacube<index=Index<db=PostgresDb<engine=Engine(postgresql://[email protected]:6432/datacube)>>>

Datacube products and measurements

The Datacube provides pandas.DataFrame representations of the available products and measurements:

In [3]:
dc.list_products()
Out[3]:
name description instrument product_type gqa_final_gcp_count gqa_mean_xy gqa_stddev_xy format lat gqa_error_message ... gqa_iterative_mean_xy gqa_abs_xy gqa lon sat_row gqa_abs_iterative_mean_xy crs resolution tile_size spatial_dimensions
id
36 bom_rainfall_grids Interpolated Rain Gauge Precipitation 1-Day Au... rain gauge rainfall NaN NaN NaN NETCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:4326 [-0.05, 0.05] None (latitude, longitude)
32 dsm1sv10 DSM 1sec Version 1.0 SIR DEM NaN NaN NaN GeoTIFF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:4326 [-0.00027777777778, 0.00027777777778] None (latitude, longitude)
53 gamma_ray The 2015 radiometric or gamma-ray grid of Aust... gamma_ray spectrometer gamma_ray NaN NaN NaN NETCDF NaN NaN ... NaN NaN NaN NaN NaN NaN GEOGCS["GEOCENTRIC DATUM of AUSTRALIA",DATUM["... [-0.001, 0.001] None (latitude, longitude)
63 high_tide_comp_20p High Tide 20 percentage composites for entire ... None tidal_composite NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] None (y, x)
64 high_tide_comp_count High Tide 20 percentage pixel count None tidal_composite NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] None (y, x)
67 item_v2 Intertidal Extents Model None ITEM NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] None (y, x)
68 item_v2_conf Average ndwi Standard Deviation None ITEM NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] None (y, x)
65 low_tide_comp_20p Low Tide 20 percentage composites for entire c... None tidal_composite NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] None (y, x)
66 low_tide_comp_count Low Tide 20 percentage pixel count None tidal_composite NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] None (y, x)
69 ls5_fc_albers Landsat 5 Fractional Cover 25 metre, 100km til... TM fractional_cover NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
2 ls5_level1_scene Landsat 5 Level 1 At-sensor Radiance 25 metre TM level1 NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 ls5_nbar_albers Landsat 5 Surface Reflectance NBAR 25 metre, 1... TM nbar NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
3 ls5_nbar_scene Landsat 5 NBAR 25 metre TM nbar NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
26 ls5_nbart_albers Landsat 5 Surface Reflectance NBART 25 metre, ... TM nbart NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
4 ls5_nbart_scene Landsat 5 NBART 25 metre TM nbart NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
23 ls5_pq_albers Landsat 5 Pixel Quality 25 metre, 100km tile, ... TM pqa NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
75 ls5_pq_legacy_scene Landsat 5 PQ Legacy 25 metre TM legacy_pqa NaN NaN NaN GeoTIFF NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 ls5_pq_scene Landsat 5 PQ 25 metre TM pqa NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 ls5_satellite_telemetry_data Landsat 5 Satellite Telemetry Data TM satellite_telemetry_data NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
70 ls7_fc_albers Landsat 7 Fractional Cover 25 metre, 100km til... ETM fractional_cover NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
72 ls7_fc_albers_staging Landsat 7 Fractional Cover 25 metre, 100km til... ETM fractional_cover NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
9 ls7_level1_scene Landsat 7 Level 1 At-sensor Radiance 25 metre ETM level1 NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
21 ls7_nbar_albers Landsat 7 Surface Reflectance NBAR 25 metre, 1... ETM nbar NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
10 ls7_nbar_scene Landsat 7 NBAR 25 metre ETM nbar NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
29 ls7_nbart_albers Landsat 7 Surface Reflectance NBART 25 metre, ... ETM nbart NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
11 ls7_nbart_scene Landsat 7 NBART 25 metre ETM nbart NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
22 ls7_pq_albers Landsat 7 Pixel Quality 25 metre, 100km tile, ... ETM pqa NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
76 ls7_pq_legacy_scene Landsat 7 PQ Legacy 25 metre ETM legacy_pqa NaN NaN NaN GeoTIFF NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
12 ls7_pq_scene Landsat 7 PQ 25 metre ETM pqa NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 ls7_satellite_telemetry_data Landsat 7 Satellite Telemetry Data ETM satellite_telemetry_data NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
71 ls8_fc_albers Landsat 8 Fractional Cover 25 metre, 100km til... OLI_TIRS fractional_cover NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
40 ls8_level1_oli_scene Landsat 8 OLI Level 1 At-sensor Radiance 25 metre OLI level1 NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 ls8_level1_scene Landsat 8 Level 1 OLI-TIRS At-sensor Radiance ... OLI_TIRS level1 NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
19 ls8_nbar_albers Landsat 8 Surface Reflectance NBAR 25 metre, 1... OLI_TIRS nbar NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
60 ls8_nbar_oli_albers Landsat 8 Surface Reflectance NBAR 25 metre, 1... OLI nbar NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
57 ls8_nbar_oli_scene Landsat 8 OLI NBAR 25 metre OLI nbar NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
15 ls8_nbar_scene Landsat 8 NBAR 25 metre OLI_TIRS nbar NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
28 ls8_nbart_albers Landsat 8 Surface Relfectance NBART 25 metre, ... OLI_TIRS nbart NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
61 ls8_nbart_oli_albers Landsat 8 Surface Relfectance NBART 25 metre, ... OLI nbart NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
58 ls8_nbart_oli_scene Landsat 8 OLI NBART 25 metre OLI nbart NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
16 ls8_nbart_scene Landsat 8 NBART 25 metre OLI_TIRS nbart NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
20 ls8_pq_albers Landsat 8 Pixel Quality 25 metre, 100km tile, ... OLI_TIRS pqa NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
74 ls8_pq_legacy_oli_scene Landsat 8 OLI PQ Legacy 25 metre OLI legacy_pqa NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
73 ls8_pq_legacy_scene Landsat 8 PQ Legacy 25 metre OLI_TIRS legacy_pqa NaN NaN NaN GeoTIFF NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
59 ls8_pq_oli_scene Landsat 8 OLI PQ 25 metre OLI pqa NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
17 ls8_pq_scene Landsat 8 PQ 25 metre OLI_TIRS pqa NaN NaN NaN GeoTiff NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
13 ls8_satellite_telemetry_data Landsat 8 Satellite Telemetry Data None satellite_telemetry_data NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
56 srtm_dem1sv1_0 DEM 1sec Version 1.0 SIR DEM NaN NaN NaN AIG NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:4326 [-0.00027777777778, 0.00027777777778] None (latitude, longitude)
77 wofs_albers Historic Flood Mapping Water Observations from... None wofs NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)
62 wofs_modified_albers2_archived Historic Flood Mapping Water Observations from... None wofs NaN NaN NaN NetCDF NaN NaN ... NaN NaN NaN NaN NaN NaN EPSG:3577 [-25, 25] [100000.0, 100000.0] (y, x)

50 rows × 29 columns

Datacube Measurements

The list of measurements stored in the datacube can also be listed.

Measurements are also known as bands in the imagery domain, and data variables when stored in NetCDF files or when working with xarray.Dataset objects.

In [4]:
dc.list_measurements()
Out[4]:
aliases dtype flags_definition name nodata spectral_definition units
product measurement
bom_rainfall_grids rainfall NaN float32 NaN rainfall -999 NaN mm
dsm1sv10 elevation NaN float32 NaN elevation NaN NaN metre
gamma_ray rad_air_dose_rate_unfiltered NaN float32 NaN rad_air_dose_rate_unfiltered -99999 NaN nG/h
rad_k_equiv_conc_unfiltered NaN float32 NaN rad_k_equiv_conc_unfiltered -99999 NaN %K
rad_u_equiv_conc_unfiltered NaN float32 NaN rad_u_equiv_conc_unfiltered -99999 NaN ppm
rad_th_equiv_conc_unfiltered NaN float32 NaN rad_th_equiv_conc_unfiltered -99999 NaN ppm
rad_air_dose_rate_filtered NaN float32 NaN rad_air_dose_rate_filtered -99999 NaN nG/h
rad_k_equiv_conc_filtered NaN float32 NaN rad_k_equiv_conc_filtered -99999 NaN %K
rad_u_equiv_conc_filtered NaN float32 NaN rad_u_equiv_conc_filtered -99999 NaN ppm
rad_th_equiv_conc_filtered NaN float32 NaN rad_th_equiv_conc_filtered -99999 NaN ppm
rad_ratio_tk NaN float32 NaN rad_ratio_tk -99999 NaN ppm / %
rad_ratio_u2t NaN float32 NaN rad_ratio_u2t -99999 NaN ppm^2 / ppm
rad_ratio_uk NaN float32 NaN rad_ratio_uk -99999 NaN ppm / %
rad_ratio_ut NaN float32 NaN rad_ratio_ut -99999 NaN ppm / ppm
high_tide_comp_20p blue NaN float32 NaN blue -999 NaN 1
green NaN float32 NaN green -999 NaN 1
red NaN float32 NaN red -999 NaN 1
nir NaN float32 NaN nir -999 NaN 1
swir1 NaN float32 NaN swir1 -999 NaN 1
swir2 NaN float32 NaN swir2 -999 NaN 1
high_tide_comp_count count_observations NaN int16 NaN count_observations 0 NaN 1
item_v2 relative NaN int16 NaN relative 0 NaN 0.1
item_v2_conf stddev NaN float32 NaN stddev -6666 NaN 1
low_tide_comp_20p blue NaN float32 NaN blue -999 NaN 1
green NaN float32 NaN green -999 NaN 1
red NaN float32 NaN red -999 NaN 1
nir NaN float32 NaN nir -999 NaN 1
swir1 NaN float32 NaN swir1 -999 NaN 1
swir2 NaN float32 NaN swir2 -999 NaN 1
low_tide_comp_count count_observations NaN int16 NaN count_observations 0 NaN 1
... ... ... ... ... ... ... ... ...
ls8_nbart_oli_albers blue [band_2, blue] int16 NaN blue -999 {'response': [1e-05, 6.1e-05, 0.000117, 0.0002... 1
green [band_3, green] int16 NaN green -999 {'response': [-4.6e-05, 1.6e-05, 0.00011, 0.00... 1
red [band_4, red] int16 NaN red -999 {'response': [-0.000342, 0.00027, 0.000895, 0.... 1
nir [band_5, nir] int16 NaN nir -999 {'response': [-3.4e-05, 1.1e-05, 5e-05, 0.0001... 1
swir1 [band_6, swir1] int16 NaN swir1 -999 {'response': [-1.6e-05, 6.7e-05, 0.000151, 0.0... 1
swir2 [band_7, swir2] int16 NaN swir2 -999 {'response': [-1e-05, 3.7e-05, 8.3e-05, 0.0001... 1
ls8_nbart_oli_scene 1 [band_1, coastal_aerosol] int16 NaN 1 -999 {'response': [7.3e-05, 0.000609, 0.001628, 0.0... 1
2 [band_2, blue] int16 NaN 2 -999 {'response': [1e-05, 6.1e-05, 0.000117, 0.0002... 1
3 [band_3, green] int16 NaN 3 -999 {'response': [-4.6e-05, 1.6e-05, 0.00011, 0.00... 1
4 [band_4, red] int16 NaN 4 -999 {'response': [-0.000342, 0.00027, 0.000895, 0.... 1
5 [band_5, nir] int16 NaN 5 -999 {'response': [-3.4e-05, 1.1e-05, 5e-05, 0.0001... 1
6 [band_6, swir1] int16 NaN 6 -999 {'response': [-1.6e-05, 6.7e-05, 0.000151, 0.0... 1
7 [band_7, swir2] int16 NaN 7 -999 {'response': [-1e-05, 3.7e-05, 8.3e-05, 0.0001... 1
ls8_nbart_scene 1 [band_1, coastal_aerosol] int16 NaN 1 -999 {'response': [7.3e-05, 0.000609, 0.001628, 0.0... 1
2 [band_2, blue] int16 NaN 2 -999 {'response': [1e-05, 6.1e-05, 0.000117, 0.0002... 1
3 [band_3, green] int16 NaN 3 -999 {'response': [-4.6e-05, 1.6e-05, 0.00011, 0.00... 1
4 [band_4, red] int16 NaN 4 -999 {'response': [-0.000342, 0.00027, 0.000895, 0.... 1
5 [band_5, nir] int16 NaN 5 -999 {'response': [-3.4e-05, 1.1e-05, 5e-05, 0.0001... 1
6 [band_6, swir1] int16 NaN 6 -999 {'response': [-1.6e-05, 6.7e-05, 0.000151, 0.0... 1
7 [band_7, swir2] int16 NaN 7 -999 {'response': [-1e-05, 3.7e-05, 8.3e-05, 0.0001... 1
ls8_pq_albers pixelquality [qa_flags, quality] int16 {'land_sea': {'bits': 9, 'values': {'0': 'sea'... pixelquality 0 NaN 1
ls8_pq_legacy_oli_scene pqa [qa_flags, quality] int16 {'land_sea': {'bits': 9, 'values': {'0': 'sea'... pqa 0 NaN 1
ls8_pq_legacy_scene pqa [qa_flags, quality] int16 {'land_sea': {'bits': 9, 'values': {'0': 'sea'... pqa 0 NaN 1
ls8_pq_oli_scene pqa [qa_flags, quality] int16 {'land_sea': {'bits': 9, 'values': {'0': 'sea'... pqa 0 NaN 1
ls8_pq_scene pqa [qa_flags, quality] int16 {'land_sea': {'bits': 9, 'values': {'0': 'sea'... pqa 0 NaN 1
srtm_dem1sv1_0 dem NaN float32 NaN dem -340282350000000000000000000000000000000 NaN metre
dem_s NaN float32 NaN dem_s -340282350000000000000000000000000000000 NaN metre
dem_h NaN float32 NaN dem_h -340282350000000000000000000000000000000 NaN metre
wofs_albers water NaN int16 {'dry': {'bits': [7, 6, 5, 4, 3, 1, 0], 'value... water 1 NaN 1
wofs_modified_albers2_archived water NaN uint8 {'dry': {'bits': [7, 6, 5, 4, 3, 1, 0], 'value... water 1 NaN 1

166 rows × 7 columns

Retrieving data

In [5]:
nbar = dc.load(product='ls5_nbar_albers', x=(149.25, 149.35), y=(-35.25, -35.35))

The returned data is an xarray.Dataset object, which is a labelled n-dimensional array wrapping a numpy array.

We can investigate the data to see the variables (measurement bands) and dimensions that were returned:

In [6]:
nbar
Out[6]:
<xarray.Dataset>
Dimensions:  (time: 715, x: 421, y: 490)
Coordinates:
  * time     (time) datetime64[ns] 1987-05-29T23:14:29.500000 ...
  * y        (y) float64 -3.956e+06 -3.956e+06 -3.956e+06 -3.956e+06 ...
  * x        (x) float64 1.56e+06 1.56e+06 1.56e+06 1.56e+06 1.56e+06 ...
Data variables:
    blue     (time, y, x) int16 495 495 495 585 676 585 449 358 266 266 358 ...
    green    (time, y, x) int16 885 980 885 980 980 885 885 789 692 596 693 ...
    red      (time, y, x) int16 914 1080 914 914 997 997 914 747 747 747 747 ...
    nir      (time, y, x) int16 2587 2317 2046 2317 2407 2226 2407 2226 2226 ...
    swir1    (time, y, x) int16 2567 2567 2502 2502 2308 2114 2114 1985 1921 ...
    swir2    (time, y, x) int16 1655 1556 1556 1556 1655 1556 1357 1059 1059 ...
Attributes:
    crs:      EPSG:3577

We can look at the data by name directly, or through the data_vars dictionary:

In [7]:
nbar.data_vars
Out[7]:
Data variables:
    blue     (time, y, x) int16 495 495 495 585 676 585 449 358 266 266 358 ...
    green    (time, y, x) int16 885 980 885 980 980 885 885 789 692 596 693 ...
    red      (time, y, x) int16 914 1080 914 914 997 997 914 747 747 747 747 ...
    nir      (time, y, x) int16 2587 2317 2046 2317 2407 2226 2407 2226 2226 ...
    swir1    (time, y, x) int16 2567 2567 2502 2502 2308 2114 2114 1985 1921 ...
    swir2    (time, y, x) int16 1655 1556 1556 1556 1655 1556 1357 1059 1059 ...
In [8]:
nbar.green
Out[8]:
<xarray.DataArray 'green' (time: 715, y: 490, x: 421)>
array([[[ 885,  980, ..., 2948, 2948],
        [ 885,  980, ..., 3040, 2948],
        ...,
        [-999, -999, ...,  699,  699],
        [-999, -999, ...,  506,  506]],

       [[ 928, 1024, ..., 3001, 3001],
        [ 928, 1025, ..., 3093, 3001],
        ...,
        [ 352,  254, ...,  743,  743],
        [ 450,  450, ...,  549,  549]],

       ...,

       [[1015, 1078, ...,  925,  862],
        [1046, 1078, ...,  957,  925],
        ...,
        [2244, 2244, ..., 1469, 1469],
        [2276, 2244, ..., 1501, 1469]],

       [[ 721,  789, ..., -999, -999],
        [ 721,  789, ..., -999, -999],
        ...,
        [ 555,  487, ..., -999, -999],
        [ 656,  521, ..., -999, -999]]], dtype=int16)
Coordinates:
  * time     (time) datetime64[ns] 1987-05-29T23:14:29.500000 ...
  * y        (y) float64 -3.956e+06 -3.956e+06 -3.956e+06 -3.956e+06 ...
  * x        (x) float64 1.56e+06 1.56e+06 1.56e+06 1.56e+06 1.56e+06 ...
Attributes:
    nodata:               -999
    units:                1
    crs:                  EPSG:3577
    spectral_definition:  {'response': [0.0, 0.0007, 0.0021, 0.0036, 0.0032, ...

Plotting data

We can select the data at a particular time and see what is there. We can use pandas-style labels to select a time period, inclusive of the end label:

In [9]:
autumn = nbar.green.loc['1991-3':'1991-5']
autumn.shape
Out[9]:
(9, 490, 421)
In [10]:
autumn.plot(col='time', col_wrap=3)
Out[10]:
<xarray.plot.facetgrid.FacetGrid at 0x7f473bf07fd0>

Masking out NO_DATA values

When there is no data availaible, such as on the boundaries of a scene, it is filled in with a special value. We can use filter it out, although xarray will convert the data from int to float so that it can use NaN to indicate no data.

Now that bad values are no longer represented as -9999, the data fits on a much better colour ramp:

In [11]:
autumn_valid = autumn.where(autumn != autumn.attrs['nodata'])
autumn_valid.plot(col='time', col_wrap=3)
Out[11]:
<xarray.plot.facetgrid.FacetGrid at 0x7f4761ce8208>

Masking out cloud

Some of the images are clearly clouds, we should remove them. There is a product with detected clouds called PQ (for Pixel Quality) we can use to mask out the clouds.

In [12]:
pq = dc.load(product='ls5_pq_albers', x=(149.25, 149.35), y=(-35.25, -35.35))
pq_autumn = pq.pixelquality.loc['1991-3':'1991-5']
pq_autumn.plot(col='time', col_wrap=3)
Out[12]:
<xarray.plot.facetgrid.FacetGrid at 0x7f4734424b70>

The PQ layer stores a bitmask of several values. We can list the information available:

In [13]:
from datacube.storage import masking
import pandas
pandas.DataFrame.from_dict(masking.get_flags_def(pq), orient='index')
Out[13]:
bits values description
blue_saturated 0 {'0': True, '1': False} Blue band is saturated
cloud_acca 10 {'0': 'cloud', '1': 'no_cloud'} Cloud (ACCA)
cloud_fmask 11 {'0': 'cloud', '1': 'no_cloud'} Cloud (Fmask)
cloud_shadow_acca 12 {'0': 'cloud_shadow', '1': 'no_cloud_shadow'} Cloud Shadow (ACCA)
cloud_shadow_fmask 13 {'0': 'cloud_shadow', '1': 'no_cloud_shadow'} Cloud Shadow (Fmask)
contiguous 8 {'0': False, '1': True} All bands for this pixel contain non-null values
ga_good_pixel [13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] {'16383': True} Best Quality Pixel
green_saturated 1 {'0': True, '1': False} Green band is saturated
land_sea 9 {'0': 'sea', '1': 'land'} Land or Sea
nir_saturated 3 {'0': True, '1': False} NIR band is saturated
red_saturated 2 {'0': True, '1': False} Red band is saturated
swir1_saturated 4 {'0': True, '1': False} SWIR1 band is saturated
swir2_saturated 7 {'0': True, '1': False} SWIR2 band is saturated
tir_saturated 5 {'0': True, '1': False} Thermal Infrared band is saturated
In [14]:
good_data = masking.make_mask(pq, cloud_acca='no_cloud', cloud_fmask='no_cloud', contiguous=True)
autumn_good_data = good_data.pixelquality.loc['1991-3':'1991-5']
autumn_good_data.plot(col='time', col_wrap=3)
Out[14]:
<xarray.plot.facetgrid.FacetGrid at 0x7f473b3272e8>