Skip to content

Commit c541182

Browse files
Google Earth Engine Community Authorscopybara-github
authored andcommitted
Add Oya estimation dataset and catalog to the public catalog on earth engine.
PiperOrigin-RevId: 829535997
1 parent 234e1bf commit c541182

File tree

8 files changed

+248
-2
lines changed

8 files changed

+248
-2
lines changed

catalog/catalog.jsonnet

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ local self_url = base_url + base_filename;
133133
ee.link.child_catalog('global-pasture-watch', base_url),
134134
ee.link.child_catalog('landandcarbon', base_url),
135135
ee.link.child_catalog('malariaatlasproject', base_url),
136-
ee.link.child_catalog('nature-trace', base_url)
136+
ee.link.child_catalog('nature-trace', base_url),
137+
ee.link.child_catalog('global-precipitation-nowcast', base_url)
137138
],
138139
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
local id = 'global-precipitation-nowcast';
2+
local subdir = id;
3+
4+
local description = importstr 'description.md';
5+
local ee_const = import 'earthengine_const.libsonnet';
6+
local ee = import 'earthengine.libsonnet';
7+
8+
local basename = 'catalog';
9+
local base_filename = basename + '.json';
10+
local base_url = ee_const.catalog_base + subdir + '/';
11+
local parent_url = ee_const.catalog_base + 'catalog.json';
12+
local self_url = base_url + base_filename;
13+
14+
{
15+
stac_version: ee_const.stac_version,
16+
type: ee_const.stac_type.catalog,
17+
id: id,
18+
title: id,
19+
description: description,
20+
links: [
21+
ee.link.root(),
22+
ee.link.parent(parent_url),
23+
ee.link.self_link(self_url),
24+
ee.link.child_collection('projects_global-precipitation-nowcast_assets_global_estimation', base_url),
25+
],
26+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Dataset of Quasi-Global Precipitation Estimates.
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
local id = 'projects/global-precipitation-nowcast/assets/global_estimation';
2+
local subdir = 'global-precipitation-nowcast';
3+
4+
local ee_const = import 'earthengine_const.libsonnet';
5+
local ee = import 'earthengine.libsonnet';
6+
local spdx = import 'spdx.libsonnet';
7+
local units = import 'units.libsonnet';
8+
9+
local license = spdx.cc_by_4_0;
10+
11+
local basename = std.strReplace(id, '/', '_');
12+
local self_ee_catalog_url = ee_const.ee_catalog_url + basename;
13+
14+
{
15+
'gee:user_uploaded': true,
16+
id: id,
17+
title: 'Oya: 5km Quasi-Global Precipitation Estimates',
18+
description: |||
19+
**Note: The associated paper "Oya: Deep Learning for Accurate Global
20+
Precipitation Estimation" has not yet gone through formal peer review. It
21+
would be released on arxiv soon.**
22+
23+
Oya is a quasi-global, high-resolution precipitation estimation dataset
24+
derived from geostationary (GEO) satellite observations.
25+
26+
The Oya model utilizes the full spectrum of visible and infrared (VIS-IR)
27+
channels from a constellation of GEO satellites — including GOES-16/18,
28+
Meteosat-9/10, and Himawari-8/9 — to generate precipitation estimates
29+
covering 60°N to 60°S.
30+
31+
To address the inherent data imbalance between rain and no-rain events,
32+
Oya employs a two-stage deep learning approach. It combines two U-Net
33+
models: one specialized for precipitation detection and another for
34+
Quantitative Precipitation Estimation (QPE). The models are
35+
trained using high-resolution GPM Combined Radar-Radiometer Algorithm
36+
(CORRA) v07 data as ground truth and are pre-trained on IMERG-Final
37+
retrievals to enhance robustness.
38+
39+
Oya demonstrates superior performance compared to existing operational
40+
GEO-based baselines, such as the PERSIANN DynamicInfrared Rain Rate
41+
(PDIR-Now) and the Convective Rainfall Rate (CRR), across all precipitation
42+
intensities. It also outperforms Passive Microwave (PMW) based products like
43+
the Integrated Multisatellite Retrievals for GPM (IMERG) Early and is
44+
competitive with research-grade products like IMERG Final, which has a
45+
3.5-month latency. This dataset includes a half-hourly historical record
46+
generated from 2004 with a spatial resolution of 5km.
47+
48+
Limitations:
49+
* Geographic Decline: Retrieval accuracy is highest in tropical zones and
50+
degrades at higher latitudes. This is attributed to geostationary satellite
51+
viewing angle effects, specifically limb darkening and parallax shift.
52+
* Topographic Challenges: The model shows reduced performance in arid and
53+
high-altitude regions, notably the Tibetan Plateau.
54+
* Indirect Observation: As an IR/VIS-based product, Oya infers precipitation
55+
from cloud-top properties rather than directly sensing raindrops (as radar
56+
or passive microwave instruments do).
57+
58+
Google makes no commitment about future updates to this dataset.
59+
|||,
60+
'gee:categories': ['precipitation'],
61+
62+
keywords: [
63+
'weather',
64+
'climate',
65+
'geophysical',
66+
'gpm',
67+
'precipitation',
68+
'pre-review',
69+
// 'half_hourly',
70+
],
71+
72+
providers: [
73+
ee.producer_provider('Google', 'https://research.google/'),
74+
ee.host_provider(self_ee_catalog_url),
75+
],
76+
extent: ee.extent_global('2004-01-01T00:00:00Z', null),
77+
78+
// Summaries contain additional information specific to the dataset type.
79+
summaries: {
80+
gsd: [5000],
81+
'eo:bands': [
82+
{
83+
name: 'precipitation',
84+
description: 'Precipitation estimate',
85+
'gee:units': 'mm/hr'
86+
},
87+
],
88+
'gee:visualizations': [
89+
{
90+
display_name: 'Precipitation retrieval (mm/hr)',
91+
// Do not use too many significant digits.
92+
lookat: {lon: 0, lat: 0, zoom: 3},
93+
image_visualization: {
94+
band_vis: {
95+
min: [0],
96+
max: [150],
97+
bands: ['precipitation'],
98+
}
99+
},
100+
},
101+
],
102+
'gee:schema': [
103+
{
104+
name: 'ingestion_time_utc',
105+
description: 'The time of ingestion.',
106+
type: ee_const.var_type.string,
107+
},
108+
],
109+
},
110+
'gee:interval': {
111+
type: 'cadence',
112+
unit: 'minute',
113+
interval: 30,
114+
},
115+
116+
'gee:terms_of_use': ee.gee_terms_of_use(license),
117+
'gee:status': 'beta',
118+
'gee:type': ee_const.gee_type.image_collection,
119+
license: license.id,
120+
links: ee.standardLinks(subdir, id),
121+
type: ee_const.stac_type.collection,
122+
stac_version: ee_const.stac_version,
123+
stac_extensions: [
124+
ee_const.ext_eo,
125+
],
126+
}

checker/tree/keywords.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,6 @@
207207
'persiann',
208208
'phosphorus',
209209
'planet_derived',
210-
'pre-review',
211210
'pnoa',
212211
'poes',
213212
'polarization',
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
var imageCollection = ee.ImageCollection(
2+
"projects/global-precipitation-nowcast/assets/global_estimation"
3+
);
4+
5+
// Select a single estimate.
6+
var singleEstimate = imageCollection.filterDate('2022-12-30T12-00').first();
7+
// mask to remove 0 values
8+
var masked = singleEstimate.selfMask();
9+
10+
11+
// Display on map.
12+
var visParams = {
13+
min: 0,
14+
max: 15,
15+
palette: [
16+
'000096','0064ff', '00b4ff', '33db80', '9beb4a',
17+
'ffeb00', 'ffb300', 'ff6400', 'eb1e00', 'af0000'
18+
]
19+
};
20+
21+
Map.addLayer(
22+
masked,
23+
visParams,
24+
"Preciptation retrieval for 2022-12-30T12-00 in mm/hr"
25+
);
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
var imageCollection = ee.ImageCollection(
2+
"projects/global-precipitation-nowcast/assets/global_estimation"
3+
);
4+
5+
// Select a single estimate.
6+
var single_estimate = imageCollection.filterDate('2022-12-30T12-00').first();
7+
// mask to remove 0 values
8+
var masked = single_estimate.selfMask();
9+
10+
var lon = 8;
11+
var lat = 2;
12+
Map.setCenter(lon, lat, 2);
13+
14+
// Degrees in EPSG:4326
15+
var lon_delta = 50;
16+
var lat_delta = 50;
17+
// Width and height of the thumbnail image.
18+
var pixels = 256;
19+
20+
var areaOfInterest = ee.Geometry.Rectangle(
21+
[lon - lon_delta, lat - lat_delta, lon + lon_delta, lat + lat_delta], null,
22+
false);
23+
24+
25+
// Display on map.
26+
var visParams = {
27+
min: 0,
28+
max: 15,
29+
palette: [
30+
'000096','0064ff', '00b4ff', '33db80', '9beb4a',
31+
'ffeb00', 'ffb300', 'ff6400', 'eb1e00', 'af0000'
32+
]
33+
};
34+
35+
var imageVisualized = masked.visualize(visParams);
36+
37+
var countryOutlines = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017');
38+
var outlinesStyle = {
39+
fillColor: 'FFFFFF',
40+
color: '000000',
41+
width: 2,
42+
};
43+
var countries = countryOutlines.style(outlinesStyle);
44+
var landWaterBackground = countries.visualize();
45+
46+
// Combine the precipitation visualization with the country outlines.
47+
var combinedVisual = landWaterBackground.blend(imageVisualized);
48+
49+
Map.addLayer(combinedVisual, {}, 'Precipitation with country boundaries');
50+
51+
var imageParams = {
52+
dimensions: [pixels, pixels],
53+
region: areaOfInterest,
54+
crs: 'EPSG:4326',
55+
format: 'png',
56+
};
57+
58+
print(ui.Thumbnail({image: combinedVisual, params: imageParams}));
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"id": "global-precipitation-nowcast",
3+
"homeBucket": "projects/global-precipitation-nowcast",
4+
"name": "Oya",
5+
"description": "Oya is a quasi-global, high-resolution precipitation estimation dataset derived from geostationary (GEO) satellite observations.",
6+
"type": "PUBLISHER",
7+
"link": "https://research.google",
8+
"contactDisplay": "[email protected]",
9+
"contactLink": "mailto:[email protected]"
10+
}

0 commit comments

Comments
 (0)