diff --git a/catalog/gcp-public-data-weathernext/catalog.jsonnet b/catalog/gcp-public-data-weathernext/catalog.jsonnet index 90f7f96f4..bea8de83e 100644 --- a/catalog/gcp-public-data-weathernext/catalog.jsonnet +++ b/catalog/gcp-public-data-weathernext/catalog.jsonnet @@ -21,5 +21,7 @@ local self_url = base_url + base_filename; ee.link.parent(parent_url), ee.link.self_link(self_url), ee.link.child_collection('projects_gcp-public-data-weathernext_assets_59572747_4_0', base_url), + // TODO(samier): Uncomment this when the collection is available. + // ee.link.child_collection('projects_gcp-public-data-weathernext_assets_126478713_1_0', base_url), ], } diff --git a/catalog/gcp-public-data-weathernext/projects_gcp-public-data-weathernext_assets_126478713_1_0.jsonnet b/catalog/gcp-public-data-weathernext/projects_gcp-public-data-weathernext_assets_126478713_1_0.jsonnet new file mode 100644 index 000000000..9f35da095 --- /dev/null +++ b/catalog/gcp-public-data-weathernext/projects_gcp-public-data-weathernext_assets_126478713_1_0.jsonnet @@ -0,0 +1,635 @@ +local id = 'projects/gcp-public-data-weathernext/assets/126478713_1_0'; +local subdir = 'gcp-public-data-weathernext'; + +local ee_const = import 'earthengine_const.libsonnet'; +local ee = import 'earthengine.libsonnet'; +local spdx = import 'spdx.libsonnet'; +local units = import 'units.libsonnet'; + +local basename = std.strReplace(id, '/', '_'); +local base_filename = basename + '.json'; +local self_ee_catalog_url = ee_const.ee_catalog_url + basename; +local catalog_subdir_url = ee_const.catalog_base + subdir + '/'; +local parent_url = catalog_subdir_url + 'catalog.json'; +local self_url = catalog_subdir_url + base_filename; + +local license = spdx.proprietary; + +{ + // TODO(samier): Remove when the dataset is ready. + 'gee:status': 'incomplete', + 'gee:user_uploaded': true, + stac_version: ee_const.stac_version, + type: ee_const.stac_type.collection, + stac_extensions: [ + ee_const.ext_eo, + ee_const.ext_sci, + ], + id: id, + title: 'WeatherNext Gen Forecasts', + 'gee:type': ee_const.gee_type.image_collection, + description: ||| + WeatherNext Gen is an experimental dataset of global medium-range ensemble + weather forecasts produced by Google DeepMind's [diffusion-based ensemble weather model](https://www.nature.com/articles/s41586-024-08252-9). + + The experimental dataset includes real-time (i.e. any data that relates + to a time that is no more than 48 hours in the past (“Real-Time + Experimental Data”)) and historical ensemble (probabilistic) (i.e. any data + that relates to a time that is more than 48 hours ago + (“Historic Experimental Data”)) forecasts. This includes major atmospheric + and surface fields including temperature, wind, precipitation, humidity, + geopotential, vertical velocity, sea surface temperature and pressure. The + spatial resolution is 0.25 degrees. New forecast init times have 6 hour + resolution (00z, 06z, 12z, 18z) and forecast lead times have 12 hour + resolution up to a max lead time of 15 days. + + If you are interested in accessing the experimental dataset, please fill + out this [WeatherNext Data Request form](https://docs.google.com/forms/d/e/1FAIpQLSeCf1JY8G78UDWzbm0ly9kJxfSjUIJT5WyMR_HiNqCm-IHIBg/viewform). + + More information on the model is described in "[GenCast: Diffusion-based ensemble forecasting for medium-range weather](https://www.nature.com/articles/s41586-024-08252-9)". + + If you have any questions on using this experimental dataset, or would + like to use it for purposes not currently permitted under the terms of use + set out below, please contact weathernext@google.com. + + **Acknowledgements** + + The experimental data was generated by models which communicate with and/or + reference the following separate libraries and packages: + + * Data and products of the European Centre for Medium-range Weather Forecasts + (ECMWF), as modified by Google. + * Modified Copernicus Climate Change Service information 2023. Neither the + European Commission nor ECMWF is responsible for any use that may be made of + the Copernicus information or data it contains. + * ECMWF HRES datasets + * Copyright statement: Copyright "© 2023 European Centre for Medium-Range + Weather Forecasts (ECMWF)". + * Source: [www.ecmwf.int](http://www.ecmwf.int) + * License Statement: ECMWF open data is published under a Creative Commons + Attribution 4.0 International (CC BY 4.0). + [https://creativecommons.org/licenses/by/4.0/](https://creativecommons.org/licenses/by/4.0/) + * Disclaimer: ECMWF does not accept any liability whatsoever for any error + or omission in the data, their availability, or for any loss or damage + arising from their use. + |||, + license: license.id, + links: ee.standardLinks(subdir, id), + keywords: [ + 'weather', + 'weathernext', + 'forecast', + 'temperature', + 'precipitation', + 'wind', + ], + providers: [ + ee.producer_provider('Google', 'https://deepmind.google/discover/blog/gencast-predicts-weather-and-the-risks-of-extreme-conditions-with-sota-accuracy/'), + ee.host_provider(self_ee_catalog_url), + ], + extent: ee.extent_global('2020-01-01T00:00:00Z', null), + summaries: { + gsd: [27750], + 'gee:schema': [ + { + name: 'start_time', + description: ||| + The initialization time of the forecast. This is the same for all + forecast hours within a single model run. + |||, + type: ee_const.var_type.string, + }, + { + name: 'end_time', + description: ||| + The valid time for this specific forecast. Calculated as + start_time + forecast_hour + |||, + type: ee_const.var_type.string, + }, + { + name: 'forecast_hour', + description: ||| + The forecast lead time in hours. Represents the number of hours from + the start_time. + |||, + type: ee_const.var_type.int, + }, + { + name: 'ingestion_time', + description: ||| + The time when this forecast data became available in Earth Engine. + |||, + type: ee_const.var_type.double, + }, + { + name: 'ensemble_member', + description: ||| + The ensemble member, as a string. + |||, + type: ee_const.var_type.string, + }, + ], + 'eo:bands': [ + { + name: 'total_precipitation_12hr', + description: ||| + Total precipitation over a 12-hour period + |||, + 'gee:units': units.millimeter, + }, + { + name: '100m_u_component_of_wind', + description: ||| + 100 meter U wind component + |||, + 'gee:units': units.velocity_si, + }, + { + name: '100m_v_component_of_wind', + description: ||| + 100 meter V wind component + |||, + 'gee:units': units.velocity_si, + }, + { + name: '10m_u_component_of_wind', + description: ||| + 10 meter U wind component + |||, + 'gee:units': units.velocity_si, + }, + { + name: '10m_v_component_of_wind', + description: ||| + 10 meter V wind component + |||, + 'gee:units': units.velocity_si, + }, + { + name: '2m_temperature', + description: ||| + 2 meter temperature + |||, + 'gee:units': units.kelvin, + }, + { + name: 'mean_sea_level_pressure', + description: ||| + Mean sea level pressure + |||, + 'gee:units': units.pascal, + }, + { + name: 'sea_surface_temperature', + description: ||| + Sea surface temperature + |||, + 'gee:units': units.kelvin, + }, + { + name: '50_geopotential', + description: 'Geopotential at 50 hPa', + // TODO(samier): Add this to the units file. + 'gee:units': 'm^2/s^2' + }, + { + name: '100_geopotential', + description: 'Geopotential at 100 hPa', + 'gee:units': 'm^2/s^2' + }, + { + name: '150_geopotential', + description: 'Geopotential at 150 hPa', + 'gee:units': 'm^2/s^2' + }, + { + name: '200_geopotential', + description: 'Geopotential at 200 hPa', + 'gee:units': 'm^2/s^2' + }, + { + name: '250_geopotential', + description: 'Geopotential at 250 hPa', + 'gee:units': 'm^2/s^2' + }, + { + name: '300_geopotential', + description: 'Geopotential at 300 hPa', + 'gee:units': 'm^2/s^2' + }, + { + name: '400_geopotential', + description: 'Geopotential at 400 hPa', + 'gee:units': 'm^2/s^2' + }, + { + name: '500_geopotential', + description: 'Geopotential at 500 hPa', + 'gee:units': 'm^2/s^2' + }, + { + name: '600_geopotential', + description: 'Geopotential at 600 hPa', + 'gee:units': 'm^2/s^2' + }, + { + name: '700_geopotential', + description: 'Geopotential at 700 hPa', + 'gee:units': 'm^2/s^2' + }, + { + name: '850_geopotential', + description: 'Geopotential at 850 hPa', + 'gee:units': 'm^2/s^2' + }, + { + name: '925_geopotential', + description: 'Geopotential at 925 hPa', + 'gee:units': 'm^2/s^2' + }, + { + name: '1000_geopotential', + description: 'Geopotential at 1000 hPa', + 'gee:units': 'm^2/s^2' + }, + { + name: '50_specific_humidity', + description: 'Specific humidity at 50 hPa', + 'gee:units': 'kg/kg' + }, + { + name: '100_specific_humidity', + description: 'Specific humidity at 100 hPa', + 'gee:units': 'kg/kg' + }, + { + name: '150_specific_humidity', + description: 'Specific humidity at 150 hPa', + 'gee:units': 'kg/kg' + }, + { + name: '200_specific_humidity', + description: 'Specific humidity at 200 hPa', + 'gee:units': 'kg/kg' + }, + { + name: '250_specific_humidity', + description: 'Specific humidity at 250 hPa', + 'gee:units': 'kg/kg' + }, + { + name: '300_specific_humidity', + description: 'Specific humidity at 300 hPa', + 'gee:units': 'kg/kg' + }, + { + name: '400_specific_humidity', + description: 'Specific humidity at 400 hPa', + 'gee:units': 'kg/kg' + }, + { + name: '500_specific_humidity', + description: 'Specific humidity at 500 hPa', + 'gee:units': 'kg/kg' + }, + { + name: '600_specific_humidity', + description: 'Specific humidity at 600 hPa', + 'gee:units': 'kg/kg' + }, + { + name: '700_specific_humidity', + description: 'Specific humidity at 700 hPa', + 'gee:units': 'kg/kg' + }, + { + name: '850_specific_humidity', + description: 'Specific humidity at 850 hPa', + 'gee:units': 'kg/kg' + }, + { + name: '925_specific_humidity', + description: 'Specific humidity at 925 hPa', + 'gee:units': 'kg/kg' + }, + { + name: '1000_specific_humidity', + description: 'Specific humidity at 1000 hPa', + 'gee:units': 'kg/kg' + }, + { + name: '50_temperature', + description: 'Temperature at 50 hPa', + 'gee:units': units.kelvin + }, + { + name: '100_temperature', + description: 'Temperature at 100 hPa', + 'gee:units': units.kelvin + }, + { + name: '150_temperature', + description: 'Temperature at 150 hPa', + 'gee:units': units.kelvin + }, + { + name: '200_temperature', + description: 'Temperature at 200 hPa', + 'gee:units': units.kelvin + }, + { + name: '250_temperature', + description: 'Temperature at 250 hPa', + 'gee:units': units.kelvin + }, + { + name: '300_temperature', + description: 'Temperature at 300 hPa', + 'gee:units': units.kelvin + }, + { + name: '400_temperature', + description: 'Temperature at 400 hPa', + 'gee:units': units.kelvin + }, + { + name: '500_temperature', + description: 'Temperature at 500 hPa', + 'gee:units': units.kelvin + }, + { + name: '600_temperature', + description: 'Temperature at 600 hPa', + 'gee:units': units.kelvin + }, + { + name: '700_temperature', + description: 'Temperature at 700 hPa', + 'gee:units': units.kelvin + }, + { + name: '850_temperature', + description: 'Temperature at 850 hPa', + 'gee:units': units.kelvin + }, + { + name: '925_temperature', + description: 'Temperature at 925 hPa', + 'gee:units': units.kelvin + }, + { + name: '1000_temperature', + description: 'Temperature at 1000 hPa', + 'gee:units': units.kelvin + }, + { + name: '50_u_component_of_wind', + description: 'U wind component at 50 hPa', + 'gee:units': units.velocity_si + }, + { + name: '100_u_component_of_wind', + description: 'U wind component at 100 hPa', + 'gee:units': units.velocity_si + }, + { + name: '150_u_component_of_wind', + description: 'U wind component at 150 hPa', + 'gee:units': units.velocity_si + }, + { + name: '200_u_component_of_wind', + description: 'U wind component at 200 hPa', + 'gee:units': units.velocity_si + }, + { + name: '250_u_component_of_wind', + description: 'U wind component at 250 hPa', + 'gee:units': units.velocity_si + }, + { + name: '300_u_component_of_wind', + description: 'U wind component at 300 hPa', + 'gee:units': units.velocity_si + }, + { + name: '400_u_component_of_wind', + description: 'U wind component at 400 hPa', + 'gee:units': units.velocity_si + }, + { + name: '500_u_component_of_wind', + description: 'U wind component at 500 hPa', + 'gee:units': units.velocity_si + }, + { + name: '600_u_component_of_wind', + description: 'U wind component at 600 hPa', + 'gee:units': units.velocity_si + }, + { + name: '700_u_component_of_wind', + description: 'U wind component at 700 hPa', + 'gee:units': units.velocity_si + }, + { + name: '850_u_component_of_wind', + description: 'U wind component at 850 hPa', + 'gee:units': units.velocity_si + }, + { + name: '925_u_component_of_wind', + description: 'U wind component at 925 hPa', + 'gee:units': units.velocity_si + }, + { + name: '1000_u_component_of_wind', + description: 'U wind component at 1000 hPa', + 'gee:units': units.velocity_si + }, + { + name: '50_v_component_of_wind', + description: 'V wind component at 50 hPa', + 'gee:units': units.velocity_si + }, + { + name: '100_v_component_of_wind', + description: 'V wind component at 100 hPa', + 'gee:units': units.velocity_si + }, + { + name: '150_v_component_of_wind', + description: 'V wind component at 150 hPa', + 'gee:units': units.velocity_si + }, + { + name: '200_v_component_of_wind', + description: 'V wind component at 200 hPa', + 'gee:units': units.velocity_si + }, + { + name: '250_v_component_of_wind', + description: 'V wind component at 250 hPa', + 'gee:units': units.velocity_si + }, + { + name: '300_v_component_of_wind', + description: 'V wind component at 300 hPa', + 'gee:units': units.velocity_si + }, + { + name: '400_v_component_of_wind', + description: 'V wind component at 400 hPa', + 'gee:units': units.velocity_si + }, + { + name: '500_v_component_of_wind', + description: 'V wind component at 500 hPa', + 'gee:units': units.velocity_si + }, + { + name: '600_v_component_of_wind', + description: 'V wind component at 600 hPa', + 'gee:units': units.velocity_si + }, + { + name: '700_v_component_of_wind', + description: 'V wind component at 700 hPa', + 'gee:units': units.velocity_si + }, + { + name: '850_v_component_of_wind', + description: 'V wind component at 850 hPa', + 'gee:units': units.velocity_si + }, + { + name: '925_v_component_of_wind', + description: 'V wind component at 925 hPa', + 'gee:units': units.velocity_si + }, + { + name: '1000_v_component_of_wind', + description: 'V wind component at 1000 hPa', + 'gee:units': units.velocity_si + }, + { + name: '50_vertical_velocity', + description: 'Vertical velocity at 50 hPa', + 'gee:units': 'Pa/s' + }, + { + name: '100_vertical_velocity', + description: 'Vertical velocity at 100 hPa', + 'gee:units': 'Pa/s' + }, + { + name: '150_vertical_velocity', + description: 'Vertical velocity at 150 hPa', + 'gee:units': 'Pa/s' + }, + { + name: '200_vertical_velocity', + description: 'Vertical velocity at 200 hPa', + 'gee:units': 'Pa/s' + }, + { + name: '250_vertical_velocity', + description: 'Vertical velocity at 250 hPa', + 'gee:units': 'Pa/s' + }, + { + name: '300_vertical_velocity', + description: 'Vertical velocity at 300 hPa', + 'gee:units': 'Pa/s' + }, + { + name: '400_vertical_velocity', + description: 'Vertical velocity at 400 hPa', + 'gee:units': 'Pa/s' + }, + { + name: '500_vertical_velocity', + description: 'Vertical velocity at 500 hPa', + 'gee:units': 'Pa/s' + }, + { + name: '600_vertical_velocity', + description: 'Vertical velocity at 600 hPa', + 'gee:units': 'Pa/s' + }, + { + name: '700_vertical_velocity', + description: 'Vertical velocity at 700 hPa', + 'gee:units': 'Pa/s' + }, + { + name: '850_vertical_velocity', + description: 'Vertical velocity at 850 hPa', + 'gee:units': 'Pa/s' + }, + { + name: '925_vertical_velocity', + description: 'Vertical velocity at 925 hPa', + 'gee:units': 'Pa/s' + }, + { + name: '1000_vertical_velocity', + description: 'Vertical velocity at 1000 hPa', + 'gee:units': 'Pa/s' + } + ], + 'gee:visualizations': [ + { + display_name: 'Temperature 2m', + lookat: { + lat: 52.48, + lon: 71.72, + zoom: 1, + }, + image_visualization: { + band_vis: { + min: [ + 220 + ], + max: [ + 350, + ], + palette: ['darkblue', 'blue', 'cyan', 'green', 'yellow', 'orange', 'red', 'darkred'], + bands: [ + '2m_temperature', + ], + }, + }, + }, + ], + }, + 'sci:citation': ||| + For Real-Time Experimental Data, please see the applicable Terms of Use + for citation requirements. + + If you disclose findings arising from the Historical Data, you must cite + "© 2024 DeepMind Technologies Limited's machine learning models used to + create the experimental data made available at + [https://developers.google.com/earth-engine/datasets/catalog/projects_gcp-public-data-weathernext_assets_126478713_1_0](https://developers.google.com/earth-engine/datasets/catalog/projects_gcp-public-data-weathernext_assets_126478713_1_0) + under CC BY 4.0 licence terms. This data is intended for experimental + modelling only and is not intended, validated, or approved for real + world use." + |||, + 'gee:unusual_terms_of_use': true, + 'gee:terms_of_use': ||| + The Historic Experimental Data is licensed under the Creative Commons + Attribution International License, Version 4.0 (CC BY 4.0). + + The Real-Time Experimental Data is made available under the following + GDM Real-Time Weather Forecasting Experimental Data [Terms of Use](https://storage.googleapis.com/weathernext-public/terms-of-use.pdf). + + **Third-party materials** + + Use of the third-party materials referred to in the Acknowledgements + section may be governed by separate terms and conditions or license + provisions. Your use of the third-party materials is subject to any such + terms and you should check that you can comply with any applicable + restrictions or terms and conditions before use. + |||, +} diff --git a/checker/tree/keywords.py b/checker/tree/keywords.py index 1cfe0db3f..ead9cd602 100644 --- a/checker/tree/keywords.py +++ b/checker/tree/keywords.py @@ -280,7 +280,6 @@ 'warmest', 'watercontent', 'water_temp', - 'weathernext', 'wetness', 'wettest', 'whoi', diff --git a/examples/gcp-public-data-weathernext/projects_gcp-public-data-weathernext_assets_126478713_1_0.js b/examples/gcp-public-data-weathernext/projects_gcp-public-data-weathernext_assets_126478713_1_0.js new file mode 100644 index 000000000..7121fb1bf --- /dev/null +++ b/examples/gcp-public-data-weathernext/projects_gcp-public-data-weathernext_assets_126478713_1_0.js @@ -0,0 +1,17 @@ +var dataset = + ee.ImageCollection( + 'projects/gcp-public-data-weathernext/assets/126478713_1_0') + .filter(ee.Filter.date('2020-10-01T06:00:00Z', '2020-10-01T06:01:00Z')) + .filter(ee.Filter.eq('ensemble_member', '8')) + .filter(ee.Filter.eq('forecast_hour', 12)); +var temperature = dataset.select('2m_temperature'); + +var visParams = { + min: 220, + max: 350, + palette: [ + 'darkblue', 'blue', 'cyan', 'green', 'yellow', 'orange', 'red', 'darkred' + ] +}; + +Map.addLayer(temperature, visParams, '2m Temperature'); diff --git a/examples/gcp-public-data-weathernext/projects_gcp-public-data-weathernext_assets_126478713_1_0_preview.js b/examples/gcp-public-data-weathernext/projects_gcp-public-data-weathernext_assets_126478713_1_0_preview.js new file mode 100644 index 000000000..ed56ae479 --- /dev/null +++ b/examples/gcp-public-data-weathernext/projects_gcp-public-data-weathernext_assets_126478713_1_0_preview.js @@ -0,0 +1,43 @@ +var dataset = + ee.ImageCollection( + 'projects/gcp-public-data-weathernext/assets/126478713_1_0') + .filter(ee.Filter.date('2020-10-01T06:00:00Z', '2020-10-01T06:01:00Z')) + .filter(ee.Filter.eq('ensemble_member', '8')) + .filter(ee.Filter.eq('forecast_hour', 12)); +var temperature = dataset.select('2m_temperature').first(); + +var lon = -80; +var lat = 10; + +Map.setCenter(lon, lat, 2); + +// Degrees in EPSG:4326 +var lon_delta = 25; +var lat_delta = 25; +// 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); + +var imageVis = { + min: 220, + max: 350, + palette: [ + 'darkblue', 'blue', 'cyan', 'green', 'yellow', 'orange', 'red', 'darkred' + ] +}; + +var imageVisualized = temperature.visualize(imageVis); + +Map.addLayer(imageVisualized, null, '2m Temperature'); + +var imageParams = { + dimensions: [pixels, pixels], + region: areaOfInterest, + crs: 'EPSG:4326', + format: 'png', +}; + +print(ui.Thumbnail({image: imageVisualized, params: imageParams})); \ No newline at end of file