GeoNotebook is an extension to the Jupyter Notebook that provides interactive visualization and python-based analysis of geospatial data. It is built with open source tools and is being jointly developed by Kitware and NASA Ames.


GeoNotebook’s concrete goals are to provide a web based analysis tool that:

  1. Supports reproducible, exploratory analysis with a focus on geospatial data and formats.
  2. Provides easy deployment of a secure analysis environment close to where data is stored.
  3. Can be extended to support a wide array of data access and visualization contexts.


GeoNotebook is designed to appeal to, and hopefully meet the needs of, several audiences:

  • Geospatial experts who are interested in using state of the art data science tools like the Jupyter Notebook to explore their data and share their findings.
  • Data scientists who are already using the python data analytics stack (e.g. numpy, pandas, matplotlib, jupyter, etc) but find current geospatial libraries to be confusing or burdensome.
  • Technical managers of large quantities of geospatial data who are looking to maximize usage by provide analysis environments that are closer their data.


GeoNotebook extends the Jupyter Notebook interface by adding a large Open Street Map style map to the right of the traditional notebook cells.


We provide a python API from with-in the notebook cells for visualizing raster and vector data on the map. We also provide basic tools for selecting regions of the visualized data and making those regions available as data subsets in the notebook.

GeoNotebook consists of extensions to three components of the Jupyter Notebook, these include Custom request handlers (also called a ‘server extension’), a Custom front-end extension (also called an ‘nbextension’) and a simple Python wrapper kernel called the GeoNotebook kernel.

Unlike some other interactive geospatial extensions to the Jupyter Notebook, GeoNotebook is not built on top of the excellent widgets infrastructure. Instead GeoNotebook relies directly on Jupyter’s custom message comm protocol to coordinate communication between the JavaScript map and the in-notebook python API. While this increases the underlying complexity of the code, it provides a more flexible development environment for implementing GeoNotebook’s user interface.

GeoNotebook extends Jupyter’s web server to provide a fully integrated default tile server based on KTile (a fork of TileStache), Mapnik, and GDAL. This tile server allows data to be rendered server-side and delivered as down-sampled images for visualization while full resolution access to the data is still available via the notebook cells.

GeoNotebook is designed with a modular structure to support different visualization servers and different methods for data access.