Contents

Get Blue Marble map of the earth

nasa = wmsfind('nasa', 'SearchField', 'serverurl');

layer = nasa.refine('bluemarbleng', ...
'SearchField', 'layername', 'MatchType', 'exact');

layer = wmsupdate(layer);

Set the latitude and longitude limits of our map

latlim = [-90 90];
lonlim = [-90 90];

% Use wmsread to read in the map as an image with reference coordinates
[blueMarble, Rmarble] = wmsread(layer,'Latlim',latlim,'Lonlim',lonlim);

% Show the map
geoshow(blueMarble,Rmarble)

Let's look at the NOAA Central Pacific OpenWatch Thredds server

baseurl = 'http://oceanwatch.pifsc.noaa.gov/thredds';
web(baseurl,'-browser');

Get Sea Surface Temperature (2-day) from OceanWatch

wmsurl = 'http://oceanwatch.pifsc.noaa.gov/thredds/wms/goes-poes/2day?service=WMS&version=1.3.0&request=GetCapabilities';
info = wmsinfo(wmsurl);
[goes,Rgoes] = wmsread(info.Layer,...
    'ImageHeight',size(blueMarble,1),...
    'ImageWidth',size(blueMarble,2),...
    'Latlim',latlim,'Lonlim',lonlim);
geoshow(goes,Rgoes);

Composite the GOES sea surface temperature on top of the map

threshold = 180;
index = any(goes < threshold, 3);
index = cat(3, index, index, index);

combined = blueMarble;
combined(index) = goes(index);

Show the compositied image

geoshow(combined,Rmarble);

Use the NetCDF to get detailed info about the surface temperature

ncurl = 'http://oceanwatch.pifsc.noaa.gov/thredds/dodsC/goes-poes/2day';
ncdisp(ncurl);
Source:
           http://oceanwatch.pifsc.noaa.gov/thredds/dodsC/goes-poes/2day
Format:
           64bit
Global Attributes:
           title                     = 'GOES-POES SST - 2Day'
           summary                   = 'Sea-Surface Temperature'
           keywords                  = 'EARTH SCIENCE > Oceans > Ocean Temperature > Sea Surface Temperature'
           keywords_vocabulary       = 'GCMD Science Keywords'
           id                        = 'GP2013186_2013187_sst'
           grid_type                 = 'REGULAR'
           naming_authority          = 'gov.noaa.pifsc.oceanwatch'
           cdm_data_type             = 'Grid'
           date_created              = '2013-07-07'
           date_issued               = '2013-07-07'
           project                   = 'NOAA CoastWatch/OceanWatch - Central Pacific'
           processing_level          = '3'
           acknowledgements          = 'NOAA National Environmental Satellite, Data and Information Service'
           geospatial_lat_min        = -90
           geospatial_lat_max        = 89.9
           geospatial_lat_resolution = 0.05
           geospatial_lat_units      = 'degrees_north'
           geospatial_lon_min        = 0
           geospatial_lon_max        = 360
           geospatial_lon_resolution = 0.05
           geospatial_lon_units      = 'degrees_east'
           time_coverage_start       = '2013-07-05T00:00:00Z'
           time_coverage_end         = '2013-07-06T23:59:59Z'
           contributor_name          = 'NOAA OceanWatch - Central Pacific'
           contributor_url           = 'http://oceanwatch.pifsc.noaa.gov'
           product                   = 'Sea-Surface Temperature'
           westernmost_longitude     = 360
           easternmost_longitude     = 0
           southernmost_latitude     = -90
           northernmost_latitude     = 89.9
           satellite                 = 'NOAA GOES-E/W, NOAA-19, METOP-A, MSG, MTSAT'
           sensor                    = 'NOAA GOES-E/W, NOAA-19, METOP-A, MSG, MTSAT'
           origin                    = 'NOAA OceanWatch - Central Pacific'
           cwhdf_version             = '3.4'
           composite                 = 'true'
           projection_type           = 'mapped'
           projection                = 'Geographic'
           gctp_sys                  = 0
           gctp_zone                 = 0
           gctp_parm                 = [0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00]
           gctp_datum                = 12
           et_affine                 = [0.00e+00 -5.00e-02  5.00e-02  0.00e+00  2.50e-02  9.00e+01]
           rows                      = 3.6e+03
           cols                      = 7.2e+03
           history                   = 'File generated at NOAA OceanWatch - Central Pacific'
           Conventions               = 'CF-1.0, CW HDF, COARDS'
           references                = 'Refer to NOAA NESDIS http://www.nesdis.noaa.gov/'
           institution               = 'NOAA/NESDIS/OceanWatch - Central Pacific'
           source_data               = 'NOAA National Environmental Satellite, Data and Information Service'
           comment                   = 'GOES SST data product'
           pass_date                 = [1.59e+04 1.59e+04]
           start_time                = [1.00e+00 1.00e+00]
           temporal_extent           = [8.64e+04 8.64e+04]
           license                   = 'The data may be used and redistributed for free but is not intended for legal use, since it may contain inaccuracies. Neither OceanWatch, NOAA, nor the US Government, nor any of their employees or contractors, make any warranty, express or implied, including warranties of merchantability and fitness for a particular purpose, or assumes any legal liability for the accuracy, completeness, or usefulness, of this information.'
