微软行星云计算Planetary Computer——重投影和重采样(方法1)

简介: 微软行星云计算Planetary Computer——重投影和重采样(方法1)

如何将云优化GeoTIFFs(COG)重新投影到不同的坐标参考系(CRS)?重投数据通常还包括将光栅数据重新采样到不同的分辨率,这需要将多个像素值组合到一起(当下采样--或重新采样到较低的分辨率/较大的单元尺寸时)或从现有的像素中插值新的像素(当上采样--或重新采样到较高的分辨率/较小的单元尺寸时)。你还将学习如何使用不同的重采样算法来调整光栅的像素大小。

本教程涵盖了几种再现的方法。选择哪种方法主要取决于两个因素。

当你加载数据时,你是否已经知道你的目标是什么CRS

你是否有用于你所处理的数据的STAC项目?

一般来说,在加载数据的同时进行重投影和重采样会更有效率,行星计算机数据目录中的所有遥感数据集都包括STAC项目。

本教程包括以下四种对地理数据进行重投影和重采样的方法。

方法1:在使用stackstac加载时对大量的COG进行重投和重采样。这种方法需要STAC项目。

方法2:在使用rioxarray和rasterio加载时,使用WarpedVRT对单个COG进行重投影和重采样。这种方法在没有STAC项目的情况下也可以使用,但是不能扩展到大量的COG。

方法3:用stackstac.reproject_array对内存中(可能是分布式的)DataArray进行重投和重新采样。这个选项需要更多的内存,一般来说效率不如选项1,但你在加载数据时不需要知道目标CRS。

方法4: 使用rioxarray和rasterio对内存中(单机)的DataArray进行重投和重新采样。这个选项只适用于单机,并且比选项2需要更多的内存,但是在加载数据时,你不需要知道目标CRS。

这些重投方法是按照一般推荐的顺序排列的。然而,某些方法可能无法使用,这取决于你在加载数据时是否知道你的目标CRS以及你是否有STAC项目。

在开始方法前,首先要进行库的导入:

import planetary_computer as pc
import pystac_client
import numpy as np
import xarray as xr
import stackstac
import affine
import pyproj
import rioxarray
import rasterio
from rioxarray.rioxarray import _make_coords
from rasterio.vrt import WarpedVRT
import xrspatial.multispectral as ms
import matplotlib.pyplot as plt

准备工作。创建一个本地Dask集群

在本教程中,将使用一个小型数据集。创建一个本地Dask集群,使用你机器的所有核心来并行处理数据。

from dask.distributed import Client
client = Client()
print(f"/proxy/{client.scheduler_info()['services']['dashboard']}/status")

/proxy/8787/status

为了跟踪计算的进展,你可以通过前一个单元的输出的URL访问Dask仪表板。

本教程所关注的区域位于美国科罗拉多州,以Cochetopa Dome和Sawtooth Mountain为中心。将使用Sentinel-2 Level-2A数据。关于通过STAC API访问数据的更多信息,请参见从STAC API中读取数据。

stac = pystac_client.Client.open("https://planetarycomputer.microsoft.com/api/stac/v1/")
search = stac.search(
    collections=["sentinel-2-l2a"],
    intersects={"type": "Point", "coordinates": [-106.714900, 38.22679]},
    query={"eo:cloud_cover": {"lt": 1}},
    datetime="2019-09-01/2019-09-30",
)
item = next(search.get_items())
signed_item = pc.sign(item)

方法1: 使用stackstac

选定的场景被存储在EPSG:32613坐标系中。让我们通过向stackstac.stack函数提供目标epsg编号,将其重新投射到一个新的CRS中。要调整数据的分辨率,还需要向函数的可选分辨率和重采样参数提供数值。

通过 stackstac.stack,你可以使用任何由 EPSG 代码定义的 CRS。在这个例子中,你使用stackstac.stack函数来重新投射到Lambert Cylindrical投影(epsg:6933)。兰伯特圆柱投影是一种保留面积测量的等面积投影。在地球表面具有相同大小的区域在地图上具有相同的大小。然而,形状、角度和比例尺一般会被扭曲。

这个例子使用了双线性重采样方法。重采样也发生在stackstac.stack函数中。由于这个函数内部使用了rasterio,你可以使用rasterio.enums.Resampling类中的任何算法。要使用一个特定的算法,把它作为重采样参数的一个值来传递。stackstac.stack中默认的重采样方法是rasterio.enums.Resampling.nearest。

 

