|
本节继续上节留下的问题之一: - • 按照经纬度范围提取数据
+ \; X, p! K2 K9 p/ l3 ?" c1 |
刚才查看ECCO门户,发现流量超载,停止数据下载服务了。LLC4320本质上不适合下载后计算,而适合云计算(PB级别的运算),后面我将尝试LLC4320的云计算。这里所谈的下载也仅限于非常小的范围,只有在小范围筛选的条件下,高分辨率模式数据的下载才有单机操作的实践意义。 准备略(参考上一节,主要是加载Python库)。
: O( {- [' C4 Q" Q) p/ A/ I 范围选取
1 f" A4 Y& A0 C- g8 v- W8 [! p这里还是仅保存少量有用的参数,删除大部分暂时用不上的无维度坐标。注意XC和YC代表了经纬度,在此保留。 temp=ds_sst.Theta.reset_coords()[["XC", "YC","Theta"]]使用经纬度进行数据选取,选择区域是南非海域: temp.where((temp.XC < 60) & (temp.XC >0) & (temp.YC >-50) & (temp.YC <-10)).Theta.plot()
7 d% o" B' g( m8 ]& D% p& q" V, Q9 W现在已经按照经纬度范围选好了数据。但是检查发现数据的尺寸没有减小,这里还缺少一步: temp.where((temp.XC < 60) & (temp.XC >0) & (temp.YC >-60) & (temp.YC <-20),drop=True).Theta.plot(cmap="magma")3 f# U- o# J5 \
通过drop范围之外的数据,数据大小正常了,它的范围正是我们通过经纬度筛选的范围。 然后保存,文件大小约90M: small_ex=temp.where((temp.XC < 60) & (temp.XC >0) & (temp.YC >-60) & (temp.YC <-20),drop=True)
1 U6 C% m! `% @3 B' T& gsmall_ex.to_netcdf('myfile2.nc')按照经纬度选取数据的速度较慢,原因是对XC和YC进行了对比计算。此外也可以使用维度坐标ij的切片进行选取,前提是大致知道ij和经纬的对应(可以从绘图中大致查看)。 small_ex2=temp.isel(k=0,i=slice(1824, 4703,1),j=slice(4040,6857,1))2 X9 \3 K* K6 G9 W9 G3 Y! ]$ Y
small_ex2.to_netcdf('myfile2.nc')坐标切片的速度更快,无对比运算,结果完全一样,因此推荐使用它。
3 J; @% L8 N4 K5 g 地理绘图
3 W$ O: z) Y5 Z- a" h上节,我们看到LLC4320的绘图坐标标注均为网格点数,而不是经纬度。那么怎么使用经纬度表达呢?这里我们初次使用Julia的GMT和RemoteS。 - • Julia GMT是GMT的一个Julia语言包。
- • RemoteS是针对复杂地理网格绘图的Julia包。9 |& f) u: X+ W: z3 _0 j- R% L
代码仅需两行: G = grid_at_sensor("./myfile4.nc", "Theta",region=(0,50,-50,-10),xarray="XC", yarray="YC", inc=0.03);* C3 v6 Z' n2 A" x
1 ?7 S! ?9 @$ u8 i3 @) ]+ Oimshow(G, proj=:guess, coast=true, dpi=200)
' m+ q) I% z) A( L: L3 ]下节预告- • 时间维度的连续导出
- • 数据计算' q+ B% o5 o% r. T* h4 L
& g! ~2 H9 {6 J$ b0 V0 k- z# U/ s
|