begin ncol = 6 ;臺風參數 nrow = 31 ;時次總數 nbin = 6 ;已知該該氣旋共經歷了6個等級的演變 ;讀入臺風資料 data = asciiread("NEPARTAK.txt",(/nrow,ncol/),"integer") ;/31,6/ 31行6列,integer整數類型 ;;數據讀取函數總結,asciiread讀取cav、txt文件,addfile讀取nc、hdf、grib、shp文件,fbindrread讀取bin、ctl、dat文件 amp = data(:,1) ; 強度 lat = data(:,2)/10. ; 緯度 lon = data(:,3)/10. ; 經度 wks = gsn_open_wks("pdf","plot-typhoon") gsn_define_colormap(wks, "rainbow") cmap = read_colormap_file("rainbow") ;讀取色板中的顏色 ncol = dimsizes(cmap(:,0)) ;色板的顏色總數 res = True res@gsnFrame = False res@gsnDraw = False res@mpMinLatF = 5 res@mpMaxLatF = 35 res@mpMinLonF = 105 res@mpMaxLonF = 150 res@mpOutlineOn = True res@pmTickMarkDisplayMode = "Always" ;坐標軸上添加度符號 map = gsn_csm_map(wks,res) ;繪制出地圖底圖 ;--添加任意折線,表示出臺風路徑 lnres = True lnres@gsLineColor = "black" lnres@gsLineThicknessF = 1.5 lnres@gsLineDashPattern = 0 str = unique_string("string") map@$str$ = gsn_add_polyline(wks,map,lon,lat,lnres) ;繪制Nepartak txres = True txres@txFontHeightF = 0.01 str = unique_string("string") ;字符串形式 map@$str$ = gsn_add_text(wks,map,"1601Nepartak",135,22,txres) ;添加標識,表示出每個時次的臺風中心位置 mkres = True mkres@gsMarkerSizeF = 0.01 ;標識大小,在0~1范圍內設置 mkres@gsMarkerIndex = 3 ;標識形狀 mkres@gsMarkerThicknessF = 1.5 do i = 0, nrow-1 mkres@gsMarkerColor = toint(floor(ncol/nbin*amp(i)-1)) ;在整個色板中準等距離的挑選顏色 str = unique_string("string") ;字符串形式 map@$str$ = gsn_add_polymarker(wks,map,lon(i),lat(i),mkres);繪制臺風中心位置標識 end do ;在圖形正下方添加等級圖例 x_ndc = (/0.25,0.35,0.45,0.55,0.65,0.75/) ;相對坐標x方向的位置 y_ndc = (/0.14,0.14,0.14,0.14,0.14,0.14/) ;相對坐標y方向的位置 t_ndc = tostring(ispan(1,6,1)) ;假定已知等級為1-6 labels = (/"10.8-17.1m/s","17.2-24.4m/s","24.5-32.6m/s","32.7-41.4m/s","41.5-50.9m/s",">=51.0m/s"/) mkres@gsMarkerSizeF = 0.01 ;標識的大小,在 0~1范圍內設置。同上 mkres@gsMarkerThicknessF = 1.5 ;標識的粗細。同上 do i = 0,5 ; 繪制每個等級的圖例,它由標識和文本構成 mkres@gsMarkerColor = toint(floor(ncol/nbin*(i+1)-1)) gsn_polymarker_ndc(wks,x_ndc(i),y_ndc(i),mkres) gsn_text_ndc(wks,t_ndc(i),x_ndc(i)+0.02,y_ndc(i),txres) ;將文本向右邊移動0.02 gsn_text_ndc(wks,labels(i),x_ndc(i),y_ndc(i)-0.02,txres);將文本向下邊移動0.02 end do ;根據經緯度位置繪制多邊形 x_lonlat = 117 ;中心位置 y_lonlat = 25 box_lon = (/x_lonlat-6,x_lonlat+6,x_lonlat+6,x_lonlat-6,x_lonlat-6/) box_lat = (/y_lonlat+5,y_lonlat+5,y_lonlat-5,y_lonlat-5,y_lonlat+5/) gonres = True gonres@gsFillIndex = 3 ;用形狀填充,默認值是0表示顏色填充,3是陰影 gonres@gsFillColor = "red" dum = gsn_add_polygon(wks,map,box_lon,box_lat,gonres) ;以下繪制第23時次(二次登陸前)的大致風圈范圍:以其中心為圓心,以0.05長度為半徑的圓形區域 xout_ndc = lon yout_ndc = lat datatondc(map,lon,lat,xout_ndc,yout_ndc) ;將經緯度數值轉換威單位坐標系中的坐標值 degrad = 0.017453292519943 ;Π/180=3.1415926/180 degrees = ispan(0,360,1) ;創建361點 xcos = cos(degrad*degrees) ;各個角度的余弦值 xsin = sin(degrad*degrees) ;各個角度的正弦值 ;圓心點位置及半徑 xcenter = xout_ndc(22) ;第22時次中心所在x位置 ycenter = yout_ndc(22) ;第22時次中心所在y位置 radius = 0.05 ;計算出各個點在單位坐標系中的坐標位置 xc = xcenter + (radius * xcos) yc = ycenter + (radius * xsin) ;設置多邊形的繪圖參數,根據單位坐標系中的位置繪制多邊形 lnres = True lnres@gsFillColor = 46 lnres@gsFillOpacityF = 0.5 ;50%透明 lnres@gsFillLineThicknessF = 2. ;多邊形邊框粗細 gsn_polygon_ndc(wks,xc,yc,lnres) ?? ;;添加汕頭位置 lon_st = 116.7 lat_st = 23.5 mres = True mres@gsMarkerColor = "black" mres@gsMarkerSizeF = 0.02 mres@gsMarkerIndex = 3 dum1 = gsn_add_polymarker(wks,map,lon_st,lat_st,mres) ;添加SWATOW txtres = True txtres@txFontHeightF = 0.005 txtres@txFontColor = "black" dum2 = gsn_add_text(wks,map,"SWATOW",lon_st,lat_st+1.5,txtres) ngezlogo(wks) draw(map) frame(wks)end
附數據文件:可以直接復制,保存為NEPARTAK.txt
2016070212 1 82 1453 1000 152016070218 1 85 1452 1000 152016070300 2 88 1450 998 182016070306 2 92 1448 998 182016070312 2 99 1442 995 202016070318 2 109 1435 995 202016070400 2 118 1423 995 202016070406 2 128 1410 992 232016070412 3 135 1396 990 252016070418 3 145 1383 985 282016070500 4 153 1366 975 332016070506 4 163 1351 960 402016070512 6 171 1336 940 522016070518 6 180 1319 915 622016070600 6 187 1302 905 682016070606 6 195 1285 895 722016070612 6 201 1270 895 722016070618 6 207 1256 895 722016070700 6 213 1244 895 722016070706 6 216 1234 895 722016070712 6 219 1227 895 722016070718 6 224 1218 915 622016070800 5 226 1207 950 452016070806 4 232 1201 965 382016070812 4 231 1198 975 332016070818 3 233 1196 985 252016070900 2 243 1191 990 232016070906 2 247 1187 992 202016070912 2 251 1181 995 182016070918 1 258 1169 996 152016071000 1 264 1165 998 13