ESPA Tools

Documentation Status PyPI Build Status Documentation Built by gendocs GitHub

An open-source Python package for simple loading of Landsat imagery as NumPy arrays. When downloading Landsat imagery from USGS Earth Explorer, the datasets contain many bands (.tif files) and a few metadata files (.txt and .xml files). espatools is built to parse the .xml metadata file to read all of the bands for that dataset and provide a convenient and intuitive means of accessing that metadata along side the raw data in a Python environment. espatools can be found on GitHub and PyPI.

Collage of RGB colors


  • The package heavily uses properties for the creation of strongly typed objects in a consistent, declarative way.
  • This package implements a way to convert these datasets to a PyVista dataset (vtkImageData).
  • PVGeo has implemented an interface for espatools to read Landsat imagery via XML metadata files. Check out PVGeo’s Landsat Reader for more details.

Getting Started

espatools is available from PyPI

$ pip install espatools


We think espatools is easy to use; give it a try and let us know what you think as this is just the alpha-release!

  1. First, checkout this Jupyter Notebook for a demonstration of some simple plotting after reading Landsat imagery in a Python environment.
  1. And take a look at the .to_pyvista() method on RasterSet objects to have a 3D dataset of the imagery in PyVista/VTK
  2. Then take a look at the Landsat Reader in PVGeo’s documentation where espatools has an interface for direct use in ParaView.

Example False Color

import espatools
import matplotlib.pyplot as plt

# Create the reader to manage I/O
reader = espatools.RasterSetReader(filename='metadata.xml')

# Perform the read and yield a raster set
raster =

# Get an RGB color scheme
color = raster.get_rgb('false_a')

# Now plot the false color image

The results of the above code yield the following false color image:

RGB False Color

You can also view the dataset in 3D using PyVista:

mesh = raster.to_pyvista()
mesh.plot(scalars='false_a', rgb=True, cpos='xy')