使用IDL进行netcdf文件读取,出图保存,转geotiff格式

Author:HanDi
上海某高校遥感专业 工科男
相信积微者速成,相信分享的力量
CSDN@这可真是难为我了

这是一个老师布置的小任务。中间包括nc文件的读取,出图样式的调整,色带的自定义花了很长时间去学习,查资料和实验。最终,效果还算满意。希望大家能少走一些弯路,这只是个简单的小示例,更详细的函数参数以及细微调整需要大家自己去动手实践。

初次写技术博客没有什么经验,如有不足,还请大家多多包涵,欢迎大家私信交流 ^ _ ^ !!!一起进步~
以后会分享一些地理数据处理和数据挖掘的示例

下面是完整代码,我的IDL版本是 IDL8.5

这里是原始示例数据
链接:https://pan.baidu.com/s/1iWObxXAVOJwGSqva7Ug9BA
提取码:bb9z

;This demo provides an illustration on how to read and visualize AOD in
; SCHAP dataset and write data into GeoTIFF in IDL.

; The demo was prepared with IDL8.5.

; Last updated: 2021-11-01
PRO read_SCHAP_AOD

  ;Determine compilation rules
  compile_opt idl2

  ;Set output path
  envi, /restore_base_save_files
  envi_batch_init
  CD, 'D:\'
  outpath = 'D:\test\'
  ; read AOD data from NetCDF file


  filearr = dialog_pickfile(/multiple_files,  title = 'Open the original nc file')

  num = n_elements(filearr)


  FOR i=0,num-1,1 DO BEGIN

    file_ID = ncdf_open(filearr, /nowrite )


    latid = NCDF_VARID(file_ID,'lat')       ;read latitude from NetCDF file
    NCDF_VARGET, file_ID, latid, lat
    nlat = N_ELEMENTS(lat)

    lonid = NCDF_VARID(file_ID,'lon')       ;read  longitude from NetCDF file
    NCDF_VARGET, file_ID, lonid, lon
    nlon = N_ELEMENTS(lon)

    AODid = NCDF_VARID(file_ID,'AOD')        ; read AOD data
    NCDF_VARGET, file_ID, AODid, AOD
    nAOD = N_ELEMENTS(AOD)
    ;Obtain the gain, offset, and fill values of AOD data, and perform calibration
    ncdf_attget,file_ID,AODid,'scale_factor',a
    ncdf_attget,file_ID,AODid,'add_offset',b
    ncdf_attget,file_ID,AODid,'_FillValue',fv
    fv_index = where(AOD eq fv)
    output_AOD = (AOD ne fv)*AOD*a+b
    ; define fillvalue
    output_AOD[fv_index] =-999

    ;visualization

    loadct, 33
    TVLCT, r, g, b, /get
    color_table = BYTARR(3, 256)
    color_table[0, *] = r
    color_table[1, *] = g
    color_table[2, *] = b
    color_table[*, 0] = [255, 255, 255]  ;Custom colorbar

    img=image(transpose(output_AOD),rgb_table=color_table,title=file,grid_units=2,POSITION=[0.1,0.15,0.9,0.95],map_projection='geographic', image_dimensions=[max(lon)-min(lon),max(lat)-min(lat)] ,$
      IMAGE_LOCATION=[min(lon),min(lat)],DIMENSIONS=[691,512])

    ;set colormap limits
    img.MAX_VALUE=2
    img.MIN_VALUE=0
    ;Change the figure title, grid type, axis text direction, and color bar form
    img.title = 'Date:'+strmid(file_basename(filearr),16,8)

    img.mapgrid.label_position=0
    img.mapgrid.font_name='Palatino'

    img.mapgrid.linestyle=6
    img.mapgrid.horizon_thick=1


    lons=img.mapgrid.longitudes
    lats=img.mapgrid.latitudes
    for lons_i=0,n_elements(lons)-1 do begin
      lons[lons_i].label_angle=0
      lons[lons_i].label_align=0
    endfor

    ; add colorbar
    c = COLORBAR(TARGET=img, ORIENTATION=1,TITLE='AOD',POSITION=[0.905,0.25,0.925,0.85])
    c.RANGE=[0,2]
    c.BORDER=0
    c.TICKDIR= 1
    c.TEXTPOS = 1

    ;save plot in jpg format with resolution
    Img.save,outpath+'SCHAP.AOD.D001.A'+strmid(file_basename(filearr),16,8)+'.jpg'
    ; save as GeoTIFF
    ;Write geographic information structure
    geo_info={$
      MODELPIXELSCALETAG:[0.01,0.01,0.0],$
      MODELTIEPOINTTAG:[0.0,0.0,0.0,min(lon),max(lat),0.0],$
      GTMODELTYPEGEOKEY:2,$
      GTRASTERTYPEGEOKEY:1,$
      GEOGRAPHICTYPEGEOKEY:4326,$
      GEOGCITATIONGEOKEY:'GCS_WGS_1984'}
      
    ;write GeoTIFF
    WRITE_TIFF,outpath+'SCHAP.AOD.D001.A'+strmid(file_basename(filearr),16,8)+'.tif',reverse(transpose(output_AOD),2),/float, geotiff=geo_info
    ;Close nc file ID
    NCDF_CLOSE, file_ID
  endfor

END

tip

快捷键:Ctrl + Shift+ F
可以根据格式器的设置自动调整编码大小写同时自动对齐

代码运行效果

全国20200101的AOD分布图

这里也要感谢
@环境遥感L.F点这里
@ 傻灰点这里,两位博主博客的帮助

如有错误,欢迎评论,私信,会及时改正

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
IDL是一种科学数据分析和可视化软件,在处理气象、遥感等领域的数据时,常常需要用到类似于NetCDF(nc)格式的数据。NC格式是一种用于存储科学数据的文件格式,其中包含了数据数组和对数组的描述信息。在IDL读取NC格式的数据以及将其换为TIFF格式的数据有很多种方法。 其中一种方法是使用IDL内置的NCDF库来读取NC格式的数据,将其换为IDL内置的数据类型,再使用IDL内置的GDAL库将其换为TIFF格式的数据。具体步骤如下: 第一步:在IDL软件中调用NCDF库,读取NC格式的数据文件。首先需要调用ncdf_open函数打开文件读取数据时可以使用ncdf_varget函数,该函数返回一个IDL数组,可以调用size函数得到数组的维度信息。例子如下: ```IDL file = 'data.nc' fid = ncdf_open(file) ;打开nc文件 data = ncdf_varget(fid, 'data') ;读取data变量 dimensions = size(data) ;获取data数据的大小信息 ``` 第二步:将读取的数据换为TIFF格式文件。可以使用IDL内置的GDAL库来操作TIFF文件,将数据写入TIFF文件。首先需要调用gdal_module函数加载GDAL模块,之后创建一个TIFF元数据信息文件,并利用gdal_create函数创建一个TIFF影像文件,最后利用gdal_bandwrite函数将数据写入影像文件中。例子如下: ```IDL tiffFile = 'data.tif' gdal_module 'gdal' ;调用GDAL模块 meta = '{GDALGeoTransform=0, 1, 0, 0, 0, 1}' ;创建TIFF元数据文件 tifID = gdal_create(tiffFile, dimensions, 1, 'GTIFF', metadata=meta) ;创建TIFF影像文件 gdal_bandwrite, tifID, data ;将数据写入TIFF文件 ``` 总之,将读取NC文件换为TIFF文件需要借助IDL内置的NCDF库和GDAL库,将NC文件的数据读入内存后,利用GDAL库的功能创建TIFF文件并将数据写入其中即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值