Blue Marble Map Background#
NASA compiles some of the best photos of the Earth, which makes for very nice map backgrounds. This blog post demonstrates how to access these photos and apply them as a map background.
You can find a variety of different high-quality images from NASA here. You can even choose which month of the year you want to show.
Import necessary packages:
import matplotlib.pyplot as plt # package for plotting
import cartopy.feature as cfeature # package for making maps
import cartopy.crs as ccrs # cartopy projections
import PIL # package for imaging manipulation
import urllib # package for working with urls
First, let’s define a function for plotting a map with a background so we can plot several different maps:
def plot_map(url, projection=ccrs.PlateCarree(), gridlines=False):
# Load the image
img = PIL.Image.open(urllib.request.urlopen(url))
# Alternatively download and load the image locally
# img = plt.imread('/local_path/blue_marble_next_generation.jpg')
# Define the image (covers the entire Earth)
img_extent = (-180, 180, -90, 90)
ax = plt.axes(projection=projection)
ax.set_global()
if gridlines:
ax.gridlines()
ax.imshow(img, origin='upper', extent=img_extent, transform=ccrs.PlateCarree())
As a first example, let’s use a view of the Earth for October as the background for a map with the plate carrée map projection:
url_october = 'https://eoimages.gsfc.nasa.gov/images/imagerecords/74000/74167/world.200410.3x5400x2700.jpg'
plot_map(url_october, projection=ccrs.PlateCarree(), gridlines=True)
We could as easily have chosen another map projection, e.g., the funky lambert conformal and a photo with clouds:
url_ocean_ice_cloud = 'https://eoimages.gsfc.nasa.gov/images/imagerecords/57000/57735/land_ocean_ice_cloud_2048.jpg'
plot_map(url_ocean_ice_cloud, projection=ccrs.LambertConformal(), gridlines=True)
NASA even has this cool photo of light polution:
url_nighttime = 'https://eoimages.gsfc.nasa.gov/images/imagerecords/55000/55167/earth_lights_lrg.jpg'
plot_map(url_nighttime)