This is a somewhat crazy approach, and won't work for very really extreme figure sizes. geoaxes is trying to fill the window, and maintain a fixed lat/long aspect ratio, but doesn't appear to have any sort of PlotBoxAspectRatio. I fudged the numbers a tad below because it was effective on my display, you might have to play a bit with the values.
geolimits([-45 45], [-180 180]);
f.SizeChangedFcn=@(~,~)myresizefcn(gx, f, ar);
function myresizefcn(gx,f,ar)
if (f.Position(4)/f.Position(3))<ar
gx.Position(4)=f.Position(4) * .8;
gx.Position(3)=gx.Position(4) / ar;
gx.Position(1)=f.Position(3)/2 - gx.Position(3)/2;
gx.Position(2)=f.Position(4)/2 - gx.Position(4)/2;
geolimits([-45 45], [-180 180]);
gx.Position(3)=f.Position(3) * .8;
gx.Position(4)=gx.Position(3) * ar;
gx.Position(1)=f.Position(3)/2 - gx.Position(3)/2;
gx.Position(2)=f.Position(4)/2 - gx.Position(4)/2;
geolimits(gx,[-45 45], [-180 180]);