在这里,我有一个区域排放清单,主要包含的变量纬度
,朗
,发射
,发射
形状是(纬度、经度)
.
例如:
现在,我必须根据地理坐标绘制排放图(纬度、经度)
到WRF模型网格,它可能看起来像99 * 99
网格间距为3公里
,或87 * 87
网格间距为1公里
.
在绘制地图的过程中,似乎涉及到排放清单旧网格面积的计算。
我不知道该怎么办。有什么有效的处理方法吗?
谢谢你的帮助。
江南体育网页版地球科学堆栈交换是一个为那些江南电子竞技平台对地质学、气象学、海洋学和环境科学感兴趣的人提供的问答网站。注册只需要一分钟。
注册加入这个社区吧在这里,我有一个区域排放清单,主要包含的变量纬度
,朗
,发射
,发射
形状是(纬度、经度)
.
例如:
现在,我必须根据地理坐标绘制排放图(纬度、经度)
到WRF模型网格,它可能看起来像99 * 99
网格间距为3公里
,或87 * 87
网格间距为1公里
.
在绘制地图的过程中,似乎涉及到排放清单旧网格面积的计算。
我不知道该怎么办。有什么有效的处理方法吗?
谢谢你的帮助。
我建议使用cdo来达到你的目的。至少对于变量(其值与网格单元格大小无关),可以使用cdo。
cdo (Climate Data Operators)是一个处理netCDF和GRIB文件的命令行程序。它是由德国汉堡马克斯-普朗克气象研究所的Uwe Schulzweida及其同事开发和维护的。
Cdo提供了不同的操作符来处理数据。您可以在一个命令中链接多个操作符。你总是从呼叫cdo开始。例子:
cdo OPERATOR1 -OPERATOR2 -OPERATOR3 inputfile1。数控inputfile2。数控outputfile。nc cdo OPERATOR1 -OPERATOR2 inputfile1。nc -OPERATOR3 inputfile2。数控outputfile.nc
第一个运算符只是被追加到cdo
.所有进一步追加的操作符都需要-
作为后缀。
假设我们有两个文件(file1.nc
而且file2.nc
)及部分海洋数据(风场
,盐度
,u
,v
,……)。我们要计算的是风场
两个文件。这是通过
Cdo diff -selname,sst file1。Nc -selname,sst file2。数控outfile.nc
我们也可以分四个步骤做到这一点:
Cdo selname,sst file1。数控sst_of_file1。Nc cdo selname,sst file2。数控sst_of_file2。Nc cdo diff sst_of_file1。数控sst_of_file2。数控outfile.nc
Cdo为插值提供了不同的运算符。REMAPBIL
对于双线性插值,REMAPNN
用于最近邻插值,等等。它们都列在手册中。我使用remapbil
这里举个例子。
cdo remapbil,NEW_GRID_DEF file_old_grid。数控file_new_grid.nc
的file_old_grid.nc
您的输入文件和file_new_grid.nc
是您的输出文件。下面是我在GitHub工作的一个例子:
输入文件上的网格定义file_old_grid.nc
需要得到cdo的认可。要测试一下,是否认不出来就可以试试
Cdo griddes file_old_grid.nc
如果它打印出正确的网格定义,那么一切都没问题。如果不是,则需要更正long - latgrid的定义。详情请参阅以下各部分。
的NEW_GRID_DEF
是一个文件,其中描述了目标网格。如果目标网格是一个定义良好的网格,则可以手动编写此文件。例如,它看起来像这样(复制自cdo的HTML手册):
Gridtype = lonlat xsize = 60 ysize = 30 xfirst = -177 xinc = 6 yfirst = -87 yinc = 6
有关“CDO网格”及“网格描述”,请参阅cdo HTML手册在此基础上,还可以举出更多的例子和解释。
如果您没有一个定义良好的网格,您可以生成您的NEW_GRID_DEF
.这是我经常做的,因为我们的化学传输模型设置需要一个不精确定义的网格。
Cdo griddes file_with_wrf_grid_definition。nc > NEW_GRID_DEF
在file_with_wrf_grid_definition.nc
,需要定义模型网格,并由cdo进行识别。下面是我在GitHub工作的一个例子:
cdo假设您的文件符合CF公约(气候及预报公约).请参阅CF公约文件的相关章节,以获得总体描述。
工作网格定义可以如下所示(作为ndump输出):
维度:时间=无限;//(1当前)lay = 1;Lat = 78;Lon = 62;变量:float lat(lat, lon);纬度:long_name = "纬度";纬度:单位=“北纬”;纬度:var_desc = "纬度(南向负)”;lat:cell_methods = "TSTEP, LAY: mean"; float lon(lat, lon) ; lon:long_name = "longitudes " ; lon:units = "degree east " ; lon:var_desc = "longitude (west negative) " ; lon:cell_methods = "TSTEP, LAY: mean" ; float DATA_VAR(time, lay, lat, lon) ; DATA_VAR:long_name = "some long var name" ; DATA_VAR:units = "some unit" ; DATA_VAR:var_desc = "some description" ; DATA_VAR:coordinates = "lat lon" ;
重要的方面是数据变量有一个属性坐标
,该值包含两个lon和lat维度变量(我附上了第二个示例,以便更清楚)。此外,standard_name
而且单位
属性应该在维度变量处正确设置。
维度:时间=无限;//(1当前)lay = 1;Lat = 78;Lon = 62;变量:float lat_1(lat, lon);Lat_1:long_name = "latitudes ";Lat_1:standard_name = "latitudes ";Lat_1:单位=“北纬”;Lat_1:var_desc = "纬度(南向负)"”; float lon_1(lat, lon) ; lon_1:long_name = "longitudes " ; lon_1:standard_name = "longitudes " ; lon_1:units = "degree east " ; lon_1:var_desc = "longitude (west negative) " ; float DATA_VAR(time, lay, lat, lon) ; DATA_VAR:long_name = "some long var name" ; DATA_VAR:standard_name = "the standard name" ; DATA_VAR:units = "some unit" ; DATA_VAR:var_desc = "some description" ; DATA_VAR:coordinates = "lat_1 lon_1" ;
不知道怎么用cdo
公斤
,我remapbil
它是一个87 * 87
直接域名的话,结果似乎有点奇怪。最大值从169857
来2771
公斤。是因为没有考虑网格单元面积还是别的什么?然而,当我第一次使用gridboxsum 5 5
命令然后remapbil
时,数据的最大值才减小到124262
公斤。我很困惑?
\ endgroup美元
gridarea
计算cell_area
,然后将其合并到文件中,然后使用expr
与new_variable = original_variable / cell_area
为了得到一个new_variable
与Kg / m2 / h
。但形状original_variable
是(时间、纬度、经度)
的形状cell_area
是(纬度、经度)
你有什么处理的经验吗?
\ endgroup美元
Cdo div文件。Nc网格区域文件。数控outfile.nc
能得到通缉的价值吗new_variable
,但我不确定整个过程是否正确?自后remapbil
时,最大值会从4.46
来0.073
.
\ endgroup美元
使用R:
好了,
由于您有不同分辨率的数据,我建议您将数据转换为栅格,并重新采样以匹配wrf_inputs的网格单元格。注意质量守恒。然后将您的光栅转换为矩阵,data.frame,或'POLYGON'的空间特征,然后创建wrf_chemi文件
步骤:
请阅读每个R包的文档:光栅,ratmos,科幻小说,静脉,eixport.
您可以通过以下方法对数据进行光栅化:
库(光栅)devtools: install_github(“ibarraespinosa / ratmos”)图书馆(ratmos)图书馆(sf)图书馆(静脉)图书馆(eixport) r <——光栅(emissions.tif) #或.nc光栅将使用gdal知道ri < - raster_wrf (wrfinput_d02) spplot (ri,鳞片=列表(画= T)) #检查图#然后它应该这样new_r < -作物(r, ri) #作物数据到新的光栅new_r < -重新取样(new_r ri) #检查选项df < - st_as_sf (rasterToPolygons (new_r)) #创建数组。检查你是否需要旋转你的数组一个<- griddemissionsarray (df cols = ncol(ri), rows = nrow(ri), rotate = T) #创建你的wrfchemi wrf_create('wrfinput', 'path_to_wrfchemi',…, '污染物')#,然后将您的排放在wrfchemi wrf_put('path_to_wrfchemi', ' name_of_污染物',a)
如果你需要帮助,给我发电子邮件sergio.ibarra@usp.br
最好的,塞吉奥
gC / m2 / d
.您可以在不考虑网格单元格大小的情况下对该数据集进行插值。我做这样的重映射任务cdo.如果你想用cdo对Hestia数据集做同样的事情,也许可以使用这个选项setgridarea
有帮助——但我不确定。但一般来说:是的,有人(程序或您)必须计算网格单元面积。 \ endgroup美元cdo
第一。 \ endgroup美元