Skip to content

Commit a4667dc

Browse files
committed
extended STAC documentation with examples
1 parent 4353e20 commit a4667dc

File tree

3 files changed

+96
-3
lines changed

3 files changed

+96
-3
lines changed

docs/related/collgs/sentinel.md

+1-2
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,7 @@ Pro stažení pouze části (např. manifestu) je vhodné stáhnout pouze daný
125125
## STAC katalog metadat
126126

127127
Pro získání metadat produktů ve formátu STAC je k dispozici katalog na adrese [https://stac.cesnet.cz](https://stac.cesnet.cz).
128-
129-
[//]: # (todo - refaktorovat část o STACu z Landsatu, udělat separátní sekci o STACu)
128+
Dokumentaci katalogu naleznete v sekci [STAC](./stac.md).
130129

131130
## Podpora specifických aplikací
132131

docs/related/collgs/stac.md

+95-1
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,98 @@ stránku výsledků tohoto vyhledávání.
6262
## Prohlížeč
6363
Rovněž je k dispozici prohlížeč produktů v grafickém rozhraní: [https://stac.cesnet.cz/browser/](https://stac.cesnet.cz/browser/).
6464
![stac_browser.png](stac_browser.png)
65-
I zde jsou data rozřazena do kolekcí a je možné sáhnout jednotlivé assety.
65+
I zde jsou data rozřazena do kolekcí a je možné stáhnout jednotlivé assety.
66+
67+
## PySTAC a další knihovny Pythonu pro práci s geoprostorovými daty
68+
Python poskytuje knihovnu [PySTAC](https://pystac.readthedocs.io/en/stable/), která umožňuje práci se STAC katalogem.
69+
Při jejím použití je nutné použít API adresu [https://stac.vm.cesnet.cz/](https://stac.vm.cesnet.cz/).
70+
71+
```python
72+
from pystac_client import Client
73+
api_url = "https://stac.vm.cesnet.cz/"
74+
client = Client.open(api_url)
75+
```
76+
77+
Příklad práce s kolekcí
78+
```python
79+
collections = client.get_collections()
80+
s1_collection = client.get_collection("sentinel-1-grd")
81+
print(s1_collection.description)
82+
```
83+
84+
Knihovna [Leafmap](https://leafmap.org/) slouží v prostředí Jupyter notebooků pro geoprostorovou analýzu
85+
a umožňuje získání souřadnic, které dále využijeme po práci s knihovnou PySTAC. Pokud již známe souřadnice,
86+
využijeme filtr `intersects` (protínání bodu), nebo `bbox` (ohraničená oblast). Následující příklady jsou
87+
inspirovány [existujícím návodem v angličtině](https://carpentries-incubator.github.io/geospatial-python/instructor/05-access-data.html#search-a-stac-catalog).
88+
89+
```python
90+
from shapely.geometry import Point
91+
point = Point(16.6068, 49.1951) # souřadnice Brna
92+
search = client.search(
93+
collections=[s1_collection],
94+
intersects=point,
95+
max_items=10, # omezení na počet výsledků
96+
method="GET" # výchozí metoda vyžaduje autentizaci, je nutné explicitně specifikovat GET
97+
)
98+
print(search.matched())
99+
```
100+
101+
Výsledek zobrazí, kolik itemů odpovídá zadání - příslušnost ke kolekci sentinel-1-grd a protínání Brna.
102+
103+
```python
104+
for item in (search.item_collection()):
105+
print(item.properties)
106+
```
107+
108+
Výsledek vyhledávání můžeme dále iterovat a zjistit podrobnosti o každém z 10 vrácených itemů. Výsledná
109+
metadata mají podobný formát:
110+
111+
```json
112+
{
113+
"productIdentifier": "dhr1006adbc3-5f9d-4273-8d00-1bdf8b435603",
114+
"datetime": "2024-05-26T16:43:30.929639Z",
115+
"start_datetime": "2024-05-26T16:43:18.430587Z",
116+
"end_datetime": "2024-05-26T16:43:43.428690Z",
117+
"sar:frequency_band": "C",
118+
"sar:center_frequency": 5.405,
119+
"sar:observation_direction": "right",
120+
"sar:instrument_mode": "IW",
121+
"sar:polarizations": [
122+
"VV",
123+
"VH"
124+
],
125+
"sar:product_type": "GRD",
126+
"proj:bbox": [
127+
14.998892,
128+
47.573769,
129+
18.942654,
130+
49.47876
131+
],
132+
"platform": "sentinel-1a",
133+
"s1:product_identifier": "S1A_IW_GRDH_1SDV_20240526T164318_20240526T164343_054045_069226_1020",
134+
...
135+
}
136+
```
137+
138+
Pro přístup k odkazům ke stažení konkrétních snímků musíme přistoupit k assetům, které můžeme vylistovat.
139+
```python
140+
assets = items[0].assets
141+
print(assets.keys())
142+
```
143+
144+
V nich pak můžeme vybírat odkazy na např. náhledový obrázek, který získáme z daného linku:
145+
```python
146+
import requests
147+
from matplotlib import pyplot as plt
148+
from PIL import Image
149+
import io
150+
151+
thumbnail = assets["thumbnail"].href
152+
img_data = requests.get(thumbnail).content
153+
154+
plt.figure(figsize=(10, 10))
155+
plt.imshow(Image.open(io.BytesIO(img_data)))
156+
plt.show()
157+
```
158+
159+
![stac_thumbnail.png](stac_thumbnail.png)
358 KB
Loading

0 commit comments

Comments
 (0)