MODIS product version comparison application for Google Earth Engine
收藏NIAID Data Ecosystem2026-03-12 收录
下载链接:
https://doi.org/10.7910/DVN/OGTUVN
下载链接
链接失效反馈官方服务:
资源简介:
MODIS product version comparison application for Google Earth Engine This is associated an article published by IEEE in IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing on 20 March 2019, available online at doi.org/10.1109/JSTARS.2019.2901404. Reference: Peter, B.G. and Messina, J.P., 2019. Errors in Time-Series Remote Sensing and an Open Access Application for Detecting and Visualizing Spatial Data Outliers Using Google Earth Engine. IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing, 12(4), pp.1165-1174. Link to manuscript https://ieeexplore.ieee.org/abstract/document/8672086 Interactive Google Earth Engine Application https://cartoscience.users.earthengine.app/view/versions Google Earth Engine Code // Version 1.1 Map.setCenter(30, 20, 2.5).setOptions('HYBRID').style().set('cursor', 'crosshair'); var countryList = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); var stats = function(year) { Map.layers().reset(); var countrySelected = app.country.countrySelect.getValue(); var region = countryList.filterMetadata('Country', 'equals', countrySelected).geometry(); var versionOne = app.inputBox.productBox.getValue(); var versionTwo = app.inputBox.productBoxTwo.getValue(); var band = app.inputBox.bandBox.getValue(); var bandTwo = app.inputBox.bandBoxTwo.getValue(); if (app.inputBox.customCheckbox.getValue() === true) { var latCoord = ee.Number.parse(app.inputBox.latCoordBox.getValue()).getInfo(); var lonCoord = ee.Number.parse(app.inputBox.lonCoordBox.getValue()).getInfo(); var distBuffer = ee.Number.parse(app.inputBox.distBox.getValue()).getInfo(); var distNum = distBuffer*1000; region = ee.Geometry.Point([lonCoord,latCoord]).buffer(distNum).bounds(); } var modisCollectionOne = ee.ImageCollection(versionOne).select(band); var modisCollectionTwo = ee.ImageCollection(versionTwo).select(bandTwo); var imageOne = modisCollectionOne.filter(ee.Filter.calendarRange(year,year,'year')).mean(); var imageTwo = modisCollectionTwo.filter(ee.Filter.calendarRange(year,year,'year')).mean(); var abs = imageOne.select(band).subtract(imageTwo.select(bandTwo)).abs().rename("difference"); var percentilesOne = imageOne.reduceRegion({ reducer: ee.Reducer.percentile([10,90]), geometry: region, scale: 250, maxPixels: 1e13 }); var percentilesTwo = imageTwo.reduceRegion({ reducer: ee.Reducer.percentile([10,90]), geometry: region, scale: 250, maxPixels: 1e13 }); var percentilesAbs = abs.reduceRegion({ reducer: ee.Reducer.percentile([10,90]), geometry: region, scale: 250, maxPixels: 1e13 }); var minOne = ee.Number(percentilesOne.get(band+'_p10')).getInfo(); var maxOne = ee.Number(percentilesOne.get(band+'_p90')).getInfo(); var minTwo = ee.Number(percentilesTwo.get(bandTwo+'_p10')).getInfo(); var maxTwo = ee.Number(percentilesTwo.get(bandTwo+'_p90')).getInfo(); var minBoth = Math.min(minOne,minTwo); var maxBoth = Math.max(maxOne,maxTwo); var minAbs = ee.Number(percentilesAbs.get('difference_p10')).getInfo(); var maxAbs = ee.Number(percentilesAbs.get('difference_p90')).getInfo(); var grayscale = ['f7f7f7', 'cccccc', '969696', '525252','141414']; Map.addLayer(imageOne.select(band).rename(band+'_'+versionOne).clip(region),{min: minBoth, max: maxBoth, palette: grayscale},band+' • '+versionOne, false); Map.addLayer(imageTwo.select(bandTwo).rename(bandTwo+'_'+versionTwo).clip(region),{min: minBoth, max: maxBoth, palette: grayscale},band+' • '+versionTwo, false); Map.addLayer(abs.clip(region),{min: minAbs, max: maxAbs, palette: grayscale},"Difference"); var options = { title: year+' Histogram', fontSize: 11, legend: {position: 'none'}, series: {0: {color: '7100AA'}} }; var histogram = ui.Chart.image.histogram(imageOne, region, 10000).setOptions(options); var optionsTwo = { title: year+' Histogram', fontSize: 11, legend: {position: 'none'}, series: {0: {color: '0071AA'}} }; var histogramTwo = ui.Chart.image.histogram(imageTwo, region, 10000).setOptions(optionsTwo); var clickLabel = ui.Label('Click map to get pixel time-series', {fontWeight: '300', fontSize: '13px', margin: '10px 10px 15px 30px'}); var clickLabelTwo = ui.Label('Click map to get pixel time-series', {fontWeight: '300', fontSize: '13px', margin: '10px 10px 15px 30px'}); app.rootPanels.panelOne.widgets().set(1, ui.Label('temp')); app.rootPanels.panelTwo.widgets().set(1, ui.Label('temp')); app.rootPanels.panelOne.widgets().set(1, histogram); app.rootPanels.panelOne.widgets().set(2, clickLabel); app.rootPanels.panelTwo.widgets().set(1, histogramTwo); app.rootPanels.panelTwo.widgets().set(2, clickLabelTwo); Map.centerObject(region); Map.setOptions('HYBRID'); Map.onClick(function(coords) { var point = ee.Geometry.Point(coords.lon, coords.lat); var dot = ui.Map.Layer(point, {color: 'AA0000'}, "Inspector"); Map.layers().set(3, dot); var clickChart = ui.Chart.image.series(modisCollectionOne, point, ee.Reducer.mean(), 10000); clickChart.setOptions({ title: 'Pixel | X: ' + coords.lon.toFixed(2)+', '+'Y: ' + coords.lat.toFixed(2),...
创建时间:
2021-03-06



