The cryosat2_data function returns Helm et al's Antarctic surface elevation DEM and corresponding geographic or polar stereographic cartesian coordinates.
This function requires the Antarctic Mapping Tools package found here: http://www.mathworks.com/matlabcentral/fileexchange/47638
There are two options for installation:
- You can download the data manually here: https://doi.pangaea.de/10.1594/PANGAEA.831392, unzip the two Antarctic folders containing .tif files, and make sure Matlab knows how to find the folders by adding a path to the folder, or you can
- Simply run cryosat2_data and if it cannot find the datasets it will try to download the data automatically. It will ask for your permission, of course. The automatic download option is sensitive to firewall settings.
Z = cryosat2_data Z = cryosat2_data(lati,loni) Z = cryosat2_data(xi,yi) Z = cryosat2_data(...,extrakm) Z = cryosat2_data(...,'res',resolution) [lat,lon,Z] = cryosat2_data(...) [X,Y,Z] = cryosat2_data(...,'xy') [...] = cryosat2_data(...,'uncertainty')
Z = cryosat2_data returns CryoSat-2 surface elevation data at the full 1 km resolution. This is a 6669x6669 dataset and loading may take a second. Surface elevations are relative to the WGS84 ellipsoid.
Z = cryosat2_data(lati,loni) returns only enough CryoSat-2 data to fully encompass a set of points given by geo coordinates lati,loni.
Z = cryosat2_data(...,xi,yi) returns only enough CryoSat-2 data to fully encompass a set of points given by polar stereographic (True lat -71) coordinates xi,yi.
Z = cryosat2_data(...,extrakm) as above, but encompasses points xi,yi or lati,loni and adds a buffer of specified width extrakm in kilometers around all four sides of data points. This is useful when you want data surrounding a point or several measurments.
Z = cryosat2_data(...,'res',resolution) specifies a resolution in kilometers. By default, this function returns the full 1 km CryoSat-2 data set. Downsampling is somewhat crude as it only loads every Nth datapoint rather than antialiasing. For a good antialiased low-res dataset, load the full dataset then use imresize to attain the resolution you seek.
[lat,lon,Z] = cryosat2_data(...) returns geo coordinates and elevation or mask data Z.
[X,Y,Z] = cryosat2_data(...,'xy') returns polar stereographic coordinates when the 'xy' tag is included.
[...] = cryosat2_data(...,'uncertainty') loads the uncertainty dataset rather than the surface elevation dataset.
Suppose you're interested in the elevation of Totten Glacier and the surrounding region. Totten Glacier is located at
scarloc 'totten glacier'
ans = -66.83 116.33
so load a 500 km wide DEM by setting (66.83S,116.33E) as the center point and specify a 250 m buffer on all sides of the centerpoint. Below I'm specifying Zc as the CryoSat surface elevation because later we'll load a Bedmap2 surface elevation:
[lat,lon,Zc] = cryosat2_data(-66.83,116.33,150);
Use surfps if you want to see the surface in fancy 3D and also return a handle which we'll use later:
h = surfps(lat,lon,Zc); view(4,46) camlight material dull
Okay, that view is a bit silly--what we want is a quantitative comparison to Bedmap2. Use bedmap2_interp to get the surface elevation from Bedmap2. Remember, a key difference between Bedmap2 and the CryoSat-2 DEM is that Bedmap2 is natively relative to the geoid, whereas the CryoSat-2 DEM is relative to WGS-84 ellipsoid. You can either use Antarctic Geoid Conversions functions or you can specify 'surfw' to denote the WGS-84-referenced elevations when you load Bedmap2 data:
Zb = bedmap2_interp(lat,lon,'surfw');
Now set the color data from the plot above to be the difference between CryoSat-2 and Bedmap2:
Change to a nadir viewing angle:
Add a colorbar and use a diverging colormap because difference maps like this should always be depicted with a diverging colormap. I'm using brewermap, which is available on the Mathworks File Exchange site:
cb = colorbar; ylabel(cb,'CryoSat-2 minus Bedmap2 (m)') caxis([-200 200]) colormap(brewermap(256,'rdbu'))
Load a 1100 km by 1100 km uncertainty grid centered on Mount Finley. To start, use scarloc to find the coordinates of Crary Ice Rise:
scarloc 'crary ice rise'
ans = -82.93 -172.50
Now a 80 km by 1000 km grid can be loaded as the center coordinate plus a 550 km buffer around top, bottom, left, and right edges:
[lat,lon,U] = cryosat2_data(-82.93,-172.5,550,'uncertainty');
If you have Matlab's Mapping Toolbox, You can plot uncertainty like this:
figure mapzoom('crary ice rise',1100,'inset','nw') pcolorm(lat,lon,U) cb = colorbar('south') xlabel(cb,'CryoSat-2 DEM uncertainty (m)')
cb = 454.01
This dataset can be found here: https://doi.pangaea.de/10.1594/PANGAEA.831392
If you use CryoSat-2 data, please cite the following:
Helm, Veit; Humbert, Angelika; Miller, Heinz (2014): Elevation and elevation change of Greenland and Antarctica derived from CryoSat-2. The Cryosphere, 8(4), 1539-1559, doi:10.5194/tc-8-1539-2014
This function was written by Chad A. Greene of the Institute for Geophysics (UTIG) at the University of Texas in Austin, April 2016. http://www.chadagreene.com