行星云计算:使用行星计算机 STAC API 访问影响观测站的生物多样性完整性数据

简介

由 Impact Observatory 与 Vizzuality 合作生成的这些数据集,将陆地生物多样性完整性估算为 2017-2020 年的 100 米格网地图。

描绘全球生物多样性完整性的地图已成为空间规划和管理的关键工具,用于监测地球生物多样性的范围,并识别关键的剩余完整栖息地。然而,这些地图在提供给科学家和政策制定者时,往往已经过时数年。本 STAC 集合中的数据集基于过去的研究,这些研究使用 PREDICTS 数据库(包含来自 750 多项研究的 32,000 个地点的空间参考生物多样性观测数据)来绘制生物多样性完整性。该方法与以往工作不同之处在于,通过建模观测到的生物多样性指标与当代全球地理空间人类压力层之间的关系,旨在为未来提供高分辨率的监测产品。

生物多样性完整性被估计为两个指标的组合:丰度,即个体的数量,以及组成相似性,即物种组成与完整基线的相似程度。线性混合效应模型被应用于估计人类压力对每个指标的空间数据集的预测能力,并将结果在全球范围内进行空间投影。这些方法,以及与其他领先数据集的比较和解释结果的指南,在题为《2017-2020 年生物多样性完整性全球 100 米投影》的方法白皮书中进一步解释。
STAC Collection STAC 集合
https://planetarycomputer.microsoft.com/api/stac/v1/collections/io-biodiversity
Providers 提供者
Impact Observatory (processor, producer, licensor)
Impact Observatory(处理器、生产者、许可方)
Vizzuality (processor) Vizzuality(处理器)
Microsoft (host) 微软(托管方)
License 许可
CC BY 4.0

以下是整理后的生物多样性完整性数据集表格:

数据集基本信息表

标题STAC密钥角色类型描述资产详情
生物多样性完整性dataData 数据GeoTIFF (COG)100米分辨率的陆地生物多样性完整性Biodiversity Intactness

数据集资源表

资源路径STAC密钥描述角色内容类型
abfs://items/io-biodiversity.parquetgeoparquet-items该数据集的STAC项目导出为GeoParquet格式的快照Stac-items STAC项目application/x-parquet

案例

由 Impact Observatory 与 Vizzuality 合作生成的这些数据集,将陆地生物多样性完整性估算为 2017-2020 年的 100 米格网地图。在本笔记本中,我们将演示如何通过行星计算机访问和处理这些数据。
本笔记本无论是否使用 API 密钥均可运行,但使用 API 密钥将获得更宽松的数据访问权限。如果您使用行星计算机中心运行此笔记本,则您的 API 密钥在服务器启动时将自动设置为环境变量 PC_SDK_SUBSCRIPTION_KEY 。否则,您可以通过登录开发者门户查看您的密钥。API 密钥可以通过环境变量 PC_SDK_SUBSCRIPTION_KEY 或以下代码手动设置:

import planetary_computer
planetary_computer.settings.set_subscription_key(<YOUR API Key>)
import pandas as pd
import planetary_computer
import pystac_client
import rich.table
import stackstac
from geogif import gif

Planetary Computer 托管的数据集可从 Azure Blob Storage 获取。 我们将使用 pystac-client 搜索 Planetary Computer 的 STAC API,以查找我们关心的数据子集,然后直接从 Azure Blob Storage 加载数据。 我们将指定 modifier ,以便访问 Planetary Computer 的私有 Blob Storage 容器中的数据。 更多信息请参考 Reading from the STAC API 和 Using tokens for data access。

catalog = pystac_client.Client.open(
    "https://planetarycomputer.microsoft.com/api/stac/v1",
    modifier=planetary_computer.sign_inplace,
)

选择一个区域并查找 STAC 项目

bbox_of_interest = [-59.958, -9.818, -58.633, -8.946]
search = catalog.search(collections=["io-biodiversity"], bbox=bbox_of_interest)

items = list(search.items())
for item in items:
    print(item)

可用资产与项目属性

我们的搜索返回了四个 STAC 项目。从它们的 ID 可以看出,它们包含同一区域但不同时间的数据,具体为 2017 年至 2020 年。让我们显示 2017 年项目的可用资产和属性。

asset_table = rich.table.Table("Asset Key", "Asset Title")
for key, value in items[-1].assets.items():
    asset_table.add_row(key, value.title)
asset_table

Asset Key ┃ Asset Title ┃
┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ data │ Biodiversity Intactness │
│ tilejson │ TileJSON with default rendering │
│ rendered_preview │ Rendered preview │
└──────────────────┴─────────────────────────────────

property_table = rich.table.Table("Property Name", "Property Value")
for key, value in sorted(items[-1].properties.items()):
    property_table.add_row(key, str(value))
property_table

Property Name ┃ Property Value ┃
┡━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ datetime │ None │
│ end_datetime │ 2017-12-31T23:59:59Z │
│ proj:epsg │ 4326 │
│ proj:shape │ [7992, 7992] │
│ proj:transform │ [0.0008983152841195215, 0.0, -65.13062798906854, 0.0, -0.0008983152841195215, │
│ │ -8.331364758881804, 0.0, 0.0, 1.0] │
│ start_datetime │ 2017-01-01T00:00:00Z │
└────────────────┴─────────────────────────────────
加载数据并绘图

我们对"数据"资源感兴趣。我们将使用 stackstac 库将四个项目的数据资源读入到一个 xarray.DataArray 中。

stack = (
    stackstac.stack(items, bounds_latlon=bbox_of_interest, assets=["data"])
    .assign_coords(
        time=pd.to_datetime([item.properties["start_datetime"] for item in items])
        .tz_convert(None)
        .to_numpy()
    )
    .sortby("time")
)
stack.name = "Biodiversity Intactness"
stack

在这里插入图片描述
此时我们尚未将任何数据加载到内存中。让我们删除单个 band 维度,通过调用 .compute() 来加载数据。

data_array = stack.squeeze().compute()

现在我们可以在网格中绘制数据时间序列。

grid = data_array.plot(col="time", cmap="Greens", robust=True)
grid;

在这里插入图片描述
在静态图中很难看出变化,所以让我们制作一个逐年循环的 gif。
gif(data_array, fps=1, cmap=“Greens”, robust=True)

GIF动图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此星光明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值