多维插值interpolate
<p>[TOC]</p>
<h1>空气质点追踪算法</h1>
<p>气压坐标下的空气质点追踪算法,代码示例如下:</p>
<pre><code class="language-python">trajectory_on_pressure_level(u,v,vvel,var_diag=None,
s_point={'lon':[119.3,119.31],'lat':[32.4,32.41],'level':[925,900],'id':[1,2]},
t_s=None,t_e=None,dt=1800)</code></pre>
<p><font size="4"><b>参数说明</b></font></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">u</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">标准u风</td>
</tr>
<tr>
<td style="text-align: left;">v</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">标准v风</td>
</tr>
<tr>
<td style="text-align: left;">vvel</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">气压垂直速度</td>
</tr>
<tr>
<td style="text-align: left;">var_diag</td>
<td style="text-align: left;"><font color="red">否</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">任意stda标准格式的诊断量,如spfh、rh等</td>
</tr>
<tr>
<td style="text-align: left;">s_point</td>
<td style="text-align: left;"><font color="red">否</font></td>
<td style="text-align: left;">dict</td>
<td style="text-align: left;">质点起始位置经纬度和气压,如果用户没有给定id,则自动生成连续数字</td>
</tr>
<tr>
<td style="text-align: left;">t_s</td>
<td style="text-align: left;"><font color="red">否</font></td>
<td style="text-align: left;">datetime</td>
<td style="text-align: left;">起始时间,如未给定,则为u的预报时间的起始时间</td>
</tr>
<tr>
<td style="text-align: left;">t_e</td>
<td style="text-align: left;"><font color="red">否</font></td>
<td style="text-align: left;">datetime</td>
<td style="text-align: left;">终止时间如未给定,则为u的预报时间的终止时间</td>
</tr>
<tr>
<td style="text-align: left;">dt</td>
<td style="text-align: left;"><font color="red">否</font></td>
<td style="text-align: left;">int</td>
<td style="text-align: left;">追踪时间步长 单位为s</td>
</tr>
<tr>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align: left;">返回值</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">质点追踪路径</td>
</tr>
</tbody>
</table>
<p><font size="4"><b>调用示例</b></font></p>
<pre><code class="language-python">
s_point = {'lon':[117,118],'lat':[30,31],'level':[850,925],'id':[1,2]} # 质点位置
dt = -900 # 追踪时间步长 单位为s
trajectories=metdig.cal.interpolate.trajectory_on_pressure_level(u,v,vvel,s_point=s_point, dt=dt)
print(trajectories)</code></pre>
<p><font size="4"><b>输出信息</b></font></p>
<pre><code class="language-python"> id dtime time lon lat level ecmwf
0 1 0 2024-06-29 08:00:00 117.000000 30.000000 850.000000 0.908648
1 1 0 2024-06-29 08:00:00 116.855541 29.843701 841.822172 0.501046
2 1 0 2024-06-29 07:45:00 116.714630 29.699228 837.312757 0.181864
3 1 0 2024-06-29 07:30:00 116.577017 29.560265 835.675983 -0.109585
4 1 0 2024-06-29 07:15:00 116.439444 29.428769 836.662250 0.018218
.. .. ... ... ... ... ... ...
285 2 0 2024-06-26 09:00:00 120.304955 13.399990 674.007377 0.130443
286 2 0 2024-06-26 08:45:00 120.389834 13.371585 672.833394 0.177753
287 2 0 2024-06-26 08:30:00 120.474463 13.343211 671.233615 0.197987
288 2 0 2024-06-26 08:15:00 120.559171 13.314675 669.451735 0.111416
289 2 0 2024-06-26 08:00:00 120.643930 13.285462 668.448994 -0.011209</code></pre>
<h1>interpolate_3d</h1>
<p>利用位势高度,站点高度,和各层模式数据进行三维不规则点插值,获取初步订正的山地地形站点预报,对输入点的范围进行自动切割循环,以控制输入三维插值方法的数据范围,达到加速的效果,代码示例如下:</p>
<pre><code class="language-python">interpolate_3d(stda, hgt, points, stda_sfc=None, psfc=None,if_split=None)</code></pre>
<p><font size="4"><b>参数说明</b></font></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">stda</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">被插值的要素</td>
</tr>
<tr>
<td style="text-align: left;">hgt</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">模式位势高度</td>
</tr>
<tr>
<td style="text-align: left;">points</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">'lon':[110],'lat':[30],'alt':[1000]</td>
<td style="text-align: left;">被插值站点的经度,维度,高度</td>
</tr>
<tr>
<td style="text-align: left;">stda_sfc</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">可选量,stda的对应地面量,当站点高度低于hgt中对应位置高度最小值,则直接用stda_sfc中的线性插值结果</td>
</tr>
<tr>
<td style="text-align: left;">psfc</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">当psfc<stda的等压面,则为模式地下部分,赋值nan,如果此时stda_sfc不为None,则为其线性插值结果</td>
</tr>
<tr>
<td style="text-align: left;">if_split</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">None or int</td>
<td style="text-align: left;">是否采用站点数据范围拆分方法加速多维插值</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align: left;">返回值</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">被插值后的站点数据,超出给定范围复制nan</td>
</tr>
</tbody>
</table>
<p><font size="4"><b>调用示例</b></font></p>
<pre><code class="language-python"></code></pre>
<p><font size="4"><b>输出信息</b></font></p>
<pre><code class="language-python"></code></pre>
<h1>interpolate_3d_whole_area</h1>
<p>利用位势高度,站点高度,和各层模式数据进行三维不规则点插值,获取初步订正的山地地形站点预报,该方法对全区域进行直接三维插值,对于范围较大的数据运行效率会很慢,代码示例如下:</p>
<pre><code class="language-python">interpolate_3d_whole_area(stda, hgt, points, stda_sfc=None, psfc=None)</code></pre>
<p><font size="4"><b>参数说明</b></font></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">stda</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">被插值的要素</td>
</tr>
<tr>
<td style="text-align: left;">hgt</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">模式位势高度</td>
</tr>
<tr>
<td style="text-align: left;">points</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">'lon':[110],'lat':[30],'alt':[1000]</td>
<td style="text-align: left;">被插值站点的经度,维度,高度</td>
</tr>
<tr>
<td style="text-align: left;">stda_sfc</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">可选量,stda的对应地面量,当站点高度低于hgt中对应位置高度最小值,则直接用stda_sfc中的线性插值结果</td>
</tr>
<tr>
<td style="text-align: left;">psfc</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">当psfc<stda的等压面,则为模式地下部分,赋值nan,如果此时stda_sfc不为None,则为其线性插值结果</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align: left;">返回值</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">被插值后的站点数据,超出给定范围复制nan</td>
</tr>
</tbody>
</table>
<p><font size="4"><b>调用示例</b></font></p>
<pre><code class="language-python"></code></pre>
<p><font size="4"><b>输出信息</b></font></p>
<pre><code class="language-python"></code></pre>