eccodes grib iterator
参考http://download.ecmwf.int/test-data/eccodes/html/classeccodes.html#ae9e9bae052da5148e4a0ca85f31c69b5
代码迭代器,一个支持GRIB message中值的地理迭代结构
Codes iterator, structure supporting a geographic iteration of values in a GRIB message.
The documentation for this struct was generated from the following file:
codes_open_file(ifile,filename,mode,status) !根据模式打开文件
ifile 打开文件的ID(这个将会在后面所有的文件函数中都用到)
filename 被打开文件的文件名
mode 文件打开模式,可以是'r'(只读),‘w'(只写),'a'(追加)
status 状态,如果成功CODE_SUCCES, 如果失败返回整数
codes_grib_new_from_file(ifile, gribid, status) 从一个文件中加载GRIBmessage 到内存
ifile 用codes_open_file函数打开文件后,文件的ID
gribid 加载到内存中的GRIB ID
status 状态,如果成功CODE_SUCCES, 如果失败返回整数
codes_iterator* codes_grib_iterator_new(h,flags,error)
h : 来自将会被创建的handle
flags: 为后面使用的标记
error : error code
返回值: 新的迭代,如果没有迭代被创建,则返回NULL
子程序 codes_keys_iterator_new(msgid,iterid,namespace,status)
根据关键字创建一个新的迭代
可以用关键字迭代器(keys iterator)来得到所有的关键字的名称,然后就可以用codes_get 和 codes_set 来得到和设置keys 的值。返回的可以被用来使用用输入变量命名或者使用函数
返回的关键字集合可以通过输入变量名称空间或使用函数 codes_skip_read_only, codes_skip_duplicates, codes_skip_coded,codes_skip_computed来控制。如果命名空间是非空字符串,则只返回属于该命名空间的键。示例名称空间是“ls”(获取与grib_ls相同的默认键)和“mars”以获取mars使用的键。
如果出现错误,如果未给出状态参数(可选),程序将退出并显示错误消息。
否则,错误消息可以用代码\codes_get_error_string收集。
参数
msgid 加载到内存的消息(message)的id
iterid 在关键字迭代函数(keys iterator functions)中用到的关键字迭代id
namespace 要搜索到的关键字的名称(如果为空,则搜索所有)
status 如果是正确的,返回CODES_SUCCESS,如果错误返回整数
函数 |
|
| codes_iterator * | codes_grib_iterator_new(codes_handle * h,无符号长标志,int *错误) |
| 使用当前的几何图形和值,从GRIB句柄创建一个新的迭代器。 更多... | |
| 整型 | codes_grib_get_data(codes_handle * h,double * lats,double * lons,double * values) |
| 获取纬度/经度和数据值。 更多... | |
| 整型 | codes_grib_iterator_next(codes_iterator * i,double * lat,double * lon,double * value) |
| 从迭代器获取下一个值。 更多... | |
| 整型 | codes_grib_iterator_previous(codes_iterator * i,double * lat,double * lon,double * value) |
| 从迭代器获取先前的值。 更多... | |
| 整型 | codes_grib_iterator_has_next(codes_iterator * i) |
| 迭代器中的值的测试程序。 更多... | |
| 整型 | codes_grib_iterator_reset(codes_iterator * i) |
| 迭代器中的值的测试程序。 更多... | |
| 整型 | codes_grib_iterator_delete(codes_iterator * i) |
| 释放迭代器的内存。 更多... | |
| codes_nearest * | codes_grib_nearest_new(codes_handle * h,int * error) |
| 使用当前的几何图形,从句柄创建一个新的最近的。 更多... | |
| 整型 | codes_grib_nearest_find(codes_nearest * nearest,codes_handle * h,double inlat,double inlon,unsigned long flags,double * outlats,double * outlons,double * values,double * distances,int * indexes,size_t * len) |
| 找到纬度经度点的4个最近点。 更多... | |
| 整型 | codes_grib_nearest_delete(codes_nearest * nearest) |
| 释放内存中的最近数据。 更多... | |
| 整型 | codes_grib_nearest_find_multiple(codes_handle * h,int is_lsm,double * inlats,double * inlons,long npoints,double * outlats,double * outlons,double * values,double * distances,int * indexs) |
| 找出一组点的最近点,这些点的纬度和经度分别在inlats,inlons数组中给出。 更多... | |
详细说明
函数文档
获取纬度/经度和数据值。
调用函数前,纬度,经度和值的数组必须正确分配。可以通过获取整数关键字“ numberOfPoints”的值来获得其所需的大小。
参数
h :从中获取地理和数据值的句柄
lats :返回的纬度数组
lons :返回的经度数组
values:返回的数据值数组
返回值
如果无误,则为0,如果错误,返回整数
整型 codes_grib_iterator_delete ( i)
从内存中释放迭代器。
参数
i: 迭代器
返回值
如果为0,则为整数,表示错误
整型 codes_grib_iterator_has_next ( i )
测试迭代器的值的程序。
参数
i: 迭代器
返回值
布尔值,如果迭代器仍然有下一个值,则为1,否则为0
迭代器类型(codes_iterator*) codes_grib_iterator_new ( h, flags,error)
使用当前的几何图形和值从GRIB句柄创建一个新的迭代器。
参数
h:从中创建迭代器的句柄
flags :供将来使用的flags。
error : 错误代码
返回值
新的迭代器,如果无法创建任何迭代器,则为NULL
整型 codes_grib_iterator_next ( i, lat, lon, value)
从迭代器获取下一个值。
参数
i: 迭代器
lat:在输出纬度上
lon :关于输出经度
value:关于点的输出值
返回值
如果成功,则为正值;如果没有更多数据,则为0
整型 codes_grib_iterator_previous ( i, lat, lon, value)
从迭代器获取先前的值。
参数
i: 迭代器
纬度 :在输出纬度上
lons :关于输出经度
值 :关于点的输出值*
返回值
如果成功,则为正值;如果没有更多数据,则为0
int codes_grib_iterator_reset ( i )
迭代器中值的测试过程。
参数
i: 迭代器
返回值
如果为0,则为整数,表示错误
int codes_grib_nearest_delete ( nearest)
释放内存中的最近数据。
参数
nearest : 最近的,codes_nearest *类型
返回值
如果为0,则为整数,表示错误
整型 codes_grib_nearest_find ( nearest,h,inlat,inlon,flags,outlats,outlons,values,distances,indexes,len)
找到纬度经度点的4个最近点。
提供flags可以加快搜索过程。如果您确定要找的地点没有从一个调用更改为另一个调用,则可以使用CODES_NEAREST_SAME_POINT。这对于网格同样有效。可以将flags一起使用按位或。距离以公里为单位。
参数
nearest :nearest结构
h :从中获取地理和数据值的句柄
inlat:搜索点的纬度
inlons :要搜索的点的经度
flags :CODES_NEAREST_SAME_POINT,CODES_NEAREST_SAME_GRID
outlats :返回最近点的纬度数组
outlons :返回最近点的经度数组
values :返回最接近点的数据值数组
distances :返回距最近点的距离的数组
indexes :返回最接近点的索引数组
len :数组的大小
返回值
如果为0,则为整数,表示错误
int codes_grib_nearest_find_multiple ( h, is_lsm, inlats, inlons, npoints,outlats,outlons,values,distances,indexes)
找出一组点的最近点,这些点的纬度和经度分别在inlats,inlons数组中给出。
如果标记is_lsm为1,则返回最近的陆地点,并且作为手柄(h)传递的grib被认为是land sea mask。陆地最近点是指land sea mask 值> = 0.5的最近点。如果未找到最接近的陆地点,则返回最接近的值。如果flagsis_lsm为0,则返回最近的点。返回最接近点(ilons,ilats)的值,距离,索引(在“ values”数组中)。距离以公里为单位。
参数
h :从中获取地理和数据值的句柄
is_lsm :lsmflags(1->最近的地带,0->最近的)
inlats :要搜索的点的纬度
inlons:要搜索的点的经度
npoints:点数(inlats,inlons,outlats,outlons,值,距离,索引数组的大小)
outlats :返回最近点的纬度数组
outlons :返回最近点的经度数组
values :返回最接近点的数据值数组
distances :返回距最近点的距离的数组
indexes :返回最接近点的索引数组
返回值
如果正确,为0,如果错误,则为整数
codes_nearest类型* codes_grib_nearest_new ( h,error)
使用当前的几何图形从手柄创建一个新的最近的图形。
参数
h:从中创建迭代器的句柄
error: 错误代码
返回值
新的最接近值,如果无法创建最接近值,则为NULL
示例代码 https://confluence.ecmwf.int/display/ECC/grib_iterator_bitmap
如何使用在lat/lon/values上的迭代器,并且查询bitmap中的缺测值(不是拿每个值和missingvalue 关键字比较)
主函数
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 0 | 0 | 1 | 0 |
Encoded data
| 2.5 | 4.6 | ||
| 9.1 |
在上面的例子中,我们有12个格点,只有三个有实际的'real'值是{2.5, 4.6, 9.1}
bitmap大小是网格点的数目(ecCodes 关键字:numberOfPoints)
编码时,您可以使用键“missingValue”来告诉库哪些位置对应缺测值。
默认值为9999,但用户可以更改,例如超出正常数据范围的值。
还必须将键“bitmapPresent”设置为1。
当库遇到与数据数组中缺测值相等的值时,它会将该网格点的位图项设置为0。有关示例,请参见grib_set_bitmap
解码时,可以直接查询位图以发现丢失的数据值。有关示例,请参见 grib_iterator_bitmap
浙公网安备 33010602011771号