1

我有两个 netcdf 格式的空间数据集。它们具有相同的时间、维度、坐标和数据变量。但它们适用于不同的空间坐标。在下面,我尝试通过多边形显示我的两个数据集:

import glob
import xarray as xr 
import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

file1 = '20190109T071048.nc'
file2 = '20190109T085117.nc'

ds1 = xr.open_dataset(file1, group='PRODUCT')
ds2 = xr.open_dataset(file2, group='PRODUCT')

PATH_TO_GPK = 'Study_Area.gpkg'
SA = gpd.read_file(PATH_TO_GPK, layer='Study_Area')

第一个数据集图:

plt.figure(figsize=(12,8))
ax = plt.axes()
ds1.qa_value.isel(time = 0).plot(ax = ax, x='longitude', y='latitude')
SA.plot(ax = ax, alpha = 0.8, facecolor = 'none')

在此处输入图像描述

第二个数据集图:

plt.figure(figsize=(12,8))
ax = plt.axes()
ds2.qa_value.isel(time = 0).plot(ax = ax, x='longitude', y='latitude')
SA.plot(ax = ax, alpha = 0.8, facecolor = 'none')

在此处输入图像描述

我想将这两个 netcdf 文件与 xarray 合并。

combined = xr.merge([ds1, ds2], compat='no_conflicts')

错误:

MergeError: conflicting values for variable 'latitude' on objects to be combined. You can skip this check by specifying compat='override'.

尝试过:

combined = xr.merge([ds1, ds2], compat='override')

但情节combined与上面的第一个情节相同。然后尝试:

combined = xr.combine_by_coords([ds1,ds2], compat='no_conflicts')

错误:

Could not find any dimension coordinates to use to order the datasets for concatenation

然后尝试:

combined = xr.combine_nested([ds1,ds2], concat_dim=["time"])

并且情节combined再次与第一个情节相同。根据ThomasNicolas 的建议,我使用了以下代码:

ds = xr.open_mfdataset([file1, file2], combine='nested')

但它返回此错误:

AttributeError: 'Dataset' object has no attribute 'qa_value'

结果中没有任何数据:

在此处输入图像描述

第一个数据集的打印(例如)显示:

print (ds1)

<xarray.Dataset>
Dimensions:                          (corner: 4, ground_pixel: 450, scanline: 3245, time: 1)
Coordinates:
  * scanline                         (scanline) float64 0.0 1.0 ... 3.244e+03
  * ground_pixel                     (ground_pixel) float64 0.0 1.0 ... 449.0
  * time                             (time) datetime64[ns] 2019-01-03
  * corner                           (corner) float64 0.0 1.0 2.0 3.0
    latitude                         (time, scanline, ground_pixel) float32 ...
    longitude                        (time, scanline, ground_pixel) float32 ...
Data variables:
    delta_time                       (time, scanline) timedelta64[ns] 08:07:0...
    time_utc                         (time, scanline) object '2019-01-03T08:0...
    qa_value                         (time, scanline, ground_pixel) float32 ...  

对这些文件的合并或组合有什么建议吗?

更新

根据@dl.meteo 的建议,我使用satpy库来解决我的问题,它似乎可以合并两个 netcdf 文件但不能完全合并,你可以在合并的图像中看到不正确的部分(红色边界)。能satpy正确做到吗?

# Read NetCDF files
from satpy import Scene
import glob
    
filenames = glob.glob('myfiles*.nc')
scn = Scene(filenames=filenames, reader='tropomi_l2')
scn.load(['qq'])

mask = SA_mask_poly.mask(d, lat_name='latitude', lon_name='longitude')
out_sel = d.compute().where(mask == 0, drop=True)

plt.figure(figsize=(12,8))
ax = plt.axes()
out_sel.plot(ax = ax, x='longitude', y='latitude')
SA.plot(ax = ax, alpha = 0.8, facecolor = 'none', lw = 1)

在此处输入图像描述

4

0 回答 0