Ocean Colors

From QERM Wiki
Jump to: navigation, search
World.png

Contents

Oceanographic Data

NASA hosts some really nice oceanographic datasets based on satellite imagery, including estimated chlorophyll concentrations, sea surface temperatures, suspended particles and other materials that might be useful for those of us who are looking at processes in the ocean (or really big lakes). The data is down to a 4 km x 4 km resolution and can be downloaded at daily, weekly, monthly, seasonal, yearly averages starting from about 1999. It is pooled (as I understand it) from three NASA-run satellites called Aqua, Terra and SeaWIFS which are in polar orbits taking several passes around the earth each day. The results are based on whatever can be inferred from spectral analyses of reflections. Gaps are evident where the satellites didn't pass, especially at the daily time-step, or where cloud coverage inhibits


Obtaining data in usable format

The main website for the data is here: http://oceancolor.gsfc.nasa.gov/

Complete worldwide datasets are downloadable in something called "HDF" format, if you click for example on the Level 3 browser. These are, however, extremely large and unwieldly files which require an arsenal of tools just to unpack and format properly, and I (Eli) for one never managed to extract useable text files.

For this reason, the Giovanni tool, a little program which produces usable ASCII lat-long-data tables, is very useful. It is located here: http://reason.gsfc.nasa.gov/Giovanni/.

Here's some instructions:

Getting data

  • Go to Giovanni
  • Enter, for example, the "GSM Merged Monthly Global 9-km Products" tab (Java or non-Java doesn't make much difference). This is a generally useful one because it pools all the satellites together. The temporal resolution is only at a month, and the spatial resolution for all Giovanni products is at 9 km x 9 km, but for many uses this could be enough.
  • Choose your dataset (chlorophyll, detrital organic matter, particulate backscattering ... no Sea Surface Temperature).
  • Put in the lat-long limits, set the resolution (maximum is 0.1 degrees), put in your start and end dates.
  • The default data-type is "lat-long, time averaged". Giovanni can also do time-series over spatial averages and other fun stuff.
  • Click on the ASCII output button. A window will pop up with your data, which you can copy-paste to your text editor.

Processing Data

The header to the data will look something like this:

  GSM-Merged  Product
  Selected parameter: Chlorophyll_concentration
  Selected area: lat=[39.0N,50.0N], lon=[92.0W,76.0W]
  Selected time period: (Jan2006-Dec2006)
  Output data resolution: 0.1 deg
  Undefined/Missing Value: 0.
  Latitude Longitude Chlorophyll_concentration(mg*m-3)
    39.00   -92.00     0.000000
    39.00   -91.90     0.000000
    39.00   -91.80     0.000000
    39.00   -91.70     0.000000
    ... etc ...

Change it to look something like this:

  #GSM-Merged  Product
  #Selected parameter: Chlorophyll_concentration
  #Selected area: lat=[39.0N,50.0N], lon=[92.0W,76.0W]
  #Selected time period: (Jan2006-Dec2006)
  #Output data resolution: 0.1 deg
  #Undefined/Missing Value: 0.
  #Latitude Longitude Chlorophyll_concentration(mg*m-3)
    Lat   Long     CC
    39.00   -92.00     0.000000
    39.00   -91.90     0.000000
    39.00   -91.80     0.000000
    39.00   -91.70     0.000000
   ... etc ...

That is, comment out the header material and simplify the table headings.

Plotting in R

An example of loading and plotting the data in R is given below:

 GL<-read.table("c:/GreatLakesChlorophyll.dat",header=T)

Vectors "lats" and "longs" are the possible values of the latitude and longitude

   lats<-as.numeric(levels(factor(GL$Lat)))
   longs<-as.numeric(levels(factor(GL$Long)))

This following important command arranges the data in a matrix with the appropriate dimensions.

   cc.matrix<-matrix(GL$CC,length(longs),length(lats))

Now a simple: image(cc.matrix) command would give a colored plot of the matrix values. But we can interact with maps to make things more interesting

Load the libraries

 library(maps)
 library(mapdata)

Produce the basic map (with Canada-US border from map database "worldHires")

  map('worldHires',xlim=range(longs),ylim=range(lats),xlab="longitude",ylab="latitude",fill=T,col="grey")

Add the chlorophyll, state lines, etc. Note that the chlorophyll data is log-transformed. That's to make the image more meaningful, since the raw data has really long tails.

  image(longs,lats,log(cc.matrix),col=heat.colors(100),add=T)
  map('state',add=T)
  
  axis(1,cex=0.7)
  axis(2,cex=0.7)
  box()

Done!

The result should look like this: Pdf10.png GreatLakesChlorophyll.pdf

Personal tools