- 积分
- 8005
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-12-27
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 小其其格 于 2019-8-18 22:08 编辑
- 在做数值模拟时,要对比实况雷达回波和模拟出来的雷达回波,需要在模拟图像上
- 绘制雷达的圆圈。查了一下官网函数,发现6.5.0版本的geolocation_circle函数
- 可以直接求取圆圈的格点经纬度,但是6.5.0没有CYGWIN版本。
- 6.4.0版本的nggcog函数也有这样的功能,
- 但是我在使用时候怎么也调不出效果来。
- 因此决定自己动手写个添加绘制圆圈的脚本,思路如下:
- (1)给定雷达站的中心经纬度和半径
- (2)根据赤道半径和极半径求出圆圈上纬度对应的半径
- (3)求出圆圈各个点的经纬度数值
- (4)利用gsn_add_polyline函数绘制圆圈。
- 具体脚本如下:
- mpres@gsLineColor = "white" ;-- marker color
- mpres@gsLineThicknessF = 4. ;-- marker line thickness
- mpres@gsLineDashPattern = 1
- ;mpres@tfPolyDrawOrder = "PreDraw"
- ;----Ningbo
- slon = 121.5088 ; lon: station or storm
- slat = 30.0758 ; lat: station or storm
- srad = (/ 50, 100, 150 /) ; station radii (km)
- ;R = 150. ;雷达圆圈半径 km
- ;srad_unit = 1 ; km
- N = 360 ; # of points; more points nicer 'circle'
- nLoc = dimsizes(slat) ; # locations
- nRad = dimsizes(srad) ; # radii
- circle_lon = new( (/nLoc,nRad,N/), float) ; a new array
- circle_lat = new( (/nLoc,nRad,N/), float)
- PI = 3.1416
- Ea = 6378.137; // 赤道半径 km
- Eb = 6356.725; // 极半径 km
- ec = Eb + (Ea-Eb) * (90.0 - slat) / 90.0 ;相当于(ec-Eb)/(Ea=Eb)=(Lat-90)/(0-90),ec的作用就是修正因为纬度不断变化的球半径长度。详见https://www.cnblogs.com/zhoug2020/p/7634187.html
- ed = ec * cos(slat * PI / 180) ;ed是slat所在纬度的纬度圈的半径 https://www.cnblogs.com/zhoug2020/p/7634187.html
-
- do nl=0,nLoc-1
- do nr=0,nRad-1
- do nN=0,N-1
- dx = srad(nr)*sin(nN*PI/180.);
- dy = srad(nr)*cos(nN*PI/180.);
- circle_lon(nl,nr,nN) = (dx/ed + slon*PI/180.)*180./PI;
- circle_lat(nl,nr,nN) = (dy/ec + slat*PI/180.)*180./PI;
- end do ;N
- end do ; nr
- end do ; nl
-
- do nl=0,nLoc-1
- do nr=0,nRad-1
- circ_id = "radii_"+nl+"_"+nr ; any unique name
- plot@$circ_id$ = gsn_add_polyline(wks, plot, circle_lon(nl,nr,:), circle_lat(nl,nr,:), mpres)
- ;plot@$str$ = gsn_add_polymarker(wks, plot, slon, slat, mpres)
- end do ; nr
- end do ; nl
-
- ;Lines of E-W and N-S
- X_EW = (/circle_lon(nLoc-1,nRad-1,270), circle_lon(nLoc-1,nRad-1,90)/)
- Y_EW = (/slat, slat/)
- X_NS = (/slon, slon/)
- Y_NS = (/circle_lat(nLoc-1,nRad-1,0), circle_lat(nLoc-1,nRad-1,180)/)
- circ_id2 = "radii_2" ; any unique name
- plot@$circ_id2$ = gsn_add_polyline(wks, plot, X_EW, Y_EW, mpres)
- circ_id3 = "radii_3" ; any unique name
- plot@$circ_id3$ = gsn_add_polyline(wks, plot, X_NS, Y_NS, mpres)
复制代码 效果图(实况和模拟的同时刻dBz对比):-
|
评分
-
查看全部评分
|