Search and massive download#
In this example, we will search for items using pygeodes, filter these items using geopandas dataframes and use a download queue to downloads these items and monitor the progress of the download.
Imports#
Let’s start by importing geodes
[1]:
from pygeodes import Geodes, Config
Configuration#
We configure using a config file located in our cwd
[2]:
conf = Config.from_file("config.json")
geodes = Geodes(conf=conf)
Searching products#
We search for products in the T31TCK tile whose acquisition date is after 2023-01-01
[3]:
from pygeodes.utils.datetime_utils import complete_datetime_from_str
query = {
"grid:code": {"eq": "T31TCK"},
"end_datetime": {"gte": complete_datetime_from_str("2023-01-01")},
}
items, dataframe = geodes.search_items(query=query)
/work/scratch/data/fournih/test_env/lib/python3.11/site-packages/urllib3/connectionpool.py:1099: InsecureRequestWarning: Unverified HTTPS request is being made to host 'geodes-portal.cnes.fr'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings
warnings.warn(
Found 539 items matching your query, returning 80 as get_all parameter is set to False
80 item(s) found for query : {'grid:code': {'eq': 'T31TCK'}, 'end_datetime': {'gte': '2023-01-01T00:00:00.000000Z'}}
Exploring results#
We get a list ot items and a dataframe, we can work with the dataframe for instance :
[4]:
dataframe
[4]:
grid:code | end_datetime | id | collection | item | geometry | |
---|---|---|---|---|---|---|
0 | T31TCK | 2024-05-02T10:56:21.024Z | URN:FEATURE:DATA:gdh:91c4d81a-0e4c-3dec-a9c2-4... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:91c4d81a-0e4c-3dec-... | POLYGON ((0.95006 45.13349, 0.45686 45.12551, ... |
1 | T31TCK | 2023-07-22T10:56:29.024Z | URN:FEATURE:DATA:gdh:e4e9708a-6005-3d57-9b36-0... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:e4e9708a-6005-3d57-... | POLYGON ((0.49965 44.138, 0.55032 44.1388, 0.5... |
2 | T31TCK | 2024-07-08T10:50:31.024Z | URN:FEATURE:DATA:gdh:48aeb103-69de-31b7-a3f3-d... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:48aeb103-69de-31b7-... | POLYGON ((0.45686 45.12551, 0.49965 44.138, 1.... |
3 | T31TCK | 2023-04-08T10:56:21.024Z | URN:FEATURE:DATA:gdh:a6d9bb08-22ff-3be2-a715-9... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:a6d9bb08-22ff-3be2-... | POLYGON ((0.49965 44.138, 0.54163 44.13866, 0.... |
4 | T31TCK | 2024-01-20T10:53:41.024Z | URN:FEATURE:DATA:gdh:084acd27-8d81-3dd1-adac-6... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:084acd27-8d81-3dd1-... | POLYGON ((0.45686 45.12551, 0.49965 44.138, 1.... |
... | ... | ... | ... | ... | ... | ... |
75 | T31TCK | 2023-07-19T10:46:29.024Z | URN:FEATURE:DATA:gdh:d38e0f8a-fa7b-352b-9c3f-b... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:d38e0f8a-fa7b-352b-... | POLYGON ((0.49965 44.138, 1.87192 44.1598, 1.8... |
76 | T31TCK | 2023-11-04T11:02:21.024Z | URN:FEATURE:DATA:gdh:444c28ff-2097-3fdf-b98e-7... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:444c28ff-2097-3fdf-... | POLYGON ((0.86769 44.92037, 0.90268 45.00649, ... |
77 | T31TCK | 2024-03-25T10:46:39.024Z | URN:FEATURE:DATA:gdh:7ad8089d-ac8d-33d9-b8c0-e... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:7ad8089d-ac8d-33d9-... | POLYGON ((0.45686 45.12551, 0.49965 44.138, 1.... |
78 | T31TCK | 2023-06-04T10:46:21.024Z | URN:FEATURE:DATA:gdh:6236fb49-7523-30f7-8900-f... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:6236fb49-7523-30f7-... | POLYGON ((0.49965 44.138, 1.87192 44.1598, 1.8... |
79 | T31TCK | 2023-01-10T10:53:29.024Z | URN:FEATURE:DATA:gdh:d776f06a-f60a-3507-bdfd-6... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:d776f06a-f60a-3507-... | POLYGON ((0.49965 44.138, 1.87192 44.1598, 1.8... |
80 rows × 6 columns
Adding columns#
We want to filter on cloudcover, so we need to add the column to the dataframe.
[5]:
items[0].list_available_keys()
[5]:
{'area',
'continent_code',
'dataset',
'datetime',
'end_datetime',
'endpoint_description',
'endpoint_url',
'eo:cloud_cover',
'grid:code',
'hydrology.rivers',
'id',
'identifier',
'instrument',
'keywords',
'latest',
'platform',
'political.continents',
'processing:level',
'product:timeliness',
'product:type',
'proj:bbox',
'references',
's2:datatake_id',
'sar:instrument_mode',
'sat:absolute_orbit',
'sat:orbit_state',
'sat:relative_orbit',
'sci:doi',
'start_datetime',
'version'}
We find we can use spaceborne:cloudCover
, so we add it to the dataframe :
[6]:
from pygeodes.utils.formatting import format_items
dataframe_new = format_items(dataframe, {"eo:cloud_cover"})
Filtering our results#
Now that the cloud cover is in our dataframe, we can filter on it.
[7]:
dataframe_filtered = dataframe_new[dataframe_new["eo:cloud_cover"] < 30]
[8]:
dataframe_filtered
[8]:
grid:code | end_datetime | id | collection | item | geometry | eo:cloud_cover | |
---|---|---|---|---|---|---|---|
1 | T31TCK | 2023-07-22T10:56:29.024Z | URN:FEATURE:DATA:gdh:e4e9708a-6005-3d57-9b36-0... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:e4e9708a-6005-3d57-... | POLYGON ((0.49965 44.138, 0.55032 44.1388, 0.5... | 0.000000 |
2 | T31TCK | 2024-07-08T10:50:31.024Z | URN:FEATURE:DATA:gdh:48aeb103-69de-31b7-a3f3-d... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:48aeb103-69de-31b7-... | POLYGON ((0.45686 45.12551, 0.49965 44.138, 1.... | 0.000000 |
3 | T31TCK | 2023-04-08T10:56:21.024Z | URN:FEATURE:DATA:gdh:a6d9bb08-22ff-3be2-a715-9... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:a6d9bb08-22ff-3be2-... | POLYGON ((0.49965 44.138, 0.54163 44.13866, 0.... | 6.303467 |
4 | T31TCK | 2024-01-20T10:53:41.024Z | URN:FEATURE:DATA:gdh:084acd27-8d81-3dd1-adac-6... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:084acd27-8d81-3dd1-... | POLYGON ((0.45686 45.12551, 0.49965 44.138, 1.... | 0.553047 |
6 | T31TCK | 2024-09-19T11:08:39Z | URN:FEATURE:DATA:gdh:7c5a6f36-d16f-3640-b38a-8... | MUSCATE_SENTINEL2_SENTINEL2_L2A | Item (URN:FEATURE:DATA:gdh:7c5a6f36-d16f-3640-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 0.000000 |
7 | T31TCK | 2024-07-26T11:08:41Z | URN:FEATURE:DATA:gdh:2dc5d06f-cea7-3031-af0f-0... | MUSCATE_SENTINEL2_SENTINEL2_L2A | Item (URN:FEATURE:DATA:gdh:2dc5d06f-cea7-3031-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 8.000000 |
10 | T31TCK | 2024-04-02T11:08:37Z | URN:FEATURE:DATA:gdh:0c18cbce-4e42-3df1-a557-9... | MUSCATE_SENTINEL2_SENTINEL2_L2A | Item (URN:FEATURE:DATA:gdh:0c18cbce-4e42-3df1-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 6.000000 |
11 | T31TCK | 2024-08-05T11:08:41Z | URN:FEATURE:DATA:gdh:51739c13-41d7-328b-b4e5-1... | MUSCATE_SENTINEL2_SENTINEL2_L2A | Item (URN:FEATURE:DATA:gdh:51739c13-41d7-328b-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 0.000000 |
12 | T31TCK | 2023-11-26T10:58:40Z | URN:FEATURE:DATA:gdh:6e03e00e-c4f0-343e-9a3e-8... | MUSCATE_SENTINEL2_SENTINEL2_L2A | Item (URN:FEATURE:DATA:gdh:6e03e00e-c4f0-343e-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 0.000000 |
13 | T31TCK | 2023-06-04T10:58:53Z | URN:FEATURE:DATA:gdh:6a8cc460-c7c2-3cdf-9145-6... | MUSCATE_SENTINEL2_SENTINEL2_L2A | Item (URN:FEATURE:DATA:gdh:6a8cc460-c7c2-3cdf-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 28.000000 |
14 | T31TCK | 2023-07-27T11:08:44Z | URN:FEATURE:DATA:gdh:fdeb23c0-113d-3819-a314-f... | MUSCATE_SENTINEL2_SENTINEL2_L2A | Item (URN:FEATURE:DATA:gdh:fdeb23c0-113d-3819-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 0.000000 |
15 | T31TCK | 2023-09-10T11:08:42Z | URN:FEATURE:DATA:gdh:6bac51b5-e23c-3965-831e-c... | MUSCATE_SENTINEL2_SENTINEL2_L2A | Item (URN:FEATURE:DATA:gdh:6bac51b5-e23c-3965-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 2.000000 |
16 | T31TCK | 2023-09-05T11:08:44Z | URN:FEATURE:DATA:gdh:a77faa14-ff6d-3d9e-a4c8-1... | MUSCATE_SENTINEL2_SENTINEL2_L2A | Item (URN:FEATURE:DATA:gdh:a77faa14-ff6d-3d9e-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 4.000000 |
17 | T31TCK | 2023-06-24T10:58:53Z | URN:FEATURE:DATA:gdh:3c8bb792-9501-3d42-b8f3-b... | MUSCATE_SENTINEL2_SENTINEL2_L2A | Item (URN:FEATURE:DATA:gdh:3c8bb792-9501-3d42-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 0.000000 |
18 | T31TCK | 2023-10-07T10:58:44Z | URN:FEATURE:DATA:gdh:69fec691-f643-30c4-99e3-5... | MUSCATE_SENTINEL2_SENTINEL2_L2A | Item (URN:FEATURE:DATA:gdh:69fec691-f643-30c4-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 0.000000 |
20 | T31TCK | 2023-02-02T11:08:35Z | URN:FEATURE:DATA:gdh:564d14d2-b27d-317c-892e-5... | MUSCATE_SENTINEL2_SENTINEL2_L2A | Item (URN:FEATURE:DATA:gdh:564d14d2-b27d-317c-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 28.000000 |
21 | T31TCK | 2024-09-15T00:00:00Z | URN:FEATURE:DATA:gdh:9030e38c-de3f-3206-a713-9... | MUSCATE_SENTINEL2_SENTINEL2_L3A | Item (URN:FEATURE:DATA:gdh:9030e38c-de3f-3206-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 0.000000 |
24 | T31TCK | 2023-10-15T00:00:00Z | URN:FEATURE:DATA:gdh:2dfae9c4-4697-3c4b-a8f0-3... | MUSCATE_SENTINEL2_SENTINEL2_L3A | Item (URN:FEATURE:DATA:gdh:2dfae9c4-4697-3c4b-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 0.000000 |
25 | T31TCK | 2023-04-15T00:00:00Z | URN:FEATURE:DATA:gdh:426693b5-9a6f-38ea-a7d8-0... | MUSCATE_SENTINEL2_SENTINEL2_L3A | Item (URN:FEATURE:DATA:gdh:426693b5-9a6f-38ea-... | POLYGON ((0.45686 45.12551, 1.85259 45.14807, ... | 1.000000 |
29 | T31TCK | 2024-09-19T10:57:31.024Z | URN:FEATURE:DATA:gdh:f182e9be-de0e-34fa-94e0-f... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:f182e9be-de0e-34fa-... | POLYGON ((0.95622 45.13358, 0.45686 45.12551, ... | 0.000000 |
40 | T31TCK | 2024-10-31T10:51:09.024Z | URN:FEATURE:DATA:gdh:9f2ab752-b63e-3f7e-bc5c-d... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:9f2ab752-b63e-3f7e-... | POLYGON ((1.1419 45.13659, 0.45686 45.12551, 0... | 0.000000 |
41 | T31TCK | 2025-02-16T11:01:51.025Z | URN:FEATURE:DATA:gdh:ad5d3566-8930-3baa-b355-9... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:ad5d3566-8930-3baa-... | POLYGON ((0.95337 45.13354, 0.45686 45.12551, ... | 0.000000 |
42 | T31TCK | 2023-04-20T10:46:19.024Z | URN:FEATURE:DATA:gdh:f3cbdaf7-34ac-3a94-b7f4-b... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:f3cbdaf7-34ac-3a94-... | POLYGON ((0.49965 44.138, 1.87192 44.1598, 1.8... | 10.917376 |
49 | T31TCK | 2023-04-15T10:46:21.024Z | URN:FEATURE:DATA:gdh:968eada1-5eba-3526-8e38-6... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:968eada1-5eba-3526-... | POLYGON ((1.87175 44.16864, 1.85259 45.14807, ... | 21.794515 |
53 | T31TCK | 2024-04-12T10:56:21.024Z | URN:FEATURE:DATA:gdh:c3aa6a8a-c476-38d8-98a6-1... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:c3aa6a8a-c476-38d8-... | POLYGON ((0.95063 45.13349, 0.45686 45.12551, ... | 9.792046 |
57 | T31TCK | 2023-12-14T11:04:41.024Z | URN:FEATURE:DATA:gdh:feabfb13-c300-3e2b-af2f-1... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:feabfb13-c300-3e2b-... | POLYGON ((0.96381 45.13371, 0.45686 45.12551, ... | 0.000000 |
62 | T31TCK | 2023-09-10T10:56:29.024Z | URN:FEATURE:DATA:gdh:67ff3214-78c4-304e-82aa-2... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:67ff3214-78c4-304e-... | POLYGON ((0.49965 44.138, 0.54246 44.13868, 0.... | 0.367962 |
66 | T31TCK | 2023-08-23T10:46:31.024Z | URN:FEATURE:DATA:gdh:7f4e618b-1d33-3017-9e83-d... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:7f4e618b-1d33-3017-... | POLYGON ((0.49965 44.138, 1.87192 44.1598, 1.8... | 0.000000 |
67 | T31TCK | 2023-06-24T10:46:21.024Z | URN:FEATURE:DATA:gdh:68922eac-baa5-3f4d-8f12-e... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:68922eac-baa5-3f4d-... | POLYGON ((0.49965 44.138, 1.87192 44.1598, 1.8... | 0.000000 |
69 | T31TCK | 2024-02-17T11:00:19.024Z | URN:FEATURE:DATA:gdh:5c1379a6-702e-3f27-9cc0-2... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:5c1379a6-702e-3f27-... | POLYGON ((0.94737 45.13344, 0.45686 45.12551, ... | 3.435898 |
71 | T31TCK | 2024-07-23T10:46:19.024Z | URN:FEATURE:DATA:gdh:985a0188-0e22-333c-ab1e-7... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:985a0188-0e22-333c-... | POLYGON ((0.45686 45.12551, 0.49965 44.138, 1.... | 0.000000 |
73 | T31TCK | 2024-05-09T10:50:31.024Z | URN:FEATURE:DATA:gdh:bee1e3b7-84b7-332d-a06f-5... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:bee1e3b7-84b7-332d-... | POLYGON ((0.45686 45.12551, 0.49965 44.138, 1.... | 0.000000 |
74 | T31TCK | 2023-04-15T10:46:21.024Z | URN:FEATURE:DATA:gdh:f7b216ae-64aa-313f-88e2-4... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:f7b216ae-64aa-313f-... | POLYGON ((0.49965 44.138, 1.87192 44.1598, 1.8... | 14.800485 |
75 | T31TCK | 2023-07-19T10:46:29.024Z | URN:FEATURE:DATA:gdh:d38e0f8a-fa7b-352b-9c3f-b... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:d38e0f8a-fa7b-352b-... | POLYGON ((0.49965 44.138, 1.87192 44.1598, 1.8... | 4.313566 |
78 | T31TCK | 2023-06-04T10:46:21.024Z | URN:FEATURE:DATA:gdh:6236fb49-7523-30f7-8900-f... | PEPS_S2_L1C | Item (URN:FEATURE:DATA:gdh:6236fb49-7523-30f7-... | POLYGON ((0.49965 44.138, 1.87192 44.1598, 1.8... | 13.018869 |
Plotting#
We can plot our results on a map :
[9]:
dataframe_filtered.explore()
[9]:
Downloading our items#
We can download our results using the Profile system
[10]:
from pygeodes.utils.profile import DownloadQueue, Profile
We reset our Profile to be sure to track only the downloads from the queue
[11]:
Profile.reset()
items = dataframe_filtered["item"].values
queue = DownloadQueue(items)
In a separate cell, we run our queue
[ ]:
queue.run()