Skip to content

Commit d475e77

Browse files
committed
add interpolate_datafields_2D for GeoData; fix typos
1 parent acf552b commit d475e77

File tree

2 files changed

+42
-5
lines changed

2 files changed

+42
-5
lines changed

ext/GLMakie_Visualisation.jl

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ end
333333
in-place heatmap for a 2D GeoData object (surface),
334334
"""
335335
function heatmap!(x::GeoData, args...; field=:Topography, kwargs...)
336-
@assert size(x.z.val,3)==1
336+
@assert size(x.depth.val,3)==1
337337
@assert hasfield(typeof(x.fields), field)
338338

339339
heatmap(x.lon.val[:,1], x.lat.val[1,:], ustrip.(x.fields[field][:,:,1]), args...; kwargs...)
@@ -345,7 +345,7 @@ end
345345
in-place heatmap for a 2D GeoData object (surface) with an array `a`.
346346
"""
347347
function heatmap!(x::GeoData, a::Array{_T,N}, args...; kwargs...) where{_T,N}
348-
@assert size(x.z.val,3)==1
348+
@assert size(x.depth.val,3)==1
349349

350350
if N==3
351351
heatmap!(x.lon.val[:,1], x.lat.val[1,:], ustrip.(a[:,:,1]), args...; kwargs...)
@@ -356,14 +356,23 @@ function heatmap!(x::GeoData, a::Array{_T,N}, args...; kwargs...) where{_T,N}
356356
end
357357

358358
"""
359-
heatmap!(x::CartData, args...; field=:Topography, kwargs...)
359+
heatmap!(x::CartData, args...; field=:Topography, colorbar=false, kwargs...)
360360
in-place heatmap for a 2D CartData object (surface)
361361
"""
362-
function heatmap!(x::CartData, args...; field=:Topography, kwargs...)
362+
function heatmap!(x::CartData, args...; field=:Topography, colorbar=false, kwargs...)
363363
@assert size(x.z.val,3)==1
364364
@assert hasfield(typeof(x.fields), field)
365365

366-
heatmap!(x.x.val[:,1], x.y.val[1,:], ustrip.(x.fields[field][:,:,1]), args...; kwargs...)
366+
data = ustrip.(x.fields[field][:,:,1])
367+
368+
fig,ax,hm = heatmap!(x.x.val[:,1], x.y.val[1,:], data, args...; kwargs...)
369+
370+
cb = nothing
371+
if colorbar
372+
cb = Colorbar(fig[1,2], limits=extrema(filter(!isnan,x.fields[field])), label=field)
373+
end
374+
375+
return fig_out
367376
end
368377

369378
"""

src/utils.jl

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1216,6 +1216,34 @@ function interpolate_datafields_2D(Original::CartData, New::CartData; Rotate=0.0
12161216
return CartData(New.x.val,New.y.val,Znew, fields_new)
12171217
end
12181218

1219+
"""
1220+
interpolate_datafields_2D(Original::GeoData, New::GeoData; Rotate=0.0, Translate=(0,0,0), Scale=(1.0,1.0,1.0))
1221+
1222+
Interpolates a data field `Original` on a 2D GeoData grid `New`.
1223+
Typically used for horizontal surfaces.
1224+
1225+
Note: `Original` should have orthogonal coordinates. If it has not, e.g., because it was rotated, you'll have to specify the angle `Rotate` that it was rotated by
1226+
1227+
"""
1228+
function interpolate_datafields_2D(Original::GeoData, New::GeoData; Rotate=0.0, Translate=(0.0,0.0,0.0), Scale=(1.0,1.0,1.0))
1229+
if (Rotate!=0.0) || any(Translate .!= (0,0,0)) || any(Scale .!= (1.0,1.0,1.0))
1230+
Original_r = rotate_translate_scale(Original, Rotate = -1.0*Rotate, Translate = -1.0.*Translate, Scale=Scale);
1231+
New_r = rotate_translate_scale(New, Rotate = -1.0*Rotate, Translate = -1.0.*Translate, Scale=Scale);
1232+
else
1233+
Original_r = Original;
1234+
New_r = New;
1235+
end
1236+
1237+
Lon_vec = Original_r.lon.val[:,1,1];
1238+
Lat_vec = Original_r.lat.val[1,:,1];
1239+
1240+
Lon_new = New_r.lon.val
1241+
Lat_new = New_r.lat.val
1242+
Znew, fields_new = GeophysicalModelGenerator.InterpolateDataFields2D_vecs(Lon_vec, Lat_vec, Original_r.depth, Original_r.fields, Lon_new, Lat_new)
1243+
1244+
return GeoData(New.lon.val,New.lat.val,Znew, fields_new)
1245+
end
1246+
12191247
"""
12201248
Surf_interp = interpolate_datafields_2D(V::GeoData, x::AbstractRange, y::AbstractRange; Lat::Number, Lon::Number)
12211249

0 commit comments

Comments
 (0)