I am trying to determine the what areas tend to get rain in a specific interval of time over multiple years. What I am doing is taking the filter date (in this case June 15th through July 15th) and outputting that data into its own layer. Where I am running into trouble is when I have multiple years of data, summing that data gives me a completely inaccurate output layer. What i'm trying to do is "stack" the years on top of one another on the map. See below for examples.

var dataset = ee.ImageCollection('OREGONSTATE/PRISM/AN81d')
var precip = dataset.select('ppt');
var precipitationVis = {
  min: 0.0,
  max: 50.0,
  palette: ['1621A2', 'white', 'cyan', 'green', 'yellow', 'orange', 'red'],
Map.setCenter(-86.55, 47.71, 7);

var precip2012 = precip.filterDate("2014-06-15", "2014-07-15");
var precip2013 = precip.filterDate("2015-06-15", "2015-07-15");

var total2012 = precip2012.reduce(ee.Reducer.sum());
var total2013 = precip2013.reduce(ee.Reducer.sum());

var final = total2012.add(total2013);
Map.addLayer(final, precipitationVis,
    'Final Layer');

Map.addLayer(precip.filterDate('2012-06-25', '2012-07-15'), precipitationVis, '2012');
Map.addLayer(precip.filterDate('2013-06-25', '2013-07-15'), precipitationVis, '2013');

This is the output for 2012 This is the output for 2012

This is the output for 2013 enter image description here

And this is the output when I use the Reducer.sum function

enter image description here

So as you can see, the 'layered' final image is complete trash. I'm not sure where the numbers are coming from or how it is getting wild outputs (the minimum output value for the final layer is "100" when there at most in the previous layers were 4-5 mm of rain.)

What I want to be able to do is put 20 years of precip data for that june-july range onto one layer where it accumulates in each year if there was precipitation in that pixel. Does that make sense what i'm trying to do?

This is what the image looks like when I enable both the 2012 and 2013 layer at the same time:

enter image description here

And that's what I want the final product to look like, however when I do this just using the layers, the opacity goes to full after 3-4 layers.

So how would I compile each layer (2012 & 2013) into a final layer?

  • You're looking at a month-long window of daily data (analytically) but when you plot the 2012 and 2013 imageCollections you're only plotting the first layer of each imageCollection Apr 3, 2019 at 19:30
  • Can you clarify what you mean when you say "you're only plotting the first layer of each imageCollection" ?
    – Joey Roses
    Apr 4, 2019 at 15:37
  • Apologies; the first() layer is not what's being plotted. As per the earthengine Image Collections tutorial, "When you add an ImageCollection to the map, it is displayed as a recent-value composite, meaning that only the most recent pixels are displayed" - developers.google.com/earth-engine/tutorial_api_04. Regardless, when you use Map.addLayer(precip.filterDate('2012-06-25', '2012-07-15'...) you aren't plotting the seasonal sum. Apr 5, 2019 at 3:07
  • I was looking through as much documentation I could find on ".filterDate" and am left still a little perplexed as to how it works. Are you saying that if I select a date range (lets say June 15th to July 15th), that only the most recent pixels are shown? (ie. only the last 3-4 days of rain?) or is it any and all rain between that specified time range?
    – Joey Roses
    Apr 5, 2019 at 13:42
  • .filterDate() still leaves you with an imageCollection, so yes adding the product of .filterDate() as a map layer will only show the most recent data. Apr 5, 2019 at 20:17


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.