行星计算机使用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))
{
“类型” : "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))