GEE Code Hub
Google Earth Engine — every dataset, every recipe, every advanced workflow.
Dataset Code Explorer
Every dataset in the GEE Data Hub — with detailed metadata, ready-to-run JS & Python code, and advanced analysis methods.
GEE Code Library — Ready-to-Run Recipes
5 ready-to-run snippet(s) · curated with sample data, dataset sources & use cases
Landsat 8/9 NDVI Annual Trend
Compute mean NDVI per year for a region using Landsat 8/9 Collection 2 surface reflectance, and chart the trend.
Monitor vegetation greening / browning, deforestation, or crop health across years.
Remote sensing students, environmental researchers, agricultural analysts.
Landsat 8/9 C2 L2 (GEE Catalog) ↗
roi.txt · asset-id
USDOS/LSIB_SIMPLE/2017 (filter by country_na == "Bangladesh")Or draw your own polygon in the Code Editor.
// === Landsat 8/9 Annual NDVI Trend ===
var roi = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017')
.filter(ee.Filter.eq('country_na', 'Bangladesh')).geometry();
var years = ee.List.sequence(2015, 2024);
function maskL89(img) {
var qa = img.select('QA_PIXEL');
var mask = qa.bitwiseAnd(1 << 3).eq(0).and(qa.bitwiseAnd(1 << 4).eq(0));
return img.updateMask(mask).multiply(0.0000275).add(-0.2);
}
var ndviPerYear = ee.FeatureCollection(years.map(function (y) {
y = ee.Number(y);
var coll = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.merge(ee.ImageCollection('LANDSAT/LC09/C02/T1_L2'))
.filterBounds(roi)
.filterDate(ee.Date.fromYMD(y, 1, 1), ee.Date.fromYMD(y, 12, 31))
.map(maskL89);
var ndvi = coll.map(function (i) {
return i.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI');
}).mean();
var mean = ndvi.reduceRegion({
reducer: ee.Reducer.mean(), geometry: roi, scale: 300,
bestEffort: true, tileScale: 4, maxPixels: 1e10
}).get('NDVI');
return ee.Feature(null, { year: y, ndvi: mean });
}));
print(ui.Chart.feature.byFeature(ndviPerYear, 'year', 'ndvi')
.setOptions({ title: 'Mean Annual NDVI', hAxis: { format: '####' } }));
Map.centerObject(roi, 6);
Map.addLayer(ndviPerYear, {}, 'Year stats');- Annual NDVI line chart
- ROI map layer
MODIS LST — Urban Heat Island
Map mean day-time Land Surface Temperature and detect urban heat islands using MOD11A2.
Urban planning, heat-wave studies, climate vulnerability mapping.
Urban planners, climate researchers, MSc/PhD students.
city.geojson · asset-id
FAO/GAUL/2015/level2 (filter ADM2_NAME)
var city = ee.FeatureCollection('FAO/GAUL/2015/level2')
.filter(ee.Filter.eq('ADM2_NAME', 'Dhaka')).geometry();
var lst = ee.ImageCollection('MODIS/061/MOD11A2')
.filterDate('2023-04-01', '2023-09-30')
.select('LST_Day_1km')
.mean().multiply(0.02).subtract(273.15)
.clip(city).rename('LST_C');
Map.centerObject(city, 10);
Map.addLayer(lst, { min: 28, max: 42, palette: ['blue','yellow','red'] }, 'Mean LST (°C)');
var stats = lst.reduceRegion({
reducer: ee.Reducer.percentile([10, 50, 90]),
geometry: city, scale: 1000, bestEffort: true, tileScale: 4, maxPixels: 1e9
});
print('LST percentiles', stats);- LST map (°C)
- P10/P50/P90 statistics
Sentinel-1 SAR Flood Mapping
Detect flood extent by differencing pre- and post-event Sentinel-1 VV backscatter.
Rapid flood damage assessment, disaster response, insurance.
Disaster response teams, hydrologists, humanitarian GIS analysts.
var roi = ee.Geometry.Rectangle([89.0, 23.5, 90.5, 24.7]);
var before = ee.ImageCollection('COPERNICUS/S1_GRD')
.filterBounds(roi).filterDate('2022-06-01','2022-06-15')
.filter(ee.Filter.eq('instrumentMode','IW'))
.filter(ee.Filter.listContains('transmitterReceiverPolarisation','VV'))
.select('VV').median();
var after = ee.ImageCollection('COPERNICUS/S1_GRD')
.filterBounds(roi).filterDate('2022-06-25','2022-07-05')
.select('VV').median();
var diff = before.subtract(after);
var flood = diff.gt(3); // tune threshold
Map.centerObject(roi, 9);
Map.addLayer(before, {min:-25,max:0}, 'Before VV');
Map.addLayer(after, {min:-25,max:0}, 'After VV');
Map.addLayer(flood.updateMask(flood), {palette:['cyan']}, 'Flooded');- Pre/post backscatter layers
- Binary flood mask
Random Forest LULC Classification
Supervised LULC mapping with Sentinel-2 bands and a Random Forest classifier (50 trees).
Land use/land cover mapping, change detection baselines.
Researchers familiar with supervised ML and training-sample collection.
// Add training points beforehand: Urban=0, Veg=1, Water=2, Bare=3 (FeatureCollection 'training')
var roi = training.geometry().bounds();
var img = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(roi).filterDate('2024-01-01','2024-12-31')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 15))
.median().select(['B2','B3','B4','B8','B11','B12']);
var samples = img.sampleRegions({collection: training, properties: ['class'], scale: 10});
var rf = ee.Classifier.smileRandomForest(50).train(samples, 'class', img.bandNames());
var classified = img.classify(rf);
Map.addLayer(classified, {min:0,max:3,palette:['red','green','blue','tan']}, 'LULC');- LULC raster (4 classes)
geemap Quick Sentinel-2 Map
Initialize Earth Engine, fetch a cloud-free Sentinel-2 composite, and view in geemap.
Quick visual reconnaissance of an area before deeper analysis.
Beginners moving from JS GEE to Python Colab.
!pip install -q earthengine-api geemap
import ee, geemap
ee.Authenticate(); ee.Initialize(project='your-project')
roi = ee.Geometry.Rectangle([90.3, 23.7, 90.5, 23.9])
img = (ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(roi).filterDate('2024-01-01','2024-12-31')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10))
.median())
m = geemap.Map(); m.centerObject(roi, 12)
m.addLayer(img, {'bands':['B4','B3','B2'],'min':0,'max':3000}, 'S2 RGB')
m- Interactive RGB map in Colab
All Credit @ Al Jubaer | aljubaer.com