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
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -134,4 +134,7 @@ dmypy.json
# Sphinx
/doc/_build/

/tmp/
/tmp/

# venv
uv.lock
1,727 changes: 1,727 additions & 0 deletions notebooks/CMEMS_Scatterometry_Data.ipynb

Large diffs are not rendered by default.

323 changes: 323 additions & 0 deletions notebooks/CMEMS_Scatterometry_Download_Lingling_2019.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,323 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "3f6145cd",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import geopandas as gpd\n",
"from scipy.interpolate import griddata\n",
"from scipy.spatial import cKDTree\n",
"\n",
"from watobs import CMEMSSatObsRepository\n",
"\n",
"import copernicusmarine"
]
},
{
"cell_type": "markdown",
"id": "b6eea2b5",
"metadata": {},
"source": [
"# First time users\n",
"First time users of the Copernicus Marine API will need to create an account at https://marine.copernicus.eu/ and generate an API key.\n",
"\n",
"Below you call the login function to authenticate your credentials. You only have to do this the first time you use the API on a PC.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "46716647",
"metadata": {},
"outputs": [],
"source": [
"if not CMEMSSatObsRepository.validate_login():\n",
" copernicusmarine.login()"
]
},
{
"cell_type": "markdown",
"id": "8a6dcfd9",
"metadata": {},
"source": [
"# Example using CMEMS scatterometry data for Typhoon Lingling 2019"
]
},
{
"cell_type": "markdown",
"id": "43bbb12c",
"metadata": {},
"source": [
"## Scatterometer Wind\n",
"- Looking through the CMEMS Marine Data Store to find dataset: https://data.marine.copernicus.eu/products?q=wind_speed&pk_vid=bfd50509683fc0421764148768aca348"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "1300f258",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loading CMEMS dataset id: cmems_obs-wind_glo_phy_my_l3-metopa-ascat-des-0.125deg_P1D-i\n",
"\tDone!\n",
"Downloading dataset 1 of 1: cmems_obs-wind_glo_phy_my_l3-metopa-ascat-des-0.125deg_P1D-i\n",
"-- Downloading subset of cmems_obs-wind_glo_phy_my_l3-metopa-ascat-des-0.125deg_P1D-i\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO - 2025-12-09T14:22:02Z - Selected dataset version: \"202311\"\n",
"INFO - 2025-12-09T14:22:02Z - Selected dataset part: \"default\"\n",
"INFO - 2025-12-09T14:22:04Z - Starting download. Please wait...\n",
"INFO:copernicusmarine:Starting download. Please wait...\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "6a92edcaebe544208a1060aaa2ddb4a1",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/270 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO - 2025-12-09T14:26:08Z - Successfully downloaded to c:\\Users\\raiw\\Desktop\\cloned_repos\\watobs\\notebooks\\.cmems_g387ovn_\\cmems_obs-wind_glo_phy_my_l3-metopa-ascat-des-0.125deg_P1D-i_multi-vars_105.06E-144.94E_4.94S-39.94N_2019-09-01-2019-09-30.nc\n",
"INFO:copernicusmarine:Successfully downloaded to c:\\Users\\raiw\\Desktop\\cloned_repos\\watobs\\notebooks\\.cmems_g387ovn_\\cmems_obs-wind_glo_phy_my_l3-metopa-ascat-des-0.125deg_P1D-i_multi-vars_105.06E-144.94E_4.94S-39.94N_2019-09-01-2019-09-30.nc\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- Download successful.\n",
"Formatting data to DataFrame...\n",
"\tDone!\n"
]
}
],
"source": [
"repo = CMEMSSatObsRepository(dataset_id=\"cmems_obs-wind_glo_phy_my_l3-metopa-ascat-des-0.125deg_P1D-i\")\n",
"\n",
"start_time=\"2019-09-01\"\n",
"end_time=\"2019-09-30\"\n",
"\n",
"lon_min = 105\n",
"lat_min = -5\n",
"lon_max = 145\n",
"lat_max = 40\n",
"\n",
"area = f\"bbox={lon_min},{lat_min},{lon_max},{lat_max}\"\n",
"\n",
"data = repo.get_satobs_data(\n",
" start_time=start_time,\n",
" end_time=end_time,\n",
" area=area,\n",
")\n",
"\n",
"df = data.df\n",
"wind_df = df[(df.index > pd.to_datetime('2019-09-04 01:22:00')) & (df.index < pd.to_datetime('2019-09-04 01:29:00')) & (df.longitude > 115)]\n",
"wind_df.to_csv(r'..\\tests\\data\\UV_Lingling_2019.csv')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "49ddf76d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loading CMEMS dataset id: cnes_obs-wave_glo_phy-spc_nrt_cfo-l3_PT10S\n",
"\tDone!\n",
"No time coordinates found in part 'default'.\n",
"Downloading dataset 1 of 1: cnes_obs-wave_glo_phy-spc_nrt_cfo-l3_PT10S\n",
"No time coordinates found in part 'default'.\n",
"Warning: Dataset has no min/max date info; proceeding with given time range.\n",
"-- Downloading subset of cnes_obs-wave_glo_phy-spc_nrt_cfo-l3_PT10S\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO - 2025-12-09T14:12:20Z - Selected dataset version: \"202406\"\n",
"INFO:copernicusmarine:Selected dataset version: \"202406\"\n",
"INFO - 2025-12-09T14:12:20Z - Selected dataset part: \"default\"\n",
"INFO:copernicusmarine:Selected dataset part: \"default\"\n",
"WARNING:watobs.altimetry:Subset download failed: No service available for dataset with command subset. Falling back to full dataset download.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- Downloading September 2019\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO - 2025-12-09T14:12:20Z - Selected dataset version: \"202406\"\n",
"INFO:copernicusmarine:Selected dataset version: \"202406\"\n",
"INFO - 2025-12-09T14:12:20Z - Selected dataset part: \"default\"\n",
"INFO:copernicusmarine:Selected dataset part: \"default\"\n",
"INFO - 2025-12-09T14:12:21Z - Listing files on remote server...\n",
"INFO:copernicusmarine:Listing files on remote server...\n",
"45it [00:14, 3.11it/s]\n",
"Downloading files: 100%|██████████| 544/544 [03:53<00:00, 2.33it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- Download successful.\n",
"Formatting data to DataFrame...\n",
"Merging files for 2019\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:watobs.altimetry:Empty data from cnes_obs-wave_glo_phy-spc_nrt_cfo-l3_PT10S_20190904T024123Z_20190904T025251Z_P20240516T142100Z.nc, skipping\n",
"WARNING:watobs.altimetry:Empty data from cnes_obs-wave_glo_phy-spc_nrt_cfo-l3_PT10S_20190905T150757Z_20190905T152217Z_P20240516T142100Z.nc, skipping\n",
"WARNING:watobs.altimetry:Empty data from cnes_obs-wave_glo_phy-spc_nrt_cfo-l3_PT10S_20190907T143917Z_20190907T145306Z_P20240516T142100Z.nc, skipping\n",
"WARNING:watobs.altimetry:Empty data from cnes_obs-wave_glo_phy-spc_nrt_cfo-l3_PT10S_20190909T141929Z_20190909T142358Z_P20240516T142100Z.nc, skipping\n",
"WARNING:watobs.altimetry:Empty data from cnes_obs-wave_glo_phy-spc_nrt_cfo-l3_PT10S_20190911T151522Z_20190911T152950Z_P20240516T142100Z.nc, skipping\n",
"WARNING:watobs.altimetry:Empty data from cnes_obs-wave_glo_phy-spc_nrt_cfo-l3_PT10S_20190914T143221Z_20190914T144604Z_P20240516T142100Z.nc, skipping\n",
"WARNING:watobs.altimetry:Empty data from cnes_obs-wave_glo_phy-spc_nrt_cfo-l3_PT10S_20190922T141956Z_20190922T142424Z_P20240516T142100Z.nc, skipping\n",
"WARNING:watobs.altimetry:Empty data from cnes_obs-wave_glo_phy-spc_nrt_cfo-l3_PT10S_20190925T150126Z_20190925T151539Z_P20240516T142100Z.nc, skipping\n",
"WARNING:watobs.altimetry:Empty data from cnes_obs-wave_glo_phy-spc_nrt_cfo-l3_PT10S_20190930T024217Z_20190930T025344Z_P20240516T142100Z.nc, skipping\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\tDone!\n",
"No time coordinates found in part 'default'.\n"
]
}
],
"source": [
"repo = CMEMSSatObsRepository(dataset_id=\"cnes_obs-wave_glo_phy-spc_nrt_cfo-l3_PT10S\")\n",
"\n",
"data = repo.get_satobs_data(\n",
" start_time=start_time,\n",
" end_time=end_time,\n",
" area=area,\n",
")\n",
"\n",
"df = data.df\n",
"spec_df = df[(df.index > pd.to_datetime('2019-09-04 00:00:00')) & (df.index < pd.to_datetime('2019-09-04 23:59:00'))]\n",
"spec_df.to_csv(r'..\\tests\\data\\Spec_Lingling_2019.csv')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "31d8b728",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loading CMEMS dataset id: cmems_obs-wave_glo_phy-swh_my_cfo-l3_PT1S\n",
"\tDone!\n",
"Downloading dataset 1 of 1: cmems_obs-wave_glo_phy-swh_my_cfo-l3_PT1S\n",
"-- Downloading subset of cmems_obs-wave_glo_phy-swh_my_cfo-l3_PT1S\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO - 2025-12-09T14:26:45Z - Selected dataset version: \"202112\"\n",
"INFO:copernicusmarine:Selected dataset version: \"202112\"\n",
"INFO - 2025-12-09T14:26:45Z - Selected dataset part: \"default\"\n",
"INFO:copernicusmarine:Selected dataset part: \"default\"\n",
"Downloading files: 100%|██████████| 102/102 [00:08<00:00, 11.63it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- Download successful.\n",
"Formatting data to DataFrame...\n",
"<_io.BufferedReader name='c:\\\\Users\\\\raiw\\\\Desktop\\\\cloned_repos\\\\watobs\\\\notebooks\\\\.cmems_jr1nzg6z\\\\cmems_obs-wave_glo_phy-swh_my_cfo-l3_PT1S_VAVH-VAVH_UNFILTERED_105.00E-145.00E_5.00S-40.00N_2019-09-01-2019-09-30.csv'>\n",
"\tDone!\n"
]
}
],
"source": [
"repo = CMEMSSatObsRepository(dataset_id=\"cmems_obs-wave_glo_phy-swh_my_cfo-l3_PT1S\")\n",
"\n",
"data = repo.get_satobs_data(\n",
" start_time=start_time,\n",
" end_time=end_time,\n",
" area=area,\n",
")\n",
"\n",
"df = data.df\n",
"wave_df = df[(df.index > pd.to_datetime('2019-09-04 00:00:00')) & (df.index < pd.to_datetime('2019-09-04 23:59:00'))]\n",
"wave_df.to_csv(r'..\\tests\\data\\Hm0_Lingling_2019.csv')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e60df714",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "owe_env_dev",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Loading