GRIB API 的安裝和使用(一)

前言

筆者最近使用模式場(chǎng)的數(shù)據(jù)時(shí), 遇到了大量的grib2格式的數(shù)據(jù), 用NCL進(jìn)行文件I/O提取廓線數(shù)據(jù)盡管方便,但是效率極其低下,比如做一個(gè)80x60格點(diǎn)的廓線數(shù)據(jù)提取寫入ASCII編碼文件,花了4個(gè)小時(shí)。

因此由于要進(jìn)行RTTOV傳輸模式的研究,必須要進(jìn)行大規(guī)模的廓線數(shù)據(jù)處理,決心轉(zhuǎn)戰(zhàn)GRIB2-API的FORTRAN API, 據(jù)稱可以大大提高文件I/O效率

GRIB-API 由 ECMWF 開發(fā),放出官方主頁:

https://confluence.ecmwf.int//display/GRIB/Releases

話不多說,我們開始操作吧


一.JPEG 依賴庫

要讀取GRIB文件中的數(shù)組,我們要先安裝一個(gè)JPEG庫, 有兩種安裝方式

  1. 編譯安裝
    官網(wǎng), 編譯安裝比較簡單,就不細(xì)說了

http://www.ijg.org/

  1. 或者使用Ubuntu自帶的庫包管理系統(tǒng)
$ sudo apt-get install libjpeg-dev

筆者使用的是前者(編譯安裝),安裝目錄在/usr/local/jpeg-9/下

二. GRIB API without jasper

下載到的包是release版本 grib_api-1.27.0-Source.tar.gz
在目錄下解壓

$ tar -zxvf grib_api-1.27.0-Source.tar.gz

查看以下Readme文件,按照提示操作:


readme_gribapi.PNG
$ mkdir build
$ cd build
$ sudo cmake ../grib_api-1.27.0-Source -DCMAKE_INSTALL_PREFIX=/usr/local/gribapi -DNETCDF_PATH=/usr/local/NETCDF -DJPEG_LIBRARY=/usr/local/jpeg-9/lib -DJPEG_INCLUDE_DIR=/usr/local/jpeg-9/include -DOPENJPEG_LIBRARY=/usr/local/openjpeg/lib -DOPENJPEG_INCLUDE_DIR=/usr/local/openjpeg/include

如果報(bào)錯(cuò)沒有cmake工具,不妨 apt-get 安裝一下

Cmake聲明依賴環(huán)境路徑的方式比較特殊,要在前面加一個(gè)“D”

未檢測(cè)到NETCDF安裝.PNG
$ make
$ ctest
$ sudo make install

ctest時(shí)可能測(cè)試需要下載一些網(wǎng)絡(luò)文件,會(huì)比較慢,需要耐心等待,出現(xiàn)download測(cè)試點(diǎn)FAIL也不用擔(dān)心,主要是我們偉大的墻....

安裝完后,我們看看bin目錄下有這些可執(zhí)行文件:

-rwxr-xr-x 1 root root 18640 Sep 1 21:08 big2gribex*
-rwxr-xr-x 1 root root 24240 Sep 1 21:08 gg_sub_area_check*
-rwxr-xr-x 1 root root 876 Sep 1 21:00 grib1to2*
-rwxr-xr-x 1 root root 26488 Sep 1 21:08 grib2ppm*
-rwxr-xr-x 1 root root 20960 Sep 1 21:08 grib_add*
-rwxr-xr-x 1 root root 32272 Sep 1 21:08 grib_cmp*
-rwxr-xr-x 1 root root 581880 Sep 1 21:08 grib_compare*
-rwxr-xr-x 1 root root 530800 Sep 1 21:08 grib_convert*
-rwxr-xr-x 1 root root 523544 Sep 1 21:08 grib_copy*
-rwxr-xr-x 1 root root 18880 Sep 1 21:08 grib_corruption_check*
-rwxr-xr-x 1 root root 31416 Sep 1 21:08 grib_count*
-rwxr-xr-x 1 root root 522256 Sep 1 21:08 grib_debug*
-rwxr-xr-x 1 root root 20920 Sep 1 21:08 grib_distance*
-rwxr-xr-x 1 root root 526328 Sep 1 21:08 grib_dump*
-rwxr-xr-x 1 root root 46048 Sep 1 21:08 grib_error*
-rwxr-xr-x 1 root root 524768 Sep 1 21:08 grib_filter*
-rwxr-xr-x 1 root root 526808 Sep 1 21:08 grib_get*
-rwxr-xr-x 1 root root 539632 Sep 1 21:08 grib_get_data*
-rwxr-xr-x 1 root root 22056 Sep 1 21:08 grib_histogram*
-rwxr-xr-x 1 root root 525112 Sep 1 21:08 grib_index_build*
-rwxr-xr-x 1 root root 20280 Sep 1 21:08 grib_info*
-rwxr-xr-x 1 root root 527624 Sep 1 21:08 grib_keys*
-rwxr-xr-x 1 root root 29312 Sep 1 21:08 grib_list_keys*
-rwxr-xr-x 1 root root 540416 Sep 1 21:08 grib_ls*
-rwxr-xr-x 1 root root 36472 Sep 1 21:08 grib_moments*
-rwxr-xr-x 1 root root 25880 Sep 1 21:08 grib_packing*
-rwxr-xr-x 1 root root 24768 Sep 1 21:08 grib_parser*
-rwxr-xr-x 1 root root 20312 Sep 1 21:08 grib_repair*
-rwxr-xr-x 1 root root 525008 Sep 1 21:08 grib_set*
-rwxr-xr-x 1 root root 40616 Sep 1 21:08 grib_to_json*
-rwxr-xr-x 1 root root 33584 Sep 1 21:08 tigge_accumulations*
-rwxr-xr-x 1 root root 275712 Sep 1 21:08 tigge_check*
-rwxr-xr-x 1 root root 31344 Sep 1 21:08 tigge_name*
-rwxr-xr-x 1 root root 24688 Sep 1 21:08 tigge_split*

