Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions catalog/global_precipitation_nowcast/catalog.jsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
local id = 'global_precipitation_nowcast';
local subdir = id;

local description = importstr 'description.md';
local ee_const = import 'earthengine_const.libsonnet';
local ee = import 'earthengine.libsonnet';

local basename = 'catalog';
local base_filename = basename + '.json';
local base_url = ee_const.catalog_base + subdir + '/';
local parent_url = ee_const.catalog_base + 'catalog.json';
local self_url = base_url + base_filename;

{
stac_version: ee_const.stac_version,
type: ee_const.stac_type.catalog,
id: id,
title: id,
description: description,
links: [
ee.link.root(),
ee.link.parent(parent_url),
ee.link.self_link(self_url),
ee.link.child_collection('global_precipitation_nowcast', base_url),
],
}
1 change: 1 addition & 0 deletions catalog/global_precipitation_nowcast/description.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Dataset of Quasi-Global Precipitation Estimates.
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
local id = 'projects/global_precipitation_nowcast/assets/global_estimation';
local subdir = 'global_precipitation_nowcast';

local ee_const = import 'earthengine_const.libsonnet';
local ee = import 'earthengine.libsonnet';
local spdx = import 'spdx.libsonnet';
local units = import 'units.libsonnet';

local license = spdx.cc_by_4_0;

local basename = std.strReplace(id, '/', '_');
local self_ee_catalog_url = ee_const.ee_catalog_url + basename;

{
'gee:user_uploaded': true,
id: id,
title: 'Oya: Quasi-Global Precipitation Estimates',
description: |||
Oya is a quasi-global, high-resolution precipitation estimation dataset
derived from geostationary (GEO) satellite observations.

The Oya model utilizes the full spectrum of visible and infrared (VIS-IR)
channels from a constellation of GEO satellites — including GOES-16/18,
Meteosat-9/10, and Himawari-8/9 — to generate precipitation estimates
covering 60°N to 60°S.

To address the inherent data imbalance between rain and no-rain events,
Oya employs a two-stage deep learning approach. It combines two U-Net
models: one specialized for precipitation detection and another for
Quantitative Precipitation Estimation (QPE). The models are
trained using high-resolution GPM Combined Radar-Radiometer Algorithm
(CORRA) v07 data as ground truth and are pre-trained on IMERG-Final
retrievals to enhance robustness.

Oya demonstrates superior performance compared to existing operational
GEO-based baselines, such as the PERSIANN DynamicInfrared Rain Rate
(PDIR-Now) and the Convective Rainfall Rate (CRR), across all precipitation
intensities. It also outperforms Passive Microwave (PMW) based products like
the Integrated Multisatellite Retrievals for GPM (IMERG) Early and is
competitive with research-grade products like IMERG Final, which has a
3.5-month latency. This dataset includes a half-hourly historical record
generated from 2004 with a spatial resolution of 5km.

Accurate precipitation data is critical for applications in agriculture,
water resource management, and disaster preparedness, particularly in
regions where ground-based observation networks are sparse.

For more details, see the associated paper: "Oya: Deep Learning for Accurate
Global Precipitation Estimation".
|||,
'gee:categories': ['precipitation'],

keywords: [
'weather',
'climate',
'geophysical',
'gpm',
'precipitation',
// 'half_hourly',
],

providers: [
ee.producer_provider('Google', 'https://research.google/'),
ee.host_provider(self_ee_catalog_url),
],
extent: ee.extent_global('2004-01-01T00:00:00Z', null),

// Summaries contain additional information specific to the dataset type.
summaries: {
gsd: [5000],
'eo:bands': [
{
name: 'precipitation',
description: 'Precipitation estimate',
'gee:units': 'mm/hr'
},
],
'gee:visualizations': [
{
display_name: 'Precipitation retrieval (mm/hr)',
// Do not use too many significant digits.
lookat: {lon: 0, lat: 0, zoom: 3},
image_visualization: {
band_vis: {
min: [0],
max: [150],
bands: ['precipitation'],
}
},
},
],
'gee:schema': [
{
name: 'ingestion_time_utc',
description: 'The time of ingestion.',
type: ee_const.var_type.string,
},
],
},
'gee:interval': {
type: 'cadence',
unit: 'minute',
interval: 30,
},

'gee:terms_of_use': ee.gee_terms_of_use(license),
'gee:status': 'beta',
'gee:type': ee_const.gee_type.image_collection,
license: license.id,
links: ee.standardLinks(subdir, id),
type: ee_const.stac_type.collection,
stac_version: ee_const.stac_version,
stac_extensions: [
ee_const.ext_eo,
],
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
var imageCollection = ee.ImageCollection(
"projects/global-precipitation-nowcast/assets/global_estimation"
);

// Select a single estimate.
var singleEstimate = imageCollection.filterDate('2022-12-30T12-00').first();
// mask to remove 0 values
var masked = singleEstimate.selfMask();


// Display on map.
var visParams = {
min: 0,
max: 15,
palette: [
'000096','0064ff', '00b4ff', '33db80', '9beb4a',
'ffeb00', 'ffb300', 'ff6400', 'eb1e00', 'af0000'
]
};

Map.addLayer(
masked,
visParams,
"Preciptation retrieval for 2022-12-30T12-00 in mm/hr"
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
var imageCollection = ee.ImageCollection(
"projects/global-precipitation-nowcast/assets/global_estimation"
);

// Select a single estimate.
var single_estimate = imageCollection.filterDate('2022-12-30T12-00').first();
// mask to remove 0 values
var masked = single_estimate.selfMask();

var lon = 8;
var lat = 2;
Map.setCenter(lon, lat, 2);

// Degrees in EPSG:4326
var lon_delta = 50;
var lat_delta = 50;
// Width and height of the thumbnail image.
var pixels = 256;

var areaOfInterest = ee.Geometry.Rectangle(
[lon - lon_delta, lat - lat_delta, lon + lon_delta, lat + lat_delta], null,
false);


// Display on map.
var visParams = {
min: 0,
max: 15,
palette: [
'000096','0064ff', '00b4ff', '33db80', '9beb4a',
'ffeb00', 'ffb300', 'ff6400', 'eb1e00', 'af0000'
]
};

var imageVisualized = masked.visualize(visParams);

var countryOutlines = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017');
var outlinesStyle = {
fillColor: 'FFFFFF',
color: '000000',
width: 2,
};
var countries = countryOutlines.style(outlinesStyle);
var landWaterBackground = countries.visualize();

// Combine the precipitation visualization with the country outlines.
var combinedVisual = landWaterBackground.blend(imageVisualized);

Map.addLayer(combinedVisual, {}, 'Precipitation with country boundaries');

var imageParams = {
dimensions: [pixels, pixels],
region: areaOfInterest,
crs: 'EPSG:4326',
format: 'png',
};

print(ui.Thumbnail({image: combinedVisual, params: imageParams}));
10 changes: 10 additions & 0 deletions owners/global-precipitation-nowcast.jsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"id": "global_precipitation_nowcast",
"homeBucket": "projects/global_precipitation_nowcast",
"name": "Oya",
"description": "Oya is a quasi-global, high-resolution precipitation estimation dataset derived from geostationary (GEO) satellite observations.",
"type": "PUBLISHER",
"link": "https://research.google",
"contactDisplay": "oya-team@google.com",
"contactLink": "mailto:oya-team@google.com"
}
Loading