Extract pixel values by points and convert to a table in Google Earth Engine

Luke Collins picture Luke Collins · Mar 12, 2017 · Viewed 12.6k times · Source

I am undertaking a project that is relating field measurements of fire severity to band values and spectral indices derived from Landsat imagery before and after the fire. I am currently using Google Earth Engine to extract surface reflectance values from a collection of Landsat images. The approach I am using imports my field site locations (point data) as a feature collection and uses the getRegion function to extract band values from a Landsat image collection at each point. The code is provided below:

//IMPORT SAMPLE POINTS
var pts =     ee.FeatureCollection('ft:1N9Hb01uCSHqGpz262K_f9VzWedxvTiV0g6tJwfw4');

//IMPORT LANDSAT IMAGE
var L82014pre = ee.ImageCollection('LANDSAT/LC8_SR') //Landsat 8 Surface   reflectance
.filter(ee.Filter.eq('wrs_path', 94))
.filter(ee.Filter.eq('wrs_row', 86)) 
.filterDate(ee.Date.fromYMD(2013,12,13), ee.Date.fromYMD(2014,1,15)) 

//EXTRACT BY SAMPLE POINTS
var sample = L82014pre.getRegion(pts, 30);

My question is how can I convert the resulting 'sample' variable (a list of lists) to a table that can be exported to google drive? Or is there a better approach to extract image data by points in Google Earth Engine?

I am new to Google Earth Engine and the Java programming language, so I apologise if the answer to this question is obvious. I have spent a lot of time trying to find a solution to this problem and I feel like I am getting nowhere.

Thank you,

Luke

Answer

Rodrigo E. Principe picture Rodrigo E. Principe · Mar 14, 2017

I can't get access to your fusion table, so I made up some random points for the example. I'm pretty sure there is other ways to do it. GEE has many functions and some times they are a bit tricky to use. This would be my way:

// As I can't access your FusionTable,
// I make random points and create a FeatureCollection
var p1 = ee.Geometry.Point([142.36083984375, -37.466138602344046])
var p2 = ee.Geometry.Point([143.23974609375, -37.04640889969956])
var pts = ee.FeatureCollection(ee.List([ee.Feature(p1),ee.Feature(p2)]))

//IMPORT LANDSAT IMAGE
var L82014pre = ee.ImageCollection('LANDSAT/LC8_SR') //Landsat 8 Surface   reflectance
.filter(ee.Filter.eq('wrs_path', 94))
.filter(ee.Filter.eq('wrs_row', 86)) 
.filterDate(ee.Date.fromYMD(2013,12,13), ee.Date.fromYMD(2014,1,15))

// Empty Collection to fill
var ft = ee.FeatureCollection(ee.List([]))

var fill = function(img, ini) {
  // type cast
  var inift = ee.FeatureCollection(ini)

  // gets the values for the points in the current img
  var ft2 = img.reduceRegions(pts, ee.Reducer.first(),30)

  // gets the date of the img
  var date = img.date().format()

  // writes the date in each feature
  var ft3 = ft2.map(function(f){return f.set("date", date)})

  // merges the FeatureCollections
  return inift.merge(ft3)
}

// Iterates over the ImageCollection
var newft = ee.FeatureCollection(L82014pre.iterate(fill, ft))

// Export
Export.table.toDrive(newft,
"anyDescription",
"anyFolder",
"anyNameYouWant")