I'm quite new to Earth Engine/QGIS (don't have an ArcGIS license), and I want to use a simple ML model to estimate ground-level O3 using satellite VCD, NDVI, and meteorological data.

I am very lost in this world of GIS/geospatial data processing, so I have tried my best to explain my reasoning frantic Googling and reading some articles.

I also want to note that I am using EE because the datasets are easily available on EE. I am open to using QGIS, I downloaded it a couple of days ago but it keeps crashing (v3.38.0 Grenoble).




Assumption -- I need the data from the different sources I am pulling from to be at the same spatial/temporal resolution in order to use any machine learning algorithms on it.

In the dataset I'm envisioning, each "row" of data will be the meteorological variable value, NDVI, and VCD value for a given pixel on a given day, on which I can perform basic RF/regression (either in EE or Python). In my mind, for this to work all of the datasets need to agree on what "a pixel" is, and to be/become daily temporal resolution (Daymet and TROPOMI are already daily, and I'm assuming I can just take the nearest 16-day NDVI value).

BASED ON THIS ASSUMPTION, I want to get all of the data to be at the same spatial resolution, so I am trying to figure out how to "reproject" the TROPOMI data (which is currently at a resolution of 1111.3km) to a 1km resolution (which is the resolution of all of the Daymet data AND the MODIS data, according to what I know). I do not know what the process is to make the "nearest pixel" from the EPA data, which comes from point and not raster data, match up so that it can be used as labels for the data, but this seems like a more common problem, so I'll look around for how to fix that after I get the rest of this sorted.

So the main operation I want to complete here is standardizing spatial resolution: either converting TROPOMI data to 1km pixels or converting Daymet/MODIS data to 1.113km pixels.

I have tried visualizing all three of the input datasets in Earth Engine (selected max temperature for Daymet), and the pixels DO NOT seem to line up AT ALL. I have attached screenshots of what each of the layers looks like here, and I added the EE script below:

The TROPOMI data seems to give some sort of weird fuzzy pixel, the Daymet data is regular square pixels but tilted, and the NDVI data is PARALLELOGRAMS. I have an inkling that this has to do with different "projection"/"CRS" settings, but I do not know much about either of these and am unsure of how to proceed with the rescaling I believe I need to do.

Can anyone provide me guidance on which step I'm messing up, and how I can accomplish this?

// The variable ca_roi refers to a region in CA/NV that I chose as the ROI

var ca_roi = 
    /* color: #d63000 */
    /* shown: false */
    /* displayProperties: [
        "type": "rectangle"
    ] */
        [[[-123.20530432106482, 41.65436920706394],
          [-123.20530432106482, 37.52402360175488],
          [-115.69065588356482, 37.52402360175488],
          [-115.69065588356482, 41.65436920706394]]], null, false);
var collection = ee.ImageCollection('COPERNICUS/S5P/NRTI/L3_O3')
  .filterDate('2019-06-01', '2019-06-05')

var band_viz = {
  min: 0.12,
  max: 0.15,
  palette: ['black', 'blue', 'purple', 'cyan', 'green', 'yellow', 'red']

Map.addLayer(collection, band_viz, 'S5P O3');
Map.setCenter(0.0, 0.0, 2);

var dataset = ee.ImageCollection('MODIS/061/MOD13A2')
                  .filter(ee.Filter.date('2019-06-01', '2019-06-30'));
var ndvi = dataset.select('NDVI').mean().clip(ca_roi);
var ndviVis = {
  min: 0,
  max: 9000,
  palette: [
    'ffffff', 'ce7e45', 'df923d', 'f1b555', 'fcd163', '99b718', '74a901',
    '66a000', '529400', '3e8601', '207401', '056201', '004c00', '023b01',
    '012e01', '011d01', '011301'
Map.setCenter(6.746, 46.529, 2);
Map.addLayer(ndvi, ndviVis, 'NDVI');

var daymet_dataset = ee.ImageCollection('NASA/ORNL/DAYMET_V4')
                  .filter(ee.Filter.date('2019-06-01', '2019-06-05'))
var maximumTemperature = daymet_dataset.select('tmax').first().clip(ca_roi);

var maximumTemperatureVis = {
  min: -40.0,
  max: 30.0,
  palette: ['1621A2', 'white', 'cyan', 'green', 'yellow', 'orange', 'red'],

Map.addLayer(maximumTemperature, maximumTemperatureVis, 'Maximum Temperature');

New contributor
pmarfatia is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.