Blue Marble

From GRASS-Wiki
Jump to: navigation, search

The classic Blue_Marble photo of Earth was taken by the crew of Apollo 17 on their way to the moon in 1972.

In 2002 NASA released an updated version suitable for GIS created by a mosaic of satellite images with the clouds removed. In 2005 this was rereleased, with a separate image provided for each month of the previous year.

This page deals with importing the latter into GRASS.


Data source: NASA's Visible Earth website.

From this site you can also get the well known "Earth at night" image, and a version of the Blue Marble including clouds.

The entire world image is 43200x21600, 1/2 arc-minute (~1km per pixel) resolution.

90N to 90S = 180 degrees = 10800 minutes = 21600 1/2 minutes


To download the maps you have a few choices:

  • The new maps can be found here:

21600x21600 East Hemisphere (401mb)

21600x21600 West Hemisphere (241mb)

The Wget program is nice for downloading these. For example (-c to continue a potentially interrupted download):

 wget -c
 wget -c

  • Mirror site with some more images:
  • Check if the files are available from


  • Create a lat/lon location. I used WGS84 as the datum, but as typical datum differences are much less than the pixel resolution I'm not sure if it makes a difference which one you chose. The only problematic choice might be sphere (the GDAL "null nadgrids" problem). You can overlay a world coastline, like admin98.shp, to test how you've done.
Alternatively you can import into a raw XY location, and reset the map bounds to 90N,S 180E,W with the r.region module. You would then need to convert the location to lat/lon with g.setproj. If all went well should report the cell resolution as exactly 0:00:30 (i.e. 30 arc-second).

  • Create "world files" for the raw .tif images (thus making them into GeoTiffs).
The 0.0083333 is cell resolution (in degrees, 0.5'/60) and N,S,E,W boundaries are reduced 1/2 a cell as these refer to cell centers of the outer rows, not the outer boundaries of the cell. Attempting to import a map with a region boundary >90 degrees N,S will cause an error.

  • Import into a lat/lon location with Bypass the projection check with the -o flag.
This will create three images, one for red, green, and blue.
  • Zoom to the extents of both images (or just one) with:
 g.region rast=BlueMarble_2002_east,BlueMarble_2002_west
  • Merge east and west images by color bands with r.patch
  • If you wish to combine R,G,B bands into a single raster map do so with r.composite. Only do this if you must, as you'll lose detail.


  • I've had good results exported at natural resolution, and then cubic rescale in the GIMP to my desired size. I find the images a bit dark, brighten them in GIMP with Tools-> Color Tools-> Brightness-Contrast. Increase both brightness contrast together to around +40.
  • Some of the pixels are NULL. If any of the R,G,B map pixels are NULL, d.rgb will show white for that cell, which may stick out badly. To mitigate the problem, try erasing the display to black first with d.erase.

2004 monthly

aka Blue Marble next generation, available at 8km, 2km, and 500m per pixel resolution. (i.e. 4 arc-minute, 1 minute, and 1/2 arc-minute)

NASA site:

  • I am not sure if the "500m" version is actually 1/4' or in fact 1/2'. At the equator 1/2' is 926m.


Again you can download the entire dataset, but it may be preferable to only download the information for your local area. To do this you can use a WMS (Web_Map_Service) server and associated modules:

  • The 500m dataset is available by BitTorrent. The tracker files foe each month are given at the NASA website. Each month is approx. 1.4gb.
ktorrent is a nice BitTorrent client for Linux


The following example demonstrates import and visualization of the Blue Marble imagery draped over the ETOPO2 global topography dataset.

# in a lat/lon location ....

# import in=Blue_Marble2002/land_shallow_topo_east.tif out=BlueMarble2002_east -o in=Blue_Marble2002/land_shallow_topo_west.tif out=BlueMarble2002_west -o

# patch together east and west tiles
g.region rast="${base},${base}"
for BAND in red green blue ; do
   r.patch in="${base}_east.$BAND,${base}_west.$BAND" out="${base}.$BAND"

# down-sample to 2 arcmin (to match ETOPO2)
g.region res=0:02
for BAND in red green blue ; do
   r.resamp.stats in="${base}.$BAND" out="${base}_2min.$BAND" method=average

# display
d.rgb r=${base} g=${base} b=${base}

# create composite image for use with NVIZ
r.composite r=${base} g=${base} b=${base} \

# visualize in 2D
r.shaded.relief map=etopo2@etopo2 units=meters
d.shadedmap relief=etopo2.shaded drape=BlueMarble2002_2min \

# visualize in 3D
nviz elev=etopo2@etopo2 color=BlueMarble2002_2min