The NCEP data provides only 1º resolution, so bilinear interpolation is used to fill in the gaps. How much interpolation is needed depends on the zoom level and the projection. On top of that, the distortion caused by the projection must be applied to the interpolated wind field. All of these heavy calculations are done up front so the animation can be as fast as possible. So each time the orientation of the globe changes, we have to redo the calculations.
"On top of that, the distortion caused by the projection must be applied to the interpolated wind field."
I think I'm missing something. Are you overlaying a drawing canvas over the globe and handling your own custom projection then? Is it not possible to dynamically draw to a webgl texture and let the gpu take care of projection?
I do understand why you'd have to restart on zoom. Overall its an excellent project you have here.
Exactly! The globe is SVG and the animation is a Canvas layered on top. However, I'm still using D3's projection logic to calculate the distortion. Yeah, could save on redoing the distortion calc if just globe rotation changes, but would still need to redo the grid interpolation. So, to keep it easy I just rerun the whole deal.
WebGL would be fun to learn, but AFAIK not supported by mobile browsers yet.
WebGL is at the least supported by the default browser on the Galaxy S II, and presumably newer models. It doesn't support floating point textures, however.
This makes more sense in light of the view supporting zoom, which didn't occur to me the first time I visited the page. Perhaps add a note in the corner?