MODIS LST 切片串联或与 xarray 的合并问题

问题描述 投票:0回答:1

我在连接两个

xarray
数据文件时遇到问题。这两个文件(MODIS LST,通过 STAC API 访问)来自相同的日期/时间,但对应于相邻的地理图块(并排,按经度或 x)。当我使用
xr.concat()
函数时,一切正常,没有任何错误,但是当我可视化数据时,我注意到许多垂直白线,如下图所示(似乎是无数据值)。当我绘制各个文件(来自同一时间步骤)时,数据存在于出现垂直线的区域中(这些数字此处未显示)。

如果有人想尝试的话,下面提供了一个可重现的示例:

import pystac_client
import stackstac
import planetary_computer
import xarray as xr
import pandas as pd

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

# time range
time_range = "2000-10-01/2000-10-30"

# tile 1
bbox = [75, 30, 80, 32]
search = catalog.search(collections=["modis-11A2-061"], bbox=bbox, datetime=time_range)
items = search.get_all_items()
ds_d_t1 = stackstac.stack(items, epsg=4326, chunksize='auto', assets=["LST_Day_1km"], properties=False)
ds_d_t1 = ds_d_t1.rename("LST")

# tile 1
bbox = [66, 35, 67, 37]
search = catalog.search(collections=["modis-11A2-061"], bbox=bbox, datetime=time_range)
items = search.get_all_items()
ds_d_t2 = stackstac.stack(items, epsg=4326, chunksize='auto', assets=["LST_Day_1km"], properties=False)
ds_d_t2 = ds_d_t2.rename("LST")

# lets handle the time, because there is no proper time coordinate
# extract year and day of the year from MODIS ID
def get_date(modis_id):
    year = int(modis_id.split('.')[1][1:5])
    day_of_year = int(modis_id.split('.')[1][5:])
    date = pd.to_datetime(str(year) + str(day_of_year), format='%Y%j')
    return date

# create a new time coordinate variable using the get_date function
ds_d_t1['time'] = xr.DataArray([get_date(modis_id) for modis_id in ds_d_t1['id'].values], 
                               dims='time', coords={'time': ds_d_t1['time']})

ds_d_t2['time'] = xr.DataArray([get_date(modis_id) for modis_id in ds_d_t2['id'].values],
                          dims='time', coords={'time': ds_d_t2['time']})

ds_d_t1 = ds_d_t1.sortby('time')
ds_d_t2 = ds_d_t2.sortby('time')

# concat
ds_m = xr.concat([ds_d_t1, ds_d_t2], dim="x")
ds_m = ds_m.sortby('x')

# visualise
ds_m[0].plot()

这是输出图,有很多垂直白线: enter image description here

任何有关正确连接这些文件的帮助将不胜感激。

python numpy-ndarray python-xarray rasterio
1个回答
0
投票

不确定它是否有帮助,但这似乎与两个图块中的 x 坐标不相同这一事实有关。人们可以通过检查(运行代码后)来验证这一点:

xmin = 69.270598
ds_d_t1[0].x[ds_d_t1[0].x > xmin].values
ds_d_t2[0].x[ds_d_t2[0].x > xmin].values

看到网格坐标不一样。

如果 xarray 合并失败(我找不到一个好的方法来使其正常工作),绘图的解决方法可能是:

import matplotlib.pyplot as plt

# Plot the first dataset with a single colorbar
plt.figure(figsize=(10, 6))
ds_d_t1[0].plot(add_colorbar=False)
ds_d_t2[0].plot()

# extend plot to entire boundaries
min_lon, max_lon = ds_m.x.min().values, ds_m.x.max().values
min_lat, max_lat = ds_m.y.min().values, ds_m.y.max().values

ax = plt.gca()

ax.set_xlim([min_lon, max_lon])
ax.set_ylim([min_lat, max_lat])

# Add labels and legend
plt.title("Combined")
plt.show()

这至少应该可以让您避免看到的伪影:

Combined tiles

© www.soinside.com 2019 - 2024. All rights reserved.