I am calculating the area of an ice cover by summing the number of pixels having a value above a certain threshold then multiplying by the pixel area. This is done for a collection of images over a number of years.
The resolution of the MODIS dataset I'm using is 500 m. When I use the function ee.Reducer.sum()
I set the scale to this value. When my area is calculated however, the pixel size appears to be 463.3 m with areas reflecting this pixel size (0.216 km2 instead of 0.25 km2).
I am not a remote sensing or GIS scientist by trade and am struggling to understand the relationship between projection (when a pixel is inspected it shows, SR-ORG:6974) and scale. This MODIS data set uses a sinusoidal projection which I understand to be area-preserving. That being said when I look at pixels nearer to the equator, they also appear to have a size of 463.3.
My bottomline is that I need to present the most accurate measure of area and make sure I have not caused an error.
Are the areas I've calculated using this approach correct or should they be based on a 500 m pixel?
My code is quite long and may confuse the main question, but I've included the main parts below to show my general method. It's not run-able but I can provide the rest if need be.
//Create a number of masks and other functions to clean up images and highlight ice, there is no //use of scale up to this point
var maskedModis_ice_AllQAcloud= sample
.map(maskLand)
.map(addice)
.map(getclouddata)
.map(getcirrusdata)
.map(getQAdata)
.map(maskAllQAcloud);
//Function to create threshold and multiply by pixel area to determine ice area
var icethreshold= 3000;
var icefunction = function(image){
var icejunk= image.select(['Ice_index']);
var wateretc= icejunk.lt(icethreshold);
var solidice = icejunk.gte(icethreshold);
//image = image.updateMask(solidice);
var area2= ee.Image.pixelArea();
var iceArea1 = solidice.multiply(area2).rename('iceArea1');
var iceArea= iceArea1.divide(1000*1000).rename('iceArea');
return image.addBands(iceArea);
//highlight only pixels marked as ice through thresholding and combine with all filtering steps
var filteredAlliceQAcloud=maskedModis_ice_AllQAcloud.map(icefunction);
print (filteredAlliceQAcloud);
//Apply to specific regions and plot
var chart = ui.Chart.image.series(filteredAlliceQAcloud.select('iceArea'), regions, ee.Reducer.sum(),500)
.setChartType('LineChart')
.setOptions({
//title: 'Beisfjord',
hAxis: {title: 'Date'},
vAxis: {title: 'Ice Area, QA and cloud filtered (m^2)'},
fontSize: 20,
legend: {position: 'right'}
});