简介
由 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密钥 | 角色 | 类型 | 描述 | 资产详情 |
---|---|---|---|---|---|
生物多样性完整性 | data | Data 数据 | GeoTIFF (COG) | 100米分辨率的陆地生物多样性完整性 | Biodiversity Intactness |
数据集资源表
资源路径 | STAC密钥 | 描述 | 角色 | 内容类型 |
---|---|---|---|---|
abfs://items/io-biodiversity.parquet | geoparquet-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)