@@ -177,7 +177,7 @@ def cumsum_by_track(field, track):
177177
178178
179179@njit (cache = True , fastmath = True )
180- def interp2d_geo (x_g , y_g , z_g , m_g , x , y ):
180+ def interp2d_geo (x_g , y_g , z_g , m_g , x , y , nearest = False ):
181181 """
182182 For geographic grid, test of cicularity.
183183
@@ -187,6 +187,7 @@ def interp2d_geo(x_g, y_g, z_g, m_g, x, y):
187187 :param array m_g: Boolean grid, True if value is masked
188188 :param array x: coordinate where interpolate z
189189 :param array y: coordinate where interpolate z
190+ :param bool nearest: if true we will take nearest pixel
190191 :return: z interpolated
191192 :rtype: array
192193 """
@@ -223,9 +224,21 @@ def interp2d_geo(x_g, y_g, z_g, m_g, x, y):
223224 if m_g [i0 , j0 ] or m_g [i0 , j1 ] or m_g [i1 , j0 ] or m_g [i1 , j1 ]:
224225 z [i ] = nan
225226 else :
226- z [i ] = (z00 * (1 - xd ) + (z10 * xd )) * (1 - yd ) + (
227- z01 * (1 - xd ) + z11 * xd
228- ) * yd
227+ if nearest :
228+ if xd <= 0.5 :
229+ if yd <= 0.5 :
230+ z [i ] = z00
231+ else :
232+ z [i ] = z01
233+ else :
234+ if yd <= 0.5 :
235+ z [i ] = z10
236+ else :
237+ z [i ] = z11
238+ else :
239+ z [i ] = (z00 * (1 - xd ) + (z10 * xd )) * (1 - yd ) + (
240+ z01 * (1 - xd ) + z11 * xd
241+ ) * yd
229242 return z
230243
231244
0 commit comments