爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8875|回复: 3

[其他] NCL输出符合条件的数据到文本

[复制链接]
发表于 2020-6-10 11:21:26 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 channam 于 2020-6-10 17:23 编辑

       我想输出内蒙古自治区范围内能见度小于2km的数据到文本csv,包括经纬度位置和能见度值,请问大家有什么好的建议吗?

       现在可以做到输出全部范围的数据,或者指定经纬度范围,或者某经纬度位置的数据,这些都是在读入数据的时指定的, 比如: t  = fin->VIS_P0_L1_GLL0(:,{40.80},{111.55}),但省份范围都是不规则的,该怎么指定范围呢?

       筛选能见度小于2km数据的循环感觉写的也不咋对,实在不擅长编程啊,请大家帮忙指点一下咯~



参考官网例子的脚本
;----------------------------------------------------------------------
; write_csv_2.ncl
;
; Concepts illustrated:
;   - Writing a CSV file with a header using write_table
;----------------------------------------------------------------------
; This example reads three 3D arrays off a NetCDF file and writes
; the contents to a CSV file with a header that contains the
; long_name and units of each field.
;----------------------------------------------------------------------
begin
;--- file to read in.
  filename = "./dat/xxx.GRB2"
  fin      = addfile(filename,"r")

;---Pick 3D arrays to write to CSV file
  t  = fin->VIS_P0_L1_GLL0(:,:,:)   
  t  = t*0.001

; Read the 1D coordinate arrays, conform them to 3D,
; then convert to 1D so we can write them to CSV
; file along with data.

  dims   = dimsizes(t)
  time1d = ndtooned(conform_dims(dims,t&forecast_time0,0))
  lat1d  = ndtooned(conform_dims(dims,t&lat_0, 1))
  lon1d  = ndtooned(conform_dims(dims,t&lon_0, 2))

;---Construct header line
  field_names = (/ t&forecast_time0@long_name + " ["  + t&forecast_time0@units + "]", \                           
                   t&lat_0@long_name  + " ["  + t&lat_0@units  + "]", \                 
                   t&lon_0@long_name  + " ["  + t&lon_0@units  + "]", \                    
                                   t@long_name      + " ["  + t@units      + "]"/)                           
  header = [/str_join(field_names,",")/]

;---Write header to CSV file.
  csv_filename = "vis_050620.csv"
  system("rm -rf " + csv_filename)
  write_table(csv_filename, "w", header, "%s")

;---Convert 3D arrays to 1D for writing to CSV file
    t1d  = ndtooned(t)

;-------这里企图写一个循环输出能见度小于2km的数据------;;
;   do i=1,284501
;      if((t1d(i).gt.0).and.(t1d(i).le.2)) then
;                t11d    =t1d(i)
;                lat11d  =lat1d(i)
;                lon11d  =lon1d(i)
;          end if  
;   end do
;------------------------------------------------------------------------;
;---Write data to file
  alist  = [/time1d,lat1d,lon1d,t1d/]      
  format = "%g,%g,%g,%g"
  write_table(csv_filename, "a", alist, format)

end



VIS_2020050705_all.png
VIS_2020050705_single.png
密码修改失败请联系微信:mofangbao
 成长值: 0
发表于 2020-6-10 12:08:17 | 显示全部楼层
你试试用ncl自带地图和mask把内蒙古以外屏蔽掉
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-10 15:25:02 | 显示全部楼层
kermit 发表于 2020-6-10 12:08
你试试用ncl自带地图和mask把内蒙古以外屏蔽掉

单省突出的图片我之前也是画了的,我又上传了一张,但是想要输出数据的话mask还管用吗,感觉是先画出全部范围的,然后又掩盖的除内蒙以外的,只是显示的效果。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 成长值: 0
发表于 2020-6-10 16:12:31 | 显示全部楼层
你可以找一个内蒙古的边界经纬度数据。然后生成0 1变量表示这个点在边界内还是边界外。
这个你可能需要编程来实现,从上往下穿过奇数次边界即在边界内,穿过偶数次边界即在边界外。(当然从上往下只有一个边界点,即地图左右端点的情况要小心)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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