- 积分
 - 648
 
	- 贡献
 -  
 
	- 精华
 
	- 在线时间
 -  小时
 
	- 注册时间
 - 2021-2-9
 
	- 最后登录
 - 1970-1-1
 
 
 
 
 
 
 | 
	
 
NCL
| 系统平台: | 
  | 
 
| 问题截图: | 
- | 
 
| 问题概况: | 
代码感觉没问题,找不到错在哪儿  | 
 
| 我看过提问的智慧: | 
看过  | 
 
| 自己思考时长(天): | 
1  | 
 
 
 
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册 
 
 
 
x
 
load "$NCARG_ROOT/lib/ncarg/database/Chinamap/zidingyimap.ncl" 
undef("mask_data") 
function mask_data(data:numeric,fname[1]:string,outmask:logical) 
local f,segments,geometry,segsDims,geomDims,geom_segIndex,geom_numSegs,segs_xyzIndex,\ 
segs_numPnts,numFeatures,ilat,ilon,i,j,\ 
shp_lat,shp_lon,data_lat,data_lon,startSegment,numSegments,seg,\ 
startPT,endPT,mask_val 
begin 
        f=addfile(fname,"r") 
        segments=f->segments 
        geometry=f->geometry 
        segsDims=dimsizes(segments) 
        geomDims=dimsizes(geometry) 
        geom_segIndex=f@geom_segIndex 
        geom_numSegs=f@geom_numSegs 
        segs_xyzIndex=f@segs_xyzIndex 
        segs_numPnts=f@segs_numPnts 
        numFeatures=geomDims(0) 
        data_mask=new(dimsizes(data),typeof(data),data@_FillValue) 
        mask_val=1 
        data_mask=0 
        shp_lon=f->x 
        shp_lat=f->y 
        data_lat=data&$data!0$ 
        data_lon=data&$data!0$ 
        nlat=dimsizes(data_lat) 
        nlon=dimsizes(data_lon) 
        do i=0,numFeatures - 1 
                startSegment=geometry(i,geom_segIndex) 
                numSegments=geometry(i,geom_numSegs) 
                do seg=startSegment,startSegment+numSegments-1 
                        startPT=segments(seg,segs_xyzIndex) 
                        endPT=startPT+segments(seg,segs_numPnts)-1 
                        iilt_beg=ind((data_lat).lt.min(shp_lat(startPT:endPT))) 
                        iilt_end=ind((data_lat).gt.max(shp_lat(startPT:endPT))) 
                        iiln_beg=ind((data_lon).lt.min(shp_lon(startPT:endPT))) 
                        iiln_end=ind((data_lon).gt.max(shp_lon(startPT:endPT))) 
                        ilt_beg=0 
                        iln_beg=0 
                        ilt_end=nlat-1 
                        iln_end=nlon-1 
                        if(.not.any(ismissing(iilt_beg)))then 
                                ilt_beg=iilt_beg(dimsizes(iilt_beg)-1) 
                        end if 
                        if(.not.any(ismissing(iilt_end)))then 
                                ilt_end=iilt_end(0) 
                        end if 
                        if(.not.any(ismissing(iiln_beg)))then 
                                iln_beg=iiln_beg(dimsizes(iiln_beg)-1) 
                        end if 
                        if(.not.any(ismissing(iiln_end)))then 
                                iln_end=iiln_end(0) 
                        end if 
                        do ilat = ilt_beg,ilt_end 
                                do ilon = iln_beg,iln_end 
                                        if(data_mask(ilat,ilon).ne.mask_val.and.\ 
                                                gc_inout(data_lat(ilat),data_lon(ilon),\ 
                                                shp_lat(startPT:endPT),shp_lon(startPT:endPT)))then 
                                                data_mask(ilat,ilon)=mask_val 
                                        end if 
                                end do 
                        end do 
                        delete([/iilt_beg,iilt_end,iiln_beg,iiln_end/]) 
                end do 
        end do 
        area_data=where(data_mask.eq.1,data,data@_FillValue) 
        copy_VarMeta(data,area_data) 
        return(area_data) 
end 
; 
begin 
        f=addfile("d:/1960-2015/var1continous-MaytoSep-rain598stn_1960_2015_daily.nc","r") 
        fshape="$NCARG_ROOT/lib/ncarg/database/Chinamap/China_GuoJie_Polyline.shp" 
        varnames=getfilevarnames(f) 
        if(.not.any(ismissing(varnames)))then 
                do i = 0,dimsizes(varnames)-1 
                        printFileVarSummary(f,varnames(i)) 
                end do 
        end if 
         
        daily=f->var3 
        days=f->days 
        stid=f->stid 
        lats=stid@lat 
        lons=stid@lon 
         
        yyyy=days/10000 
        mmdd=days-yyyy*10000 
        mm=mmdd/100 
         
        nyear=max(yyyy)-min(yyyy)+1 
        nday=30+31+31 
        idx=ind(mmdd.ge.601.and.mmdd.le.831);截取夏季 
        temp=onedtond(ndtooned(daily(:,idx)),(/dimsizes(stid),nyear,nday/)) 
        yr_rain=dim_sum_n(temp,2);各年夏季累计降水 
        avecli=dim_avg_n(yr_rain,1);气候平均夏季年降水 
         
        latN=55. 
        latS=15. 
        lonW=70. 
        lonE=140. 
         
        dlt=0.5;插值格点精度 
        latnum=floattoint(180/dlt)+1;纬度格点数 
        lonnum=floattoint(360/dlt);经度格点数 
        latitude=latGlobeF(latnum,"lat","latitude","degrees_north");全球 
        lontitude=lonGlobeF(lonnum,"lon","longtitude","degrees_east") 
        lat=latitude({latS:latN});截取插值范围格点 
        lon=lontitude({lonW:lonE}) 
        nlat=dimsizes(lat) 
        nlon=dimsizes(lon) 
        griddata=new((/nlat,nlon/),"float") 
        griddata(:,:)=natgrid(lats,lons,avecli,lat,lon);站点数据插值 
        griddata!0="lat" 
        griddata&lat=lat 
        griddata!1="lon" 
        griddata&lon=lon 
        data=mask_data(griddata,fshape,False) 
        ;绘图 
        wks=gsn_open_wks("png","jiangshui") 
        gsn_define_colormap(wks,"MPL_YLOrBr") 
        res=True 
        res@gsnMaximize=True 
        res@gsnDraw=False 
        res@gsnFrame=False 
        res@mpMinLatF=0. 
        res@mpMaxLatF=55. 
        res@mpMinLonF=70. 
        res@mpMaxLonF=140. 
        res@mpFillOn=False 
        res@pmTickMarkDisplayMode="always" 
        res@tmXTOn=False 
        res@tmYROn=False 
        res@gsnAddCyclic=False 
        res@gsnCenterString="" 
        res@gsnLeftString="" 
        res@gsnRightString="" 
        res@cnFillOn=True 
        res@cnLinesOn=False 
        res@tmXBLabelFontHeightF=0.01 
        res@tmYLLabelFontHeightF=0.01 
        res@lbTitleString="mm" 
        res@lbTitlePosition="Right" 
        res@lbTitleFontHeightF=.015 
        res@lbTitleDirection="Across" 
        plot=gsn_csm_contour_map(wks,data,res) 
        plots=draw_Chinamap(wks,plot,False,True,False);绘制中国地图 
         
        draw(plots) 
        frame(wks) 
end 
 
 |   
- 
 
 
 
 
 
 
 
 |