微软行星云计算Planetary Computer——从 STAC API 读取数据

举报
此星光明 发表于 2022/04/16 01:33:18 2022/04/16
【摘要】 行星计算机使用STAC对我们托管的数据集进行编目。我们提供了一个STAC API端点,可用于按空间和时间搜索我们的数据集。本快速入门将向您展示如何使用我们的 STAC API 和开源库搜索数据。   首先,您需要安装pystac-client库。您可以通过 pip 安装它: > pip install...

行星计算机使用STAC对我们托管的数据集进行编目。我们提供了一个STAC API端点,可用于按空间和时间搜索我们的数据集。本快速入门将向您展示如何使用我们的 STAC API 和开源库搜索数据。

 

首先,您需要安装pystac-client库。您可以通过 pip 安装它:

> pip install pystac-client

首先,我们将使用 pystac-client 打开我们的 STAC API:

from pystac_client import Client

catalog = Client.open("https://planetarycomputer.microsoft.com/api/stac/v1")

这为我们提供了一个可以抓取或搜索的STAC 目录。目录包含我们索引的每个数据集的STAC 集合(这还不是行星计算机托管的数据的整体)。我们在这里列出了可用的集合 ID 和标题:

# 这里获取子目录,然后利用for循环分别打印出来
collections = catalog.get_children()
for collection in collections:
    print(f"{collection.id} - {collection.title}")

集合具有有关它们包含的STAC 项目的信息。例如,在这里我们查看可用于Landsat 8 Collection 2 Level 2数据的波段

#获取Landsat影像
landsat = catalog.get_child("landsat-8-c2-l2")
#遍历所有影像,然后波段这里一般要用“eo:”作为选择波段的前缀
#这里选择我们分别要获取的信息,波段名称,描述,和分辨率
for band in landsat.extra_fields["summaries"]["eo:bands"]:
    name = band["name"]
    description = band["description"]
    common_name = "" if "common_name" not in band else f"({band['common_name']})"
    ground_sample_distance = band["gsd"]
    print(f"{name} {common_name}: {description} ({ground_sample_distance}m resolution)")

 我们可以使用 API 来搜索在特定时间与某个区域重叠的图像。这里我们使用了 2020 年 12 月微软主园区周围的一个区域:这里对于python有一个缺点就是我们没法直接在线圈出我们所需要的地方,就像GEE在线的JavaScript中的编辑界面上,这一点多少有点不方便。没法随意选择任意地点的位置。

area_of_interest = {
    "type": "Polygon",
    "coordinates": [
        [
            [-122.27508544921875, 47.54687159892238],
            [-121.96128845214844, 47.54687159892238],
            [-121.96128845214844, 47.745787772920934],
            [-122.27508544921875, 47.745787772920934],
            [-122.27508544921875, 47.54687159892238],
        ]
    ],
}

time_range = "2020-12-01/2020-12-31"

#这里可以看出影像集合的搜索给出的代码是:landsat-8-c2-l2
search = catalog.search(
    collections=["landsat-8-c2-l2"], intersects=area_of_interest, datetime=time_range
)

搜索将 STAC 项作为PySTAC对象返回给我们:

items = list(search.get_items())
for item in items:
    print(f"{item.id}: {item.datetime}")

 打印结果:

LC08_L2SP_046027_20201229_02_T2:2020-12-29 18:55:56.738265+00:00
LC08_L2SP_047027_20201220_02_T2:2020-12-20 19:02:09.878796+00:00
LC08_L2SP_046027_20201213_02_T2:2020-12-13 18:56:00.096447+00:00
LC08_L2SP_047027_20201204_02_T1:2020-12-04 19:02:11.194486+00:00

我们可以使用eo扩展程序按云量对项目进行排序。我们将抓取低云度的项目: 

selected_item = sorted(items, key=lambda item: item.properties["eo:cloud_cover"])[0]

我们可以使用eo扩展程序按云量对项目进行排序。我们将抓取低云量的影像:

selected_item = sorted(items, key=lambda item: item.properties["eo:cloud_cover"])[0]

我们可以通过以下方式查看我们的项目可用的影像信息

for asset_key, asset in selected_item.assets.items():
    print(f"{asset_key:<25} - {asset.title}")

打印结果

 在这里,我们检查thumbnail资产:

import json

thumbnail_asset = selected_item.assets["thumbnail"]
print(json.dumps(thumbnail_asset.to_dict(), indent=2))

{
  的“href”: “https://landsateuwest.blob.core.windows.net/landsat-c2/level-2/standard/oli-tirs/2020/047/027/LC08_L2SP_047027_20201204_20210313_02_T1/LC08_L2SP_047027_20201204_20210313_02_T1_thumb_small.jpeg”, 
  “类型” : "image/jpeg", 
  "title": "thumbnail" 
}

 您可以看到缩略图的 URL 包含在资产信息中。但是,我们将无法直接使用 URL:

import requests
#获取链接
requests.get(thumbnail_asset.href)

 但是这里无法显示,显示错误

<响应 [404]>

这是因为 Plantary 计算机使用 Azure Blob 存储SAS 令牌来访问我们的数据,这使我们能够在任何地方免费向任何人提供数据,同时对数据集的出口量保持一定的控制。

要获取访问令牌,您可以使用 Planetary Computer's Data Authentication API

您还可以使用行星计算机包生成令牌并签署资产 HREF 以供访问。您可以通过 pip 安装

> pip install planetary-computer
import planetary_computer as pc

signed_href = pc.sign(thumbnail_asset.href)

我们可以使用 PIL 来渲染图像:

from PIL import Image
from urllib.request import urlopen

Image.open(urlopen(signed_href))

/_images/quickstarts_reading-stac_22_0.png

文章来源: blog.csdn.net,作者:此星光明2021年博客之星云计算Top3,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_31988139/article/details/122017743

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。