scene_data = (
    stackstac.stack(
        [signed_item.to_dict()],
        epsg=6933,
        resampling=rasterio.enums.Resampling.bilinear,
        resolution=100,  # resolution in the output CRS’s units
        assets=["B04", "B03", "B02"],  # red, green, blue bands
        chunksize=2048,
    )
    .isel(time=0)
    .persist()
)
scene_data

<xarray.DataArray 'stackstac-70964429577d6f8e4004178ae459a9c1' (band: 3, y: 995, x: 1235)>

dask.array<getitem, shape=(3, 995, 1235), dtype=float64, chunksize=(1, 995, 1235), chunktype=numpy.ndarray>

Coordinates: (12/46)

   time                                     datetime64[ns] 2019-09-24T17:50:...

   id                                       <U54 'S2B_MSIL2A_20190924T175049...

 * band                                     (band) <U3 'B04' 'B03' 'B02'

 * x                                        (x) float64 -1.035e+07 ... -1.02...

 * y                                        (y) float64 4.591e+06 ... 4.491e+06

   s2:product_type                          <U7 'S2MSI2A'

   ...                                       ...

   proj:transform                           object {0.0, 300000.0, 10.0, 430...

   proj:bbox                                object {300000.0, 4190220.0, 430...

   common_name                              (band) <U5 'red' 'green' 'blue'

   center_wavelength                        (band) float64 0.665 0.56 0.49

   full_width_half_max                      (band) float64 0.038 0.045 0.098

   epsg                                     int64 6933

Attributes:

   spec:        RasterSpec(epsg=6933, bounds=(-10353400, 4491300, -10229900,...

   crs:         epsg:6933

   transform:   | 100.00, 0.00,-10353400.00|\n| 0.00,-100.00, 4590800.00|\n|...

   resolution:  100

xarray.DataArray

'stackstac-70964429577d6f8e4004178ae459a9c1'

  • band: 3
  • y: 995
  • x: 1235
  • dask.array<chunksize=(1, 995, 1235), meta=np.ndarray>

Array Chunk
Bytes 28.13 MiB 9.38 MiB
Shape (3, 995, 1235) (1, 995, 1235)
Count 3 Tasks 3 Chunks
Type float64 numpy.ndarray


  • Coordinates: (46)
  • time
    ()
    datetime64[ns]
    2019-09-24T17:50:49.024000

array('2019-09-24T17:50:49.024000000', dtype='datetime64[ns]')

  • id
    ()
    <U54
    'S2B_MSIL2A_20190924T175049_R141...

array('S2B_MSIL2A_20190924T175049_R141_T13SCC_20201004T164728',

     dtype='<U54')

  • band
    (band)
    <U3
    'B04' 'B03' 'B02'

array(['B04', 'B03', 'B02'], dtype='<U3')

  • x
    (x)
    float64
    -1.035e+07 ... -1.023e+07

array([-10353400., -10353300., -10353200., ..., -10230200., -10230100.,

      -10230000.])

  • y
    (y)
    float64
    4.591e+06 4.591e+06 ... 4.491e+06

array([4590800., 4590700., 4590600., ..., 4491600., 4491500., 4491400.])

  • s2:product_type
    ()
    <U7
    'S2MSI2A'

array('S2MSI2A', dtype='<U7')

  • sat:orbit_state
    ()
    <U10
    'descending'

array('descending', dtype='<U10')

  • sat:relative_orbit
    ()
    int64
    141

array(141)

  • s2:processing_baseline
    ()
    <U5
    '02.12'

array('02.12', dtype='<U5')

  • eo:cloud_cover
    ()
    float64
    0.04679

array(0.046785)

  • platform
    ()
    <U11
    'Sentinel-2B'

array('Sentinel-2B', dtype='<U11')

  • proj:epsg
    ()
    int64
    32613

array(32613)

  • ........

  • Attributes: (4)spec :
    RasterSpec(epsg=6933, bounds=(-10353400, 4491300, -10229900, 4590800), resolutions_xy=(100, 100))
    crs :
    epsg:6933
    transform :
    | 100.00, 0.00,-10353400.00| | 0.00,-100.00, 4590800.00| | 0.00, 0.00, 1.00|
    resolution :
    100
  • 处理结果我就不逐一展示了

为了生成重投影和重采样数据的预览,用xrspatil.multispectral.true_color函数创建一个真彩色图像。

提供以下参数。

你的场景数据中的红、绿、蓝三个波段

用于图像名称的可选字符串名称

注意:要调整对比度和亮度,请提供两个可选的数字参数c(对比度)和th(亮度)的值。本教程中的所有图像预览都使用该函数的默认值c=10和th=0.125。

结果展示:

# visualize selected scene
cylindrical_img = ms.true_color(*scene_data, name="epsg=6933")
cylindrical_img.plot.imshow(figsize=(8, 8));

 

下次将介绍改变投影和重采样的方法2


相关文章
|
存储 数据管理 虚拟化
云计算——存储虚拟化简介 与 存储模式及方法
云计算——存储虚拟化简介 与 存储模式及方法
825 0
|
人工智能 边缘计算 云计算
2024.11|云计算行业的商业模式创新方法及实践
截至2024年,全球云计算行业迈入全新阶段,从IaaS到大规模AI模型平台,技术与商业模式不断创新。本文分析全球最新技术进展,探讨云计算商业模式创新策略与实践,解析云服务厂商如何通过技术革新实现价值最大化,推动企业数字化与智能化转型。重点讨论AI与云计算的深度融合、边缘计算与去中心化发展、平台化与生态系统建设,以及数据安全与绿色云计算等关键议题。
1055 30
|
边缘计算 安全 网络安全
|
存储 传感器 编解码
微软行星云计算planet platform中的高分辨率影像通过API接入Google Earth Engine(GEE)
微软行星云计算planet platform中的高分辨率影像通过API接入Google Earth Engine(GEE)
835 0
微软行星云计算planet platform中的高分辨率影像通过API接入Google Earth Engine(GEE)
|
SQL 机器学习/深度学习 运维
用公有云的创新速度演进混合云,微软再立云计算产业新标杆
用公有云的创新速度演进混合云,微软再立云计算产业新标杆
484 0
|
数据采集 API 云计算
好消息:微软行星云计算更新发布了Planet Science Update
好消息:微软行星云计算更新发布了Planet Science Update
326 0
好消息:微软行星云计算更新发布了Planet Science Update
|
9月前
|
人工智能 运维 安全
中企出海大会|打造全球化云计算一张网,云网络助力中企出海和AI创新
阿里云网络作为全球化战略的重要组成部分,致力于打造具备AI技术服务能力和全球竞争力的云计算网络。通过高质量互联网服务、全球化网络覆盖等措施,支持企业高效出海。过去一年,阿里云持续加大基础设施投入,优化海外EIP、GA产品,强化金融科技与AI场景支持。例如,携程、美的等企业借助阿里云实现业务全球化;同时,阿里云网络在弹性、安全及性能方面不断升级,推动中企迎接AI浪潮并服务全球用户。
1336 8
|
存储 安全 网络安全
云计算与网络安全:技术融合的双刃剑
在数字化浪潮中,云计算如同一股不可阻挡的力量,推动着企业和个人用户步入一个高效、便捷的新时代。然而,随之而来的网络安全问题也如影随形,成为制约云计算发展的阿喀琉斯之踵。本文将探讨云计算服务中的网络安全挑战,揭示信息保护的重要性,并提供实用的安全策略,旨在为读者呈现一场技术与安全的较量,同时指出如何在享受云服务带来的便利的同时,确保数据的安全和隐私。
279 6
|
存储 人工智能 安全
云计算与网络安全:技术融合与挑战
在数字化时代的浪潮中,云计算和网络安全已成为推动社会进步的两大关键技术。本文将探讨云计算服务的发展,网络安全的重要性,以及信息安全技术的演进。我们将通过实例分析,揭示云服务如何增强数据保护,网络安全措施如何应对新兴威胁,以及信息安全技术的创新如何为企业带来竞争优势。文章旨在为读者提供对云计算和网络安全领域的深入理解,并展示它们如何共同塑造我们的未来。
|
存储 安全 网络安全
云计算与网络安全:探索云服务的安全挑战与策略
在数字化的浪潮下,云计算成为企业转型的重要推手。然而,随着云服务的普及,网络安全问题也日益凸显。本文将深入探讨云计算环境下的安全挑战,并提出相应的防护策略,旨在为企业构建安全的云环境提供指导。

热门文章

最新文章