Using JupyterGIS on CopPhil
This notebook demonstrates how to use the JupyterGIS extension to visualize and analyze Sentinel-2 satellite imagery over the Philippines.
By bringing GIS functionality directly into the Jupyter environment, JupyterGIS lets you explore geospatial data interactively without leaving your notebook workspace. Instead of switching between separate desktop GIS tools and Jupyter notebooks, you can keep the entire workflow in one place: opening raster data, configuring layers, adjusting visualization parameters, and inspecting pixel values directly inside JupyterLab.
This makes JupyterGIS particularly useful for exploratory analysis. You can quickly compare different visualizations of the same dataset, check whether your pre-processed rasters were generated correctly, and inspect the spectral characteristics of selected areas before moving on to more advanced analysis.
What we are going to cover
This tutorial walks through a practical visualization workflow in JupyterGIS. By the end, you will know how to:
Initialize
JupyterGISand open a new GIS workspace in JupyterLab.Review the interface and identify the main controls used for working with raster layers.
Load GeoTIFF products into the project from server-side storage.
Visualize RGB imagery by assigning the proper Sentinel-2 bands to a multiband color display.
Display false-color imagery to highlight land and vegetation features differently from natural color.
Visualize NDVI using single-band pseudocolor rendering and inspect values for individual pixels.
The examples in this guide focus on already prepared raster products, so the tutorial can concentrate on visualization rather than data preparation. In other words, the goal here is not to generate the source products from scratch, but to show how to use them effectively once they are available in your Jupyter environment.
Prerequisites
Before starting, make sure that you have access to the required environment and that the example datasets are already available.
No. 1 Knowledge of JupyterLab on CopPhil
You should have access to CopPhil in general and to JupyterLab in particular: Introduction to JupyterLab on CopPhil.
You do not need to be an advanced Jupyter user, but you should already be familiar with basic JupyterLab navigation, such as opening tools from the launcher, browsing files, and working inside a notebook-based workspace.
No. 2 JupyterGIS
JupyterGIS is a collaborative Geographical Information System (GIS) environment in JupyterLab.
In this article, JupyterGIS is used as the main interface for loading and styling raster data. The tutorial assumes that the extension is available in your JupyterLab environment and can be launched from the CopPhil workspace.
No. 3 Creation of RGB and False Color Images
For the purposes of this tutorial, three pre-processed images have been prepared. The RGB and False Color examples are based on workflows described in the following guide:
True colours and false colours images based on Sentinel-2 data on CopPhil
These products are assumed to be ready for loading, so that in this tutorial you can focus on display configuration rather than preprocessing steps.
Download example False Colors Image
No. 4 NDVI Images
The NDVI example is based on the workflow described in:
Agriculture and food security monitoring using Sentinel-2 data in JupyterLab on CopPhil
As with the RGB products, the NDVI raster is expected to be prepared in advance and stored in a location accessible from your JupyterLab file browser.
For each .tiff file, use the underlined upward arrow
to upload a file to JupyterLab server.
Important
The workflows presented here are designed to showcase platform functionality and spatial visualization techniques. While the examples use real Sentinel-2 data, any analytical outputs derived from them should be verified against local ground truth data. JupyterGIS is a powerful environment for exploration and inspection, but official environmental interpretation and reporting require appropriate validation and in-situ calibration.
Run JupyterGIS project
To begin the interactive session, navigate to the JupyterGIS icon in the launcher space and click it to initialize the workspace.
At this stage, you are only opening the GIS environment itself. No data has been loaded yet. The purpose of this step is to enter the workspace in which you will later organize layers, change rendering settings, and interact with the imagery.
Once the interface is open, you are ready to create a project context for your work. The next step is therefore not yet about analysis, but about preparing a clean and identifiable workspace that will hold the layers you load later on.
Name JupyterGIS project
Right-click the project tab and rename it as desired, for example cop_s2.
Giving the project a meaningful name helps keep your work organized, especially if you plan to open multiple GIS sessions or compare several image products in parallel. A clear project name also makes it easier to return to your work later and understand immediately what dataset or purpose the session was created for.
At this point, you have successfully opened JupyterGIS and prepared a named workspace. The environment is now ready to accept raster data, which is the next major stage of the workflow.
Load GeoTiff into JupyterGIS project
Click the + icon, select Add Raster Layer, and then choose New GeoTiff Layer.
This begins the process of adding your first raster dataset to the project. In practical terms, you are creating a layer entry inside JupyterGIS that will point to one of your prepared Sentinel-2-derived products.
Select Browse Server Files to choose the file you want to upload.
The file browser lets you work directly with data already available on the server side, which is particularly useful in Jupyter-based environments where large geospatial files are often stored close to the compute resources.
Navigate to locate the correct file and select the proper image.
Once the file is selected, the raster layer becomes part of your project. At this moment, the data is present in the workspace, but it may not yet be displayed with the most useful styling. The next stage is therefore to prepare the raster for visualization by defining suitable display ranges.
Load GeoTiff into JupyterGIS project (alternative way)
You can also load the file from the right-side panel by selecting Browse Server Files.
Navigate to the desired location in the file tree.
This alternative route leads to the same result: the raster becomes available as a layer in your project. It is useful to know both methods, since depending on your workspace layout or personal habits, one may feel quicker or more convenient than the other.
Whichever method you use, the important outcome is that the image is now loaded into JupyterGIS and ready to be styled appropriately.
Preparation for visualization
The first visualization example in this tutorial is a True Color RGB view.
Before applying color symbology, set the Min value to 0 and the Max value to 255. Leave all other settings at their default values.
This step prepares the raster values for proper on-screen rendering. By defining a suitable display range, you make sure that the image is shown with a balanced contrast rather than appearing too dark, too bright, or visually compressed.
In other words, this is the stage where you tell JupyterGIS how to interpret the numeric raster values for display purposes. Once this is done, you can move on to assigning the correct bands and producing a meaningful visual representation.
Visualization RGB
To apply the correct colors to your visualization, right-click the loaded GeoTiff layer and select Edit Symbology.
This is the key point at which the raster changes from a generic loaded layer into an interpretable image product. Up to now, the data has only been present in the workspace; from this step onward, you are defining how it should actually be displayed.
Select Multiband Color and set the channels in the following order:
Red Band — Band 3
Green Band — Band 2
Blue Band — Band 1
With these settings, the raster is rendered as a True Color image. This type of display is useful when you want a natural-looking view of the scene that resembles how the area would appear to the human eye.
Click Ok.
At this stage, you have completed the first major result of the tutorial: a properly rendered RGB visualization. This confirms that the layer has been loaded successfully, that the value range is suitable, and that the symbology settings are correctly configured.
With this foundation in place, you can now repeat the general workflow for another type of visualization, this time using a False Color composite.
Load and visualize False Colors
You can repeat the same loading and display procedure to create a False Color composite using the infrared band.
The main logic remains the same: load the raster, open the symbology settings, and assign the relevant bands for display. What changes is the visual interpretation. Unlike True Color imagery, False Color composites are designed to emphasize certain surface characteristics, especially vegetation and land cover differences, by mapping spectral bands to non-natural display colors.
This means that by this point in the tutorial, you are no longer just learning how to load data — you are beginning to compare different ways of seeing the same area. That is one of the central strengths of JupyterGIS as an exploratory environment.
After completing the False Color view, the next step is to move from multiband imagery to a single-band analytical product: NDVI.
Load and visualize NDVI
To visualize NDVI, a slightly different approach is required. After loading the processed image, set the Min and Max values to -1 and 1, respectively, which corresponds to the standard NDVI range.
To ensure that the pixels retain their original values, also uncheck the Normalize option.
This is an important distinction from the RGB and False Color cases. NDVI is not intended to represent natural or display color directly. Instead, it encodes vegetation-related information numerically, so the visualization settings must preserve those values faithfully.
Select Edit Symbology as before, but this time choose Singleband Pseudocolor.
Set the values and colors as you see fit. You can also follow the example shown below.
The purpose of pseudocolor rendering is to translate NDVI values into an easy-to-read visual scale. This allows areas with different vegetation conditions to stand out immediately, making the raster more useful for interpretation and quick inspection.
Click Ok.
At this stage, you have completed the third major visualization workflow in the article. You have moved from natural-color display, through alternative spectral rendering, to a thematic index product designed for analysis.
To inspect the NDVI value of a specific pixel, select the i (Identify) icon in the top-left corner and click on the image. The value will appear in the top-right corner of the interface.
This final interaction step turns the visualization into an inspection tool. Instead of only looking at colors, you can now query the actual numeric value behind a pixel and relate the displayed color back to the underlying data. This is especially useful when checking whether the visualization settings behave as expected or when comparing different areas of interest.
Summary
In this tutorial, you opened a JupyterGIS workspace in CopPhil, named and prepared a project, loaded GeoTIFF rasters, and configured them for several different visualization purposes.
You first created a True Color RGB view to confirm that the imagery could be displayed in a natural-looking form. You then extended the same workflow to a False Color composite, which highlights surface characteristics differently and is often more informative for land and vegetation interpretation. Finally, you worked with an NDVI raster, applied a single-band pseudocolor style, and inspected individual pixel values directly in the interface.
Taken together, these steps provide a practical introduction to how JupyterGIS can be used as a lightweight but capable GIS environment inside JupyterLab. Once you are comfortable with these basic operations, you can continue using the same approach for other raster products, additional indices, or more advanced exploratory workflows.