我有两个 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)