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.
# !pip install leafmap
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
m = leafmap.Map(height=500)
m.split_map(left_layer="TERRAIN", right_layer="OpenTopoMap")
m
Show available basemaps.
# leafmap.basemaps.keys()
Using COG
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
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.
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.
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.
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