Skip to content

49 split control

image image image

Creating a split-panel map

This notebook demonstrates how to add a split-panel map with leafmap anf folium. It also supports streamlit. Note that the ipyleaflet SplitControl does not support streamlit.

Uncomment the following line to install leafmap if needed.

1
# !pip install leafmap
1
2
3
4
import folium
import rioxarray
import xarray as xr
import leafmap.foliumap as leafmap

The split-panel map requires two layers: left_layer and right_layer. The layer instance can be a string representing a basemap, or an HTTP URL to a Cloud Optimized GeoTIFF (COG), or a folium TileLayer instance.

Using basemaps

1
2
3
m = leafmap.Map(height=500)
m.split_map(left_layer="TERRAIN", right_layer="OpenTopoMap")
m

Show available basemaps.

1
# leafmap.basemaps.keys()

Using COG

1
2
3
4
5
m = leafmap.Map(height=600, center=[39.4948, -108.5492], zoom=12)
url = "https://github.com/opengeos/data/releases/download/raster/Libya-2023-07-01.tif"
url2 = "https://github.com/opengeos/data/releases/download/raster/Libya-2023-09-13.tif"
m.split_map(url, url2)
m

Using folium TileLayer

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
m = leafmap.Map(center=[40, -100], zoom=4)

url1 = "https://www.mrlc.gov/geoserver/mrlc_display/NLCD_2001_Land_Cover_L48/wms?"
url2 = "https://www.mrlc.gov/geoserver/mrlc_display/NLCD_2019_Land_Cover_L48/wms?"

left_layer = folium.WmsTileLayer(
    url=url1,
    layers="NLCD_2001_Land_Cover_L48",
    name="NLCD 2001",
    attr="MRLC",
    fmt="image/png",
    transparent=True,
)
right_layer = folium.WmsTileLayer(
    url=url2,
    layers="NLCD_2019_Land_Cover_L48",
    name="NLCD 2019",
    attr="MRLC",
    fmt="image/png",
    transparent=True,
)

m.split_map(left_layer, right_layer)
m

Using xarrays

Download a sample dataset.

1
2
url = "https://opengeos.org/data/raster/srtm90.tif"
dem = leafmap.download_file(url, "srtm90.tif")

Use rioxarray to read the raster as a xarray DataArray and then classify the DEM into 2 elevation classes.

1
2
dem_ds = rioxarray.open_rasterio(dem)
dem_class = xr.where(dem_ds < 2000, 0, 1)

Visualize the DEM and the elevation class image as a split map.

1
2
3
4
5
6
7
8
m = leafmap.Map(center=[37.6, -119], zoom=9)
m.split_map(
    dem_ds,
    dem_class,
    left_args={"layer_name": "DEM", "colormap": "terrain"},
    right_args={"layer_name": "Classified DEM", "colormap": "coolwarm"},
)
m