添加到環(huán)境變量

export PATH=/usr/local/gribapi/bin:$PATH

筆者對(duì)安裝好的GRIB API做了一個(gè)測(cè)試:

$ grib_dump rmf.gra.2018070800003.grb2 > rmf.gra.2018070800003.grb2.dumped

發(fā)現(xiàn)有大量報(bào)錯(cuò)提示JPEG庫沒有安裝

JPEG庫本質(zhì)上是一個(gè)圖像encoding/decoding庫包,依賴該庫包編譯的GRIB_API才能對(duì)編碼的數(shù)據(jù)進(jìn)行讀寫。正因?yàn)樽x寫GRIB數(shù)據(jù)需要解碼/編碼,因此速度非常慢

原來筆者需要讀取的數(shù)據(jù)打包格式是grid_jpeg, 如果不安裝支持JPEG那么就無法正常解碼并讀取這些數(shù)據(jù),因此務(wù)必要在GRIB_API編譯安裝時(shí)依賴JPEG庫

3-grib_list.PNG

JPEG庫有兩種選擇

  1. OPENJPEG (<= 1.5.2)
  2. JASPER

筆者這里選擇了JASPER

三 JASPER 庫的編譯安裝

jasper 官網(wǎng)

http://www.ece.uvic.ca/~frodo/jasper/

編譯安裝, 按照Readme中的說明,筆者使用CMAKE工具

$ mkdir build
$ cd build
$ cmake ../jasper-2.0.14/ -DCMAKE_INSTALL_PREFIX=/usr/local/jasper
$ make
$ ctest
$ sudo make install

ctest 通過即可

四. GRIB API with jasper

!!!!!!!!!!!!!!!!!!!!!!!!!!!!
找了很多方案使用Cmake編譯GRIBAPI 依賴 jasper 庫
CMake 監(jiān)測(cè) Jasper 庫連接會(huì)有一些問題,原因不明, 筆者暫時(shí)沒有時(shí)間仔細(xì)研究,歡迎評(píng)論補(bǔ)充

$ cmake ../grib_api-1.27.0-Source -DCMAKE_INSTALL_PREFIX=/usr/local/gribapi -DJASPER_LIBRARIES=/usr/local/jasper/lib -DJASPER_INCLUDE_DIR=/usr/local/jasper/include -DJPEG_LIBRARIES=/usr/local/jpeg-9/lib

有幾種報(bào)錯(cuò):

    1. 找不到頭文件

fatal error: jasper/jasper.h: No such file or directory
compilation terminated.
src/CMakeFiles/grib_api.dir/build.make:4502: recipe for target 'src/CMakeFiles/grib_api.dir/grib_jasper_encoding.c.o' failed
make[2]: *** [src/CMakeFiles/grib_api.dir/grib_jasper_encoding.c.o] Error 1
CMakeFiles/Makefile2:1144: recipe for target 'src/CMakeFiles/grib_api.dir/all' failed
make[1]: *** [src/CMakeFiles/grib_api.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2

那是因?yàn)槟阒付ǖ膇nclude頭文件位置有一個(gè)jasper文件夾隱藏在下面, include目錄下沒有現(xiàn)成的頭文件, 解決方案之一是把藏在jasper文件夾下的.h全部拎出來

    1. 版本定義不兼容

