vxvy2uv is part of Antarctic Mapping Tools for Matlab (Greene et al., 2017). Click here for a complete list of functions in AMT.
This function transforms polar stereographic vector components to georeferenced (zonal and meridional) vector components.
[U,V] = vxvy2uv(lat,lon,vx,vy) [U,V] = vxvy2uv(x,y,vx,vy)
[U,V] = vxvy2uv(lat,lon,vx,vy) transforms polar stereographic vector components vx, vy referenced to the geographic locations in lat and lon to geographic zonal and meridional components.
[U,V] = vxvy2uv(x,y,vx,vy) transforms polar stereographic vector components vx, vy referenced to the polar stereographic locations in x and y to geographic zonal and meridional components. Polar stereographic coordinates are automatically determined if any value in the first two inputs of vxvy2uv exceed normal geographic coordinate values.
Consider a vector field depicting motion from left to right on a standard polar stereographic map projection. Make its x component 1.5 magnitude everywhere, and we'll add a slight downward-dipping y component too, just to make things interesting. To set up the grid, us psgrid to create a 6000 km wide grid at 250 km resolution, centered on the South Pole:
[x,y] = psgrid('south pole',6000,250,'xy'); vx = 1.5*ones(size(x)); vy = -0.3*ones(size(x));
In cartesian coordinates this is what the vector field looks like. We'll overlay a Bedmap2 grounding line for context:
quiver(x,y,vx,vy) hold on bedmap2('gl','xy')
We can convert this vector field to zonal and meridional components like this:
[u,v] = vxvy2uv(x,y,vx,vy);
Let's show the zonal and meridional components on a map. We'll have to use ps2ll to get the georeferenced coordinates of our xy grid first. Initialize a map with antmap, plot a filled coast line as a patch object for context, and plot the vector field with the AMT function quivermc:
[lat,lon] = ps2ll(x,y); antmap bedmap2 'patchcoast' quivermc(lat,lon,u,v)
That looks about right. There's one funny vector close to the South Pole because that's where small errors in angles go haywire.
Let's use the MEaSUREs toolbox to look at ice motion around Recovery Glacier. Start by defining a 500 km wide grid centered on Recovery Glacier. Make the grid 3 km resolution.
[lat,lon] = psgrid('recovery glacier',500,3);
The measures_interp function can return ice velocity components for at each of our lat,lon grid points:
vx = measures_interp('vx',lat,lon); vy = measures_interp('vy',lat,lon);
In cartesian coordinates, the vector field looks like this:
[x,y] = ll2ps(lat,lon); quiver(x,y,vx,vy)
That's a bit hard to parse using Matlab's quiver function, but if you zoom in the arrows are there. For example,
axis([-640322 -553225 758771 839473])
You might want zonal and meridional components of ice motion. Let's do that and show vectors atop a ramp image. When calling quivermc below I'm color-scaling the arrows using one of my favorite colormap generators, brewermap, and I don't want to show too many little arrows, so I'll downsample the field to 20% with the 'density',20 option:
[u,v] = vxvy2uv(lat,lon,vx,vy); mapzoom('recovery glacier') ramp quivermc(lat,lon,u,v,'colormap',brewermap(256,'reds'),'density',20)
If this function or any other part of Antarctic Mapping Tools is useful for you, please cite the paper that describes AMT.
Greene, C. A., Gwyther, D. E., & Blankenship, D. D. Antarctic Mapping Tools for Matlab. Computers & Geosciences. 104 (2017) pp.151-157. doi:10.1016/j.cageo.2016.08.003.
The vxvy2uv function and supporting documentation were written by Chad A. Greene of the University of Texas at Austin's Institute for Geophysics (UTIG), September 2015.