Example Earth Engine scripts

library(irg)

Just swap the regions with your own features or points and run!

MODIS MOD13Q1

To access an example script for extracting NDVI from MODIS MOD13Q1 imagery in Earth Engine, run:

use_example_ee_script(sensor = 'MODIS')
// Sample NDVI for IRG - MODIS MOD13Q1
// Example from irg package https://github.com/robitalec/irg
// Alec L. Robitaille

// Functions ===================================================================
function rescaleBands (im) {
  var viBands = im.select(['NDVI', 'EVI']).multiply(0.0001);
  var surfBands = im.select('sur_refl_b0.*').multiply(0.0001);
  var viewBands = im.select(['ViewZenith', 'SolarZenith', 'RelativeAzimuth']).multiply(0.01);

  return(im.addBands(viBands, null, true)
           .addBands(surfBands, null, true)
           .addBands(viewBands, null, true));
}

// Function to grab year from image and add it as a band
function addYear(img) {
  return(img.addBands(ee.Image(img.date().get('year')).rename('yr')));
}

// Function to sample an image in each region of supplied geometry
function sampleRegions (im) {
    return(im.reduceRegions(features, ee.Reducer.mean(), 250)
           .copyProperties(im));
}



// Feature ====================================================================
var features = ee.FeatureCollection(
        [ee.Feature(ee.Geometry.Point([-109.96, 53.853]),
        {"id": "0"}),
        ee.Feature(ee.Geometry.Point([-109.94, 53.852]),
        {"id": "1"}),
        ee.Feature(ee.Geometry.Point([-109.95, 53.851]),
        {"id": "2"}),
        ee.Feature(ee.Geometry.Point([-109.93, 53.854]),
        {"id": "3"}),
        ee.Feature(ee.Geometry.Point([-109.92, 53.853]),
        {"id": "4"}),
        ee.Feature(ee.Geometry.Point([-109.94, 53.852]),
        {"id": "5"}),
        ee.Feature(ee.Geometry.Point([-109.93, 53.851]),
        {"id": "6"})]);


// Images ======================================================================
var modis = ee.ImageCollection('MODIS/006/MOD13Q1');



// Filter ======================================================================
modis = modis.filterDate('2015-01-01', '2020-01-01')
             .filterBounds(features);



// Process images ==============================================================
// Add dates
modis = modis.map(addYear)
             .map(rescaleBands);



// Sample images ===============================================================
var sample = modis.map(sampleRegions)
                  .flatten()
                  .filter(ee.Filter.neq('NDVI', null));



// Export ======================================================================
Export.table.toDrive({
  collection: sample,
  description: 'sampled-ndvi-MODIS-MOD13Q1',
  selectors: ['id', 'NDVI', 'SummaryQA', 'DayOfYear', 'yr']
});

Landsat 8

To access an example script for extracting NDVI from Landsat 8 imagery in Earth Engine, run:

use_example_ee_script(sensor = 'Landsat')
// Sample NDVI for IRG - Landsat
// Example from irg package https://github.com/robitalec/irg
// Alec L. Robitaille

// Functions ===================================================================
// Function to add mask identifying cloud and saturation
// Mask band = if QA_PIXEL indicates unwanted pixels +
//             if QA_RADSAT indicates saturated pixels
// Either = 0 (good), 1 (one of two masking conditions), 2 (both conditions)
// Adapted from: Examples/Cloud Masking/Landsat8 Surface Reflectance
function addMask(image) {
  // Bit 0 - Fill
  // Bit 1 - Dilated Cloud
  // Bit 2 - Cirrus
  // Bit 3 - Cloud
  // Bit 4 - Cloud Shadow
  var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).neq(0);
  var saturationMask = image.select('QA_RADSAT').neq(0);
  var mask = qaMask.add(saturationMask);

  // Apply the scaling factors to the appropriate bands.
  var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
  var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);

  // Replace the original bands with the scaled ones and apply the masks.
  return image.addBands(opticalBands, null, true)
              .addBands(thermalBands, null, true)
              .addBands(mask.rename('mask'));
}

// Function to calculate NDVI and add it as a band
function calcNDVI(im) {
    var ndvi = im.normalizedDifference(['SR_B5','SR_B4']).rename('ndvi');
    return im.addBands(ndvi);
}

// Function to grab date from image and add it as a band
function addDates(im) {
  var date = im.date();
  return im.addBands(ee.Image([date.getRelative('day', 'year'),
                                date.get('year')])
                        .rename(['doy', 'year'])).float();
}

// Function to sample an image in each region of supplied geometry
function sampleRegions (im) {
    return(im.reduceRegions(features, ee.Reducer.mean(), 30)
           .copyProperties(im));
}



// Feature ====================================================================
var features = ee.FeatureCollection(
        [ee.Feature(ee.Geometry.Point([-109.96, 53.853]),
        {"id": "0"}),
        ee.Feature(ee.Geometry.Point([-109.94, 53.852]),
        {"id": "1"}),
        ee.Feature(ee.Geometry.Point([-109.95, 53.851]),
        {"id": "2"}),
        ee.Feature(ee.Geometry.Point([-109.93, 53.854]),
        {"id": "3"}),
        ee.Feature(ee.Geometry.Point([-109.92, 53.853]),
        {"id": "4"}),
        ee.Feature(ee.Geometry.Point([-109.94, 53.852]),
        {"id": "5"}),
        ee.Feature(ee.Geometry.Point([-109.93, 53.851]),
        {"id": "6"})]);



// Images ======================================================================
var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2');



// Filter ======================================================================
l8 = l8.filterDate('2015-01-01', '2020-01-01')
       .filterBounds(features);



// Process images ==============================================================
// Mask clouds and calculate NDVI
l8 = l8.map(addMask)
       .map(addDates)
       .map(calcNDVI);



// Sample images ===============================================================
var sample = l8.map(sampleRegions)
               .flatten();



// Export ======================================================================
Export.table.toDrive({
  collection: sample,
  description: 'sampled-ndvi-Landsat-LC08-T1-L2',
  selectors: ['id', 'ndvi', 'mask', 'doy', 'year']
});