.../GRIB_API/grib_api-1.27.0-Source/src/grib_jasper_encoding.c: In function ‘grib_jasper_encode’:
.../GRIB_API/grib_api-1.27.0-Source/src/grib_jasper_encoding.c:113:10: error: ‘jas_image_t {aka struct <anonymous>}’ has no member named ‘inmem_’
image.inmem_ = 1;
^
src/CMakeFiles/grib_api.dir/build.make:4502: recipe for target 'src/CMakeFiles/grib_api.dir/grib_jasper_encoding.c.o' failed
make[2]: *** [src/CMakeFiles/grib_api.dir/grib_jasper_encoding.c.o] Error 1
CMakeFiles/Makefile2:1144: recipe for target 'src/CMakeFiles/grib_api.dir/all' failed
make[1]: *** [src/CMakeFiles/grib_api.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2

參考 Github 上的 一個(gè) issue

https://github.com/cloudruninc/wps/issues/5

我們認(rèn)為是版本升級(jí)后和舊版本的不兼容問題,結(jié)構(gòu)分支已經(jīng)廢棄了, 注釋掉這行源碼就行

修改 : /src/grib_jasper_encoding.c 注釋掉 113行

3- comment out.PNG
  1. 找不到庫
    3.1 cmake時(shí)

WARNING: Target "grib_api" requests linking to directory "/usr/local/jasper/lib". Targets may link only to libraries. CMake is dropping the item.
WARNING: Target "grib_api" requests linking to directory "/usr/local/jpeg-9/lib". Targets may link only to libraries. CMake is dropping the item.
WARNING: Target "grib_api" requests linking to directory "/usr/local/jasper/lib". Targets may link only to libraries. CMake is dropping the item.
WARNING: Target "grib_api" requests linking to directory "/usr/local/jpeg-9/lib". Targets may link only to libraries. CMake is dropping the item.
WARNING: Target "grib_keys" requests linking to directory "/usr/local/jasper/lib". Targets may link only to libraries. CMake is dropping the item.
WARNING: Target "grib_keys" requests linking to directory "/usr/local/jpeg-9/lib". Targets may link only to libraries. CMake is dropping the item.

3.2 make時(shí)

undefined references to: 'jas_stream_memopen', 'jpc_decode', 'jas_matrix_create', 'jas_image_destroy', 'jpc_decode'

ECMWF 的 FAQ中提到了這個(gè)問題

https://confluence.ecmwf.int/display/OIFS/FAQ%3A+Frequently+Asked+Questions

3-FAQ.PNG

這就是剛剛筆者說的找不到連接庫的問題, 不是很明確Cmake有什么問題
添加 LD_LIBRARY_PATH 不 work
歡迎補(bǔ)充,因此放棄了cmake

!!!!!!!!!!!!!!!!!!!!!!!!!!!!

暫時(shí)就用./configure測(cè)試,發(fā)現(xiàn)沒有問題

$ cd grib_api-1.27.0-Source
$ ./configure --prefix=/usr/local/gribapi_withjasper --with-jasper=/usr/local/jasper
$ make
$ sudo make install

五. pygrib 安裝

這一部分主要參考一篇 CSDN 的文章

https://blog.csdn.net/learn_tech/article/details/78957655

先在環(huán)境下安裝 matplotlib
筆者用conda 環(huán)境管理

 $ conda install matplotlib
 $ conda install numpy
 $ conda install basemap
 $ conda install pyproj
 $ conda install geos

環(huán)境搭建好后主要看 pygrib 安裝

pygrib 有超出conda環(huán)境的依賴關(guān)系, 不能通過conda直接安裝, 需要指定依賴關(guān)系后編譯安裝

去github下載源碼

https://github.com/jswhit/pygrib/releases

筆者下載的是2.0.3版本

$ tar -zxvf  pygrib-2.0.3.tar.gz
$ cd  pygrib-2.0.3
$ cp setup.cfg.template setup.cfg 

修改配置文件

setup.config.PNG

改完后編譯安裝

$ python setup.py build
$ python setup.py install
$ python test.py
pygrib 安裝成功.PNG
test passed.PNG

打完收工, 測(cè)試成功。
下期講GRIB API的基本使用。


參考都放在隨筆中, 恕不在結(jié)尾另外列出

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評(píng)論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,634評(píng)論 3 419
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評(píng)論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,835評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,235評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,459評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,000評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,819評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,004評(píng)論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,257評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評(píng)論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,717評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,003評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容