{ "cells": [ { "cell_type": "markdown", "id": "eecd1d2c-6b93-428e-8a60-5800274da618", "metadata": {}, "source": [ "## ESA CCI Toolbox Vector Data Access\n", "\n", "The ESA CCI Toolbox also provides access to data that is not provided on a structured grid. This data is provided in the form of geopandas geodataframes rather than xarray datasets.\n", "\n", "To run this Notebook, make sure the ESA CCI Toolbox is setup correctly." ] }, { "cell_type": "markdown", "id": "cb14d9ac-8491-410d-a836-c554dae785c7", "metadata": {}, "source": [ "For this notebook, we start as before, by opening the standard `esa-cci` data store." ] }, { "cell_type": "code", "execution_count": 1, "id": "c8835695-30f4-49aa-9a83-bd83f66db59e", "metadata": { "tags": [] }, "outputs": [], "source": [ "from xcube.core.store import new_data_store\n", "\n", "cci_store = new_data_store('esa-cci')" ] }, { "cell_type": "markdown", "id": "50f9dd64-758d-4c2e-8793-d34b7e2e3bb2", "metadata": {}, "source": [ "The data in question are AEROSOL, GHG, ICESHEETS, RIVER DISCHARGE (RD), SEAICE, and SEALEVEL datasets in `satellite-orbit-frequency`. Let's search for ICESHEETS datasets." ] }, { "cell_type": "code", "execution_count": 2, "id": "07789554-f0be-47b0-941b-ec4c8825134e", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "['esacci.ICESHEETS.unspecified.Unspecified.CFL.multi-sensor.multi-platform.UNSPECIFIED.v3-0.greenland',\n", " 'esacci.ICESHEETS.unspecified.Unspecified.GLL.multi-sensor.multi-platform.UNSPECIFIED.v1-3.greenland']" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "descriptors = cci_store.search_data(\n", " data_type=\"geodataframe\",\n", " cci_attrs=dict(\n", " ecv=\"ICESHEETS\"\n", " )\n", ")\n", "[descriptor.data_id for descriptor in descriptors]" ] }, { "cell_type": "markdown", "id": "e173a52c-e49c-4d8a-9980-7a56191fe853", "metadata": {}, "source": [ "We have a closer look at the first one." ] }, { "cell_type": "code", "execution_count": 3, "id": "053694e7-f5e8-439e-838a-cee50bbc9573", "metadata": { "tags": [] }, "outputs": [ { "data": { "application/json": { "bbox": [ -80, 60, -10, 90 ], "crs": "WGS84", "data_id": "esacci.ICESHEETS.unspecified.Unspecified.CFL.multi-sensor.multi-platform.UNSPECIFIED.v3-0.greenland", "data_type": "geodataframe", "feature_schema": { "additionalProperties": false, "properties": { "3d_desc": { "properties": {}, "type": "object" }, "ID": { "properties": {}, "type": "object" }, "RC_ID": { "properties": {}, "type": "object" }, "acq_time": { "properties": {}, "type": "object" }, "analy_time": { "properties": {}, "type": "object" }, "category": { "properties": {}, "type": "object" }, "data_src": { "properties": {}, "type": "object" }, "geometry": { "pattern": "POINT(* *)", "type": "string" }, "glob_unc_x": { "properties": {}, "type": "object" }, "glob_unc_y": { "properties": {}, "type": "object" }, "imgctrlat": { "properties": {}, "type": "object" }, "imgctrlon": { "properties": {}, "type": "object" }, "inst_name": { "properties": {}, "type": "object" }, "label": { "properties": {}, "type": "object" }, "loc_unc_x": { "properties": {}, "type": "object" }, "loc_unc_y": { "properties": {}, "type": "object" }, "orig_id": { "properties": {}, "type": "object" }, "orthocorre": { "properties": {}, "type": "object" }, "pro_mat": { "properties": {}, "type": "object" }, "proc_desc": { "properties": {}, "type": "object" }, "time": { "format": "date", "type": "string" }, "type": { "properties": {}, "type": "object" } }, "type": "object" }, "open_params_schema": { "additionalProperties": false, "properties": { "bbox": { "items": [ { "maximum": -10, "minimum": -80, "type": "number" }, { "maximum": 90, "minimum": 60, "type": "number" }, { "maximum": -10, "minimum": -80, "type": "number" }, { "maximum": 90, "minimum": 60, "type": "number" } ], "type": "array" }, "time_range": { "items": [ { "format": "date", "maxDate": "2020-12-31", "minDate": "2014-10-01", "type": "string" }, { "format": "date", "maxDate": "2020-12-31", "minDate": "2014-10-01", "type": "string" } ], "type": "array" }, "variable_names": { "items": { "enum": [ "RC_ID", "analy_time", "data_src", "proc_desc", "3d_desc", "inst_name", "orig_id", "acq_time", "imgctrlon", "imgctrlat", "category", "ID", "type", "loc_unc_x", "loc_unc_y", "glob_unc_x", "glob_unc_y", "label", "orthocorre", "pro_mat" ], "type": "string" }, "type": "array" } }, "type": "object" }, "time_range": [ "2014-10-01", "2020-12-31" ] }, "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "descriptors[0]" ] }, { "cell_type": "markdown", "id": "53507a23-45cb-4742-b9d8-90cd2b748984", "metadata": {}, "source": [ "We can now open the dataframe, just like we would open any other dataset. For dataframes, all data is read in immediately when displaying frame. As we want to avoid long waiting times, we ask for a temporal subset by applying a time range." ] }, { "cell_type": "code", "execution_count": 4, "id": "e9b82678-cfa9-4945-ae3f-d05a24e003b6", "metadata": {}, "outputs": [], "source": [ "icesheets_df = cci_store.open_data(\n", " \"esacci.ICESHEETS.unspecified.Unspecified.CFL.multi-sensor.multi-platform.UNSPECIFIED.v3-0.greenland\",\n", " time_range=(\"2014-10-01\", \"2014-10-15\")\n", ")" ] }, { "cell_type": "markdown", "id": "fdd7df03-eeba-4d67-b13a-0478a9b77169", "metadata": {}, "source": [ "Now we may view the actual frame." ] }, { "cell_type": "code", "execution_count": 5, "id": "a5487bb4-558e-49d8-ad42-2bdf8623672b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometryRC_IDanaly_timedata_srcproc_desc3d_descinst_nameorig_idacq_timeimgctrlon...IDtypeloc_unc_xloc_unc_yglob_unc_xglob_unc_ylabelorthocorrepro_mattime
0LINESTRING (-52.60689 72.05466, -52.6051 72.05...5142016-11-07LANDSATmanual delineation - assembling to shapefilesLevel 1 T - Standard Terrain CorrectionOLILC80130092014276LGN002014-10-03 15:24:43-52.371771...G307495E72082Nm60.060.012.012.0trmyOW2014-10-03T00:00:00
1LINESTRING (-49.7893 69.22284, -49.78914 69.22...5142016-11-07LANDSATmanual delineation - assembling to shapefilesLevel 1 T - Standard Terrain CorrectionOLILC80090112014280LGN002014-10-07 15:00:48-49.456945...G310846E69083Nm60.060.012.012.0trmyIM2014-10-07T00:00:00
2LINESTRING (-49.7893 69.22284, -49.78914 69.22...5142016-11-07LANDSATmanual delineation - assembling to shapefilesLevel 1 T - Standard Terrain CorrectionOLILC80090112014280LGN002014-10-07 15:00:48-49.456945...G310846E69083Nm60.060.012.012.0trmyIM2014-10-07T00:00:00
3LINESTRING (-52.61219 72.054, -52.61169 72.054...5142016-05-04SENTINEL-1A IW SLCSLC - geocoding - manual delineation - assembl...DEM: GEOID96, Software: ESP 2.1SAR-Cs1a-iw2-slc-hh-20141011t204736-20141011t204801...2014-10-11 20:47:47-52.371800...G307495E72082Nm120.0120.060.060.0trmyOW2014-10-11T00:00:00
4LINESTRING (-52.61219 72.054, -52.61169 72.054...5142016-05-04SENTINEL-1A IW SLCSLC - geocoding - manual delineation - assembl...DEM: GEOID96, Software: ESP 2.1SAR-Cs1a-iw2-slc-hh-20141011t204736-20141011t204801...2014-10-11 20:47:47-52.371800...G307495E72082Nm120.0120.060.060.0trmyOW2014-10-11T00:00:00
5LINESTRING (-52.61219 72.054, -52.61169 72.054...5142016-05-04SENTINEL-1A IW SLCSLC - geocoding - manual delineation - assembl...DEM: GEOID96, Software: ESP 2.1SAR-Cs1a-iw2-slc-hh-20141011t204736-20141011t204801...2014-10-11 20:47:47-52.371800...G307495E72082Nm120.0120.060.060.0trmyOW2014-10-11T00:00:00
6LINESTRING (-52.61219 72.054, -52.61169 72.054...5142016-05-04SENTINEL-1A IW SLCSLC - geocoding - manual delineation - assembl...DEM: GEOID96, Software: ESP 2.1SAR-Cs1a-iw2-slc-hh-20141011t204736-20141011t204801...2014-10-11 20:47:47-52.371800...G307495E72082Nm120.0120.060.060.0trmyOW2014-10-11T00:00:00
7LINESTRING (-52.61219 72.054, -52.61169 72.054...5142016-05-04SENTINEL-1A IW SLCSLC - geocoding - manual delineation - assembl...DEM: GEOID96, Software: ESP 2.1SAR-Cs1a-iw2-slc-hh-20141011t204736-20141011t204801...2014-10-11 20:47:47-52.371800...G307495E72082Nm120.0120.060.060.0trmyOW2014-10-11T00:00:00
8LINESTRING (-52.61219 72.054, -52.61169 72.054...5142016-05-04SENTINEL-1A IW SLCSLC - geocoding - manual delineation - assembl...DEM: GEOID96, Software: ESP 2.1SAR-Cs1a-iw2-slc-hh-20141011t204736-20141011t204801...2014-10-11 20:47:47-52.371800...G307495E72082Nm120.0120.060.060.0trmyOW2014-10-11T00:00:00
9LINESTRING (-52.61219 72.054, -52.61169 72.054...5142016-05-04SENTINEL-1A IW SLCSLC - geocoding - manual delineation - assembl...DEM: GEOID96, Software: ESP 2.1SAR-Cs1a-iw2-slc-hh-20141011t204736-20141011t204801...2014-10-11 20:47:47-52.371800...G307495E72082Nm120.0120.060.060.0trmyOW2014-10-11T00:00:00
\n", "

10 rows × 22 columns

\n", "
" ], "text/plain": [ " geometry RC_ID analy_time \\\n", "0 LINESTRING (-52.60689 72.05466, -52.6051 72.05... 514 2016-11-07 \n", "1 LINESTRING (-49.7893 69.22284, -49.78914 69.22... 514 2016-11-07 \n", "2 LINESTRING (-49.7893 69.22284, -49.78914 69.22... 514 2016-11-07 \n", "3 LINESTRING (-52.61219 72.054, -52.61169 72.054... 514 2016-05-04 \n", "4 LINESTRING (-52.61219 72.054, -52.61169 72.054... 514 2016-05-04 \n", "5 LINESTRING (-52.61219 72.054, -52.61169 72.054... 514 2016-05-04 \n", "6 LINESTRING (-52.61219 72.054, -52.61169 72.054... 514 2016-05-04 \n", "7 LINESTRING (-52.61219 72.054, -52.61169 72.054... 514 2016-05-04 \n", "8 LINESTRING (-52.61219 72.054, -52.61169 72.054... 514 2016-05-04 \n", "9 LINESTRING (-52.61219 72.054, -52.61169 72.054... 514 2016-05-04 \n", "\n", " data_src proc_desc \\\n", "0 LANDSAT manual delineation - assembling to shapefiles \n", "1 LANDSAT manual delineation - assembling to shapefiles \n", "2 LANDSAT manual delineation - assembling to shapefiles \n", "3 SENTINEL-1A IW SLC SLC - geocoding - manual delineation - assembl... \n", "4 SENTINEL-1A IW SLC SLC - geocoding - manual delineation - assembl... \n", "5 SENTINEL-1A IW SLC SLC - geocoding - manual delineation - assembl... \n", "6 SENTINEL-1A IW SLC SLC - geocoding - manual delineation - assembl... \n", "7 SENTINEL-1A IW SLC SLC - geocoding - manual delineation - assembl... \n", "8 SENTINEL-1A IW SLC SLC - geocoding - manual delineation - assembl... \n", "9 SENTINEL-1A IW SLC SLC - geocoding - manual delineation - assembl... \n", "\n", " 3d_desc inst_name \\\n", "0 Level 1 T - Standard Terrain Correction OLI \n", "1 Level 1 T - Standard Terrain Correction OLI \n", "2 Level 1 T - Standard Terrain Correction OLI \n", "3 DEM: GEOID96, Software: ESP 2.1 SAR-C \n", "4 DEM: GEOID96, Software: ESP 2.1 SAR-C \n", "5 DEM: GEOID96, Software: ESP 2.1 SAR-C \n", "6 DEM: GEOID96, Software: ESP 2.1 SAR-C \n", "7 DEM: GEOID96, Software: ESP 2.1 SAR-C \n", "8 DEM: GEOID96, Software: ESP 2.1 SAR-C \n", "9 DEM: GEOID96, Software: ESP 2.1 SAR-C \n", "\n", " orig_id acq_time \\\n", "0 LC80130092014276LGN00 2014-10-03 15:24:43 \n", "1 LC80090112014280LGN00 2014-10-07 15:00:48 \n", "2 LC80090112014280LGN00 2014-10-07 15:00:48 \n", "3 s1a-iw2-slc-hh-20141011t204736-20141011t204801... 2014-10-11 20:47:47 \n", "4 s1a-iw2-slc-hh-20141011t204736-20141011t204801... 2014-10-11 20:47:47 \n", "5 s1a-iw2-slc-hh-20141011t204736-20141011t204801... 2014-10-11 20:47:47 \n", "6 s1a-iw2-slc-hh-20141011t204736-20141011t204801... 2014-10-11 20:47:47 \n", "7 s1a-iw2-slc-hh-20141011t204736-20141011t204801... 2014-10-11 20:47:47 \n", "8 s1a-iw2-slc-hh-20141011t204736-20141011t204801... 2014-10-11 20:47:47 \n", "9 s1a-iw2-slc-hh-20141011t204736-20141011t204801... 2014-10-11 20:47:47 \n", "\n", " imgctrlon ... ID type loc_unc_x loc_unc_y glob_unc_x \\\n", "0 -52.371771 ... G307495E72082N m 60.0 60.0 12.0 \n", "1 -49.456945 ... G310846E69083N m 60.0 60.0 12.0 \n", "2 -49.456945 ... G310846E69083N m 60.0 60.0 12.0 \n", "3 -52.371800 ... G307495E72082N m 120.0 120.0 60.0 \n", "4 -52.371800 ... G307495E72082N m 120.0 120.0 60.0 \n", "5 -52.371800 ... G307495E72082N m 120.0 120.0 60.0 \n", "6 -52.371800 ... G307495E72082N m 120.0 120.0 60.0 \n", "7 -52.371800 ... G307495E72082N m 120.0 120.0 60.0 \n", "8 -52.371800 ... G307495E72082N m 120.0 120.0 60.0 \n", "9 -52.371800 ... G307495E72082N m 120.0 120.0 60.0 \n", "\n", " glob_unc_y label orthocorre pro_mat time \n", "0 12.0 trm y OW 2014-10-03T00:00:00 \n", "1 12.0 trm y IM 2014-10-07T00:00:00 \n", "2 12.0 trm y IM 2014-10-07T00:00:00 \n", "3 60.0 trm y OW 2014-10-11T00:00:00 \n", "4 60.0 trm y OW 2014-10-11T00:00:00 \n", "5 60.0 trm y OW 2014-10-11T00:00:00 \n", "6 60.0 trm y OW 2014-10-11T00:00:00 \n", "7 60.0 trm y OW 2014-10-11T00:00:00 \n", "8 60.0 trm y OW 2014-10-11T00:00:00 \n", "9 60.0 trm y OW 2014-10-11T00:00:00 \n", "\n", "[10 rows x 22 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "icesheets_df" ] }, { "cell_type": "markdown", "id": "7eea43f0-6007-49d6-af7d-34a43b6e8252", "metadata": {}, "source": [ "If you now plot the dataframe, you will see that all loaded entries are included." ] }, { "cell_type": "code", "execution_count": 6, "id": "fea96d48-9312-4b6a-9cdd-3469a6932569", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "icesheets_df.plot()" ] }, { "cell_type": "markdown", "id": "35637974-26f3-4a28-beef-40bd5bcd7325", "metadata": {}, "source": [ "### Reading River Discharge Data" ] }, { "cell_type": "markdown", "id": "d140ad0b-11a5-46e1-a789-6780270e3d4a", "metadata": {}, "source": [ "With River Discharge Data, there is a particularity, as it supports requesting by placenames. We can see this from the dataset's descriptor." ] }, { "cell_type": "code", "execution_count": 7, "id": "df32c256-f36f-4a19-8d41-1a7513176e22", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['esacci.RD.satellite-orbit-frequency.L3S.WL.multi-sensor.multi-platform.MERGED.v1-1.r1']" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "descriptors = cci_store.search_data(\n", " data_type=\"geodataframe\",\n", " cci_attrs=dict(\n", " ecv=\"RD\"\n", " )\n", ")\n", "[descriptor.data_id for descriptor in descriptors]" ] }, { "cell_type": "code", "execution_count": 8, "id": "563da120-a7c9-4272-b0ab-119906d1cdc3", "metadata": {}, "outputs": [ { "data": { "application/json": { "bbox": [ -180, -90, 180, 90 ], "crs": "WGS84", "data_id": "esacci.RD.satellite-orbit-frequency.L3S.WL.multi-sensor.multi-platform.MERGED.v1-1.r1", "data_type": "geodataframe", "feature_schema": { "additionalProperties": false, "properties": { "geometry": { "pattern": "POINT(* *)", "type": "string" }, "mission_cycle_number": { "properties": {}, "type": "object" }, "orbit_track_number": { "properties": {}, "type": "object" }, "platform": { "properties": {}, "type": "object" }, "time": { "format": "date", "type": "string" }, "water_surface_height_above_reference_datum": { "properties": {}, "type": "object" }, "water_surface_height_uncertainty": { "properties": {}, "type": "object" } }, "type": "object" }, "open_params_schema": { "additionalProperties": false, "properties": { "bbox": { "items": [ { "maximum": 180, "minimum": -180, "type": "number" }, { "maximum": 90, "minimum": -90, "type": "number" }, { "maximum": 180, "minimum": -180, "type": "number" }, { "maximum": 90, "minimum": -90, "type": "number" } ], "type": "array" }, "place_names": { "items": { "enum": [ "AMAZON_SOLIMOES_MANACAPURU", "AMAZON_AMAZONA_OBIDOS", "AMAZON_NEGRO_SAO", "CHAD_BAHR_AM", "CHAD_LOGONE_LAI", "CHAD_CHARI_MAILAO", "Colville_Colville", "CONGO_UBANGUI_BANGUI", "CONGO_LUAPULA_CHEMBE", "CONGO_CONGO_KINSHASA", "DANUBE_DANUBE_BOGOJEVO", "DANUBE_DANUBE_CEATAL", "DANUBE_SIRET_LUNGOCI", "DANUBE_DANUBE_MOHACS", "BRAHMAPUTRA_BRAHMAPUTRA_BAHADURABAD", "BRAHMAPUTRA_GANGES_HARDINGE", "BRAHMAPUTRA_BRAHMAPUTRA_YANGCUN", "GARONNE_GARONNE_LA", "GARONNE_GARONNE_LAMAGISTERE", "GARONNE_GARONNE_MARMANDE", "GARONNE_GARONNE_TONNEINS", "INDUS_INDUS_CHASHMA", "INDUS_INDUS_GUDDU", "INDUS_INDUS_KOTRI", "INDUS_INDUS_TARBELA", "IRRAWADDY_CHINDWIN_HKAMTI", "IRRAWADDY_IRRAWADDY_PYAY", "IRRAWADDY_IRRAWADDY_SAGAING", "Lena_Lena_KYUSYUR", "LIMPOPO_LIMPOPO_BEITBRUG", "LIMPOPO_OLIFANTS_FINALE", "LIMPOPO_LIMPOPO_SICACATE", "Mackenzie_Mackenzie_ARCTIC", "Mackenzie_Mackenzie_NORMAN", "MARONI_TAMPOK_DEGRAD", "MARONI_MARONI_LANGA", "MARONI_TAPANAHONI_TAPA", "MISSISSIPPI_BIG_NEAR", "MISSISSIPPI_BIG_VALLEY", "MISSISSIPPI_MISSISSIPPI_VICKSBURG", "NIGER_NIGER_ANSONGO", "NIGER_BENOUE_IBI", "NIGER_NIGER_KOULIKORO", "NIGER_NIGER_LOKOJA", "NIGER_NIGER_MALANVILLE", "NIGER_NIGER_NIAMEY", "Ob_Ob_SALEKHARD", "PO_PO_BORGOFORTE", "PO_PO_PIACENZA", "PO_PO_PONTELAGOSCURO", "ZAMBEZI_KABOMPO_KABOMPO", "ZAMBEZI_KAFUE_KASAKA", "ZAMBEZI_ZAMBEZE_MATUNDO" ], "type": "string" }, "type": "array" }, "time_range": { "items": [ { "format": "date", "maxDate": "2023-09-18", "minDate": "1992-12-22", "type": "string" }, { "format": "date", "maxDate": "2023-09-18", "minDate": "1992-12-22", "type": "string" } ], "type": "array" }, "variable_names": { "items": { "enum": [ "water_surface_height_above_reference_datum", "water_surface_height_uncertainty", "platform", "orbit_track_number", "mission_cycle_number" ], "type": "string" }, "type": "array" } }, "type": "object" }, "time_range": [ "1992-12-22", "2023-09-18" ] }, "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "descriptors[0]" ] }, { "cell_type": "markdown", "id": "1e3ffa67-24b0-4ffe-8853-84b249ec5c17", "metadata": {}, "source": [ "Under ''open_params_schema/properties/place_names' you can find a list of place names that you can ask for when opening the dataset. You can also omit the parameter if you wish to get the data for all rivers (this would take some time to load)." ] }, { "cell_type": "code", "execution_count": 9, "id": "85f22f0e-3a0f-407f-884b-71ea1ea5b483", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometrytimewater_surface_height_above_reference_datumwater_surface_height_uncertaintyplatformorbit_track_numbermission_cycle_number
0POINT (0.8224 44.1233)2002-07-10 10:30:2475.0400010.00Envisat6467
1POINT (0.8186 44.1231)2002-08-14 10:30:2475.4300000.00Envisat6468
2POINT (0.8265 44.1215)2002-09-18 10:30:2474.6699980.00Envisat6469
3POINT (0.8115 44.1233)2003-04-16 10:30:2474.8799970.12Envisat64615
4POINT (0.8242 44.122)2003-06-25 10:30:2475.0199970.54Envisat64617
........................
883POINT (9.729 45.0658)2023-03-23 09:55:1280.7399980.11Sentinel-3A4497
884POINT (9.7585 45.1022)2023-04-11 20:45:5280.9599990.00Sentinel-3B31378
885POINT (9.729 45.0658)2023-04-19 09:55:1280.6800000.13Sentinel-3A4498
886POINT (9.7585 45.1022)2023-05-08 20:45:5281.0199970.05Sentinel-3B31379
887POINT (9.729 45.0658)2023-05-16 09:55:1281.5400010.12Sentinel-3A4499
\n", "

888 rows × 7 columns

\n", "
" ], "text/plain": [ " geometry time \\\n", "0 POINT (0.8224 44.1233) 2002-07-10 10:30:24 \n", "1 POINT (0.8186 44.1231) 2002-08-14 10:30:24 \n", "2 POINT (0.8265 44.1215) 2002-09-18 10:30:24 \n", "3 POINT (0.8115 44.1233) 2003-04-16 10:30:24 \n", "4 POINT (0.8242 44.122) 2003-06-25 10:30:24 \n", ".. ... ... \n", "883 POINT (9.729 45.0658) 2023-03-23 09:55:12 \n", "884 POINT (9.7585 45.1022) 2023-04-11 20:45:52 \n", "885 POINT (9.729 45.0658) 2023-04-19 09:55:12 \n", "886 POINT (9.7585 45.1022) 2023-05-08 20:45:52 \n", "887 POINT (9.729 45.0658) 2023-05-16 09:55:12 \n", "\n", " water_surface_height_above_reference_datum \\\n", "0 75.040001 \n", "1 75.430000 \n", "2 74.669998 \n", "3 74.879997 \n", "4 75.019997 \n", ".. ... \n", "883 80.739998 \n", "884 80.959999 \n", "885 80.680000 \n", "886 81.019997 \n", "887 81.540001 \n", "\n", " water_surface_height_uncertainty platform orbit_track_number \\\n", "0 0.00 Envisat 646 \n", "1 0.00 Envisat 646 \n", "2 0.00 Envisat 646 \n", "3 0.12 Envisat 646 \n", "4 0.54 Envisat 646 \n", ".. ... ... ... \n", "883 0.11 Sentinel-3A 44 \n", "884 0.00 Sentinel-3B 313 \n", "885 0.13 Sentinel-3A 44 \n", "886 0.05 Sentinel-3B 313 \n", "887 0.12 Sentinel-3A 44 \n", "\n", " mission_cycle_number \n", "0 7 \n", "1 8 \n", "2 9 \n", "3 15 \n", "4 17 \n", ".. ... \n", "883 97 \n", "884 78 \n", "885 98 \n", "886 79 \n", "887 99 \n", "\n", "[888 rows x 7 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ghg_df = cci_store.open_data(\n", " \"esacci.RD.satellite-orbit-frequency.L3S.WL.multi-sensor.multi-platform.MERGED.v1-1.r1\",\n", " place_names=[\"GARONNE_GARONNE_LAMAGISTERE\", \"PO_PO_PIACENZA\"]\n", ")\n", "ghg_df" ] }, { "cell_type": "markdown", "id": "980e2ee3-d683-4592-8ed0-a84601d12de2", "metadata": {}, "source": [ "We may now plot the data." ] }, { "cell_type": "code", "execution_count": 10, "id": "3e635e10-68eb-4dcd-ba4e-16334e8a40e5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ghg_df.plot()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.13.1" } }, "nbformat": 4, "nbformat_minor": 5 }