爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9410|回复: 13

[混合编程] IDL编程学习之读取nc/NetCDF文件

[复制链接]

新浪微博达人勋

发表于 2018-9-7 14:24:39 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
------第一部分:基础知识------
nc文件简介:
1、nc文件=netCDF文件∈二进制文件;
2、一个NetCDF数据集包含维(dimensions)、变量(variables)、属性(attributes),每种类型都会被分配一个名字和一个ID;
3、变量存储实际数据,维给出了变量维度信息,属性则给出了单位等信息;
------第二部分:读取netCDF案例------
nc文件见附件
;文件路径:
  file='C:\Users\Administrator\Desktop\BPLH.nc'
;获取文件ID:
  file_id = ncdf_open(file, /nowrite )
;下面需要获取结构体变量名,根据名字把数据读出来
;返回值file_info是个结构体,给出了维度数、变量数,根据变量数我们进行循环:
  file_info = ncdf_inquire( file_id )
  FOR varid=0, file_info.nvars-1 DO BEGIN
    var = ncdf_varinq( file_id, varid )
;看一下文件中的变量名字
    help,var.name
    lonid = ncdf_varid(file_ID,var.name)
    ncdf_varget, file_id, lonid,mid_var
;把文件中每个量,赋给相同名字的变量
    (scope_varfetch(var.name,/enter))=mid_var
;看看我转了之后的变量名,跟原始名字应该是一样的
    print,var.name
  ENDFOR
;在知道变量名后,help下,这样数据就读出来了,撒花!
  help,longitude,latitude,time,blh
;我们知道了:
LONGITUDE       FLOAT     = Array[253]
LATITUDE        FLOAT     = Array[205]
TIME            LONG      = Array[248]

BLH             INT       = Array[253, 205, 248]

BPLH.nc

24.54 MB, 下载次数: 5, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-9-7 15:20:44 | 显示全部楼层
netCDF中,不能直接用“结构体名.成员名”取数据
数据和变量名、数据类型等放在一个结构体中
首先,我们用ncdf_inquire( file_id)了解有几个变量
这个函数的返回值是个结构体:
   NDIMS           LONG                 3
   NVARS           LONG                 4
   NGATTS          LONG                 2
   RECDIM          LONG                 2
它告诉我们,数据是三维的,有4个变量
(后面俩我也不知道有什么用,遇到了再说)
根据上楼的例子,NVars似乎是包含NDims的,
所以我们想获取所有变量,只要看nvars即可;
对于第i个变量,获取该变量的结构体(这个变量还是以结构体形式存的)

    var = ncdf_varinq( file_id,i)
返回值是个结构体,我们要的是变量名字的字符串
    var_id = ncdf_varid(file_ID,var.name)
我做个中间值mid_var用来装变量的数据
    ncdf_varget, file_id, var_id,mid_var
    (scope_varfetch(var.name,/enter))=mid_var

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-9-7 15:26:32 | 显示全部楼层
根据一楼读取的数据绘图,叠加地图,方式有3种:
1、用icontour画图,另存为kmz格式;
2、用icontour画图,另存为kmz格式;
3、用icontour画图,用insert下拉菜单加载国界河流,
可惜没有省界,只有美国和加拿大可以加载州界和省界;
TIM截图20180906160204.jpg

contour.kmz

1.24 MB, 下载次数: 1, 下载积分: 金钱 -5

idl_icontour.kmz

1.24 MB, 下载次数: 4, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-9-7 16:27:42 | 显示全部楼层
谢谢楼主分享,学习中
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-9-7 17:11:32 | 显示全部楼层
午后阳光 发表于 2018-9-7 16:27
谢谢楼主分享,学习中

有什么资料啦、问题啦,都可以分享出来,很多进步都是在解决问题中获得的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-2-25 22:06:52 | 显示全部楼层
原来,IDL有nc文件的读取导航界面
IDL.NC.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-21 14:35:06 | 显示全部楼层
请问楼主,可以自定义叠加地图吗,比如我只要青藏高原地区的背景地图,不要大洲大陆国家界线等
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-3-21 15:44:38 | 显示全部楼层
SonGoku 发表于 2019-3-21 14:35
请问楼主,可以自定义叠加地图吗,比如我只要青藏高原地区的背景地图,不要大洲大陆国家界线等

可以直接铺在谷歌地球上,或者谷歌地图,或者百度地图,或者高德地图.........
参考我的这个帖子:
http://bbs.06climate.com/forum.p ... p;extra=&page=1
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-10-8 16:38:58 | 显示全部楼层
楼主,可否写下代码:如何把nc文件中许多年的数据输出为tiff格式?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-9 08:39:43 | 显示全部楼层
cgb 发表于 2019-10-8 16:38
楼主,可否写下代码:如何把nc文件中许多年的数据输出为tiff格式?

write_tiff函数即可输出,不知具体数据是什么样的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表