eccodes grib iterator

参考http://download.ecmwf.int/test-data/eccodes/html/classeccodes.html#ae9e9bae052da5148e4a0ca85f31c69b5

codes_iterator 结构

代码迭代器,一个支持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_onlycodes_skip_duplicatescodes_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_nearest

函数

codes_iterator *  codes_grib_iterator_newcodes_handle * h,无符号长标志,int *错误)
  使用当前的几何图形和值,从GRIB句柄创建一个新的迭代器。 更多...
 
整型  codes_grib_get_datacodes_handle * h,double * lats,double * lons,double * values)
  获取纬度/经度和数据值。 更多...
 
整型  codes_grib_iterator_nextcodes_iterator * i,double * lat,double * lon,double * value)
  从迭代器获取下一个值。 更多...
 
整型  codes_grib_iterator_previouscodes_iterator * i,double * lat,double * lon,double * value)
  从迭代器获取先前的值。 更多...
 
整型  codes_grib_iterator_has_nextcodes_iterator * i)
  迭代器中的值的测试程序。 更多...
 
整型  codes_grib_iterator_resetcodes_iterator * i)
  迭代器中的值的测试程序。 更多...
 
整型  codes_grib_iterator_deletecodes_iterator * i)
  释放迭代器的内存。 更多...
 
codes_nearest *  codes_grib_nearest_newcodes_handle * h,int * error)
  使用当前的几何图形,从句柄创建一个新的最近的。 更多...
 
整型  codes_grib_nearest_findcodes_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_deletecodes_nearest * nearest)
  释放内存中的最近数据。 更多...
 
整型  codes_grib_nearest_find_multiplecodes_handle * h,int is_lsm,double * inlats,double * inlons,long npoints,double * outlats,double * outlons,double * values,double * distances,int * indexs)
  找出一组点的最近点,这些点的纬度和经度分别在inlats,inlons数组中给出。 更多...
 

详细说明

函数文档

 整型 codes_grib_get_data(h, lats, lons, values) 

获取纬度/经度和数据值。

调用函数前,纬度,经度和值的数组必须正确分配。可以通过获取整数关键字“ 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 关键字比较)

 

主函数 

从文件中创建 codes_grib_new_from_file(f)
获得bitmap数组
进行完整测试
获得值
查看是否
 
什么是GRIB 的bitmap https://confluence.ecmwf.int/display/UDOC/What+is+the+GRIB+bitmap+-+ecCodes+GRIB+FAQ
bitmap 是一个二进制数组。它是用来表示每个格点是否有值存在。值为“0”表示数据是缺少的,值为“1”表示数据是存在的。
注意:bitmap是可选的。如果不存在,则表示每个格点都有值。
为了节省空间,bitmap被用来有效地指示那些实际出现在Data Section中的数据点。
bitmap
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

 
posted @ 2020-11-15 22:02  chinagod  阅读(343)  评论(0)    收藏  举报