Dimensions:
           lat   = 3600
           lon   = 7200
           nbnds = 2
           time  = 320
Variables:
    lat      
           Size:       3600x1
           Dimensions: lat
           Datatype:   double
           Attributes:
                       _CoordinateAxisType = 'Lat'
                       actual_range        = [-9.00e+01  8.99e+01]
                       coordsys            = 'geographic'
                       long_name           = 'Latitude'
                       point_spacing       = 'even'
                       standard_name       = 'latitude'
                       units               = 'degrees_north'
                       axis                = 'Y'
    lon      
           Size:       7200x1
           Dimensions: lon
           Datatype:   double
           Attributes:
                       _CoordinateAxisType = 'Lon'
                       actual_range        = [0.00e+00 3.60e+02]
                       coordsys            = 'geographic'
                       long_name           = 'Longitude'
                       point_spacing       = 'even'
                       standard_name       = 'longitude'
                       units               = 'degrees_east'
                       axis                = 'X'
    time     
           Size:       320x1
           Dimensions: time
           Datatype:   double
           Attributes:
                       units        = 'days since 1800-1-1 00:00:00'
                       long_name    = 'Time'
                       actual_range = [7.80e+04 7.80e+04]
                       axis         = 'T'
                       bounds       = 'time_bnds'
    time_bnds
           Size:       2x320
           Dimensions: nbnds,time
           Datatype:   double
           Attributes:
                       long_name = 'Time Boundaries'
    sst      
           Size:       7200x3600x320
           Dimensions: lon,lat,time
           Datatype:   single
           Attributes:
                       _FillValue           = -3.4e+38
                       long_name            = 'Sea-Surface Temperature'
                       missing_value        = -3.4e+38
                       numberOfObservations = 2.59e+07
                       units                = 'degrees Celsius'
                       short_units          = 'deg. C'

Read 'lat','lon', and 'time' variables from this dataset

lat = ncread(ncurl,'lat');
lon = ncread(ncurl,'lon');
time = ncread(ncurl,'time');

Get theSurface temperature history of a point just off the coast of NC!

diamondShoals = [35 360-75];
latInd = find(lat == diamondShoals(1));
lonInd = find(lon == diamondShoals(2));

Read the surface temperature off the coast of Cape Hatteras

surfaceTemp = ncread(ncurl, 'sst',[lonInd latInd 1],[1 1 319]);
surfaceTemp = reshape(surfaceTemp,1,size(surfaceTemp,3));

Recompute the Time relative to Jan-1-0000

timeStamps = time(1:end-1) + datenum('1800-1-1 00:00:00');

Show the 2-day average surface temperature for the past year

figure;
plot(timeStamps, surfaceTemp);

% Format and Label the Plot
title('Sea Surface Temperature at Diamond Shoals','FontSize',20);
xlabel('Date','FontSize',16);
ylabel('Temperature (Degrees Celsius)','FontSize',16);
datetick('x','mm/dd/yy');