multilayer-sdk
Pure-Python Synchronized Multi-Panel Map Visualization, Spatial Comparison Engine & Interactive Dashboard Builder.
🌐 Live Interactive Studio & Documentation
Explore the interactive multi-panel map simulator and comprehensive reference manual:
👉 https://yusufeminoglu.github.io/multilayer-sdk/
Try out real-time neon laser crosshair tracking, split-screen curtain swipe comparisons, and live choropleth classifiers directly in your browser.
🌟 Overview
multilayer-sdk (the headless Python core behind 02Multimap) allows urban planners, spatial data scientists, and researchers to visualize, cross-analyze, and compare multiple spatial datasets side-by-side with millisecond synchronization.
Instead of toggling layers on and off in a single map, multilayer coordinates up to 8 synchronized map viewports in dynamic grids (1x2, 2x1, 1x3, 2x2, 2x3, 2x4) with:
- Bi-directional Pan & Zoom Broadcasting: Drag or zoom on any panel to coordinate all others in real time.
- Neon Laser Crosshair Cursor Tracking: Move your mouse over any panel to project neon-colored crosshairs tracking the exact geographic coordinate across all viewports.
- Graduated Thematic Choropleths: Quantiles, Equal Interval, Natural Breaks, and Standard Deviation statistical binning with scientific palettes (
viridis,magma,plasma,turbo,cividis,spectral,rdylbu). - Interactive Split-Screen Curtain Swipe: Draggable split slider for before/after temporal change detection.
- Single-File Self-Contained HTML Dashboards: Export zero-dependency interactive HTML files ready for presentations, stakeholders, or offline field audits.
- Jupyter Notebook & Google Colab Integration: Rich inline widget display via
mm.show().
🚀 Installation
pip install multilayer-sdk
⚡ Quickstart
1. Build a 4-Panel Synchronized Workspace
import multilayer as ml
# 1. Initialize a 4-panel (2x2) synchronized map grid
mm = ml.MultiMap(grid="2x2", title="Urban Vulnerability & Land Use Assessment", basemap="carto-dark")
# 2. Panel 1: High-resolution satellite imagery with study area boundary
mm.panel(0).title = "1. Satellite Context"
mm.panel(0).set_basemap("satellite")
mm.panel(0).add_layer("study_area.geojson", stroke_color="#38bdf8", fill_opacity=0.2)
# 3. Panel 2: Thematic choropleth of population density
vlayer = ml.VectorLayer.from_geojson("demographics.geojson")
pop_choro = ml.Choropleth.classify(vlayer, property_name="density_km2", method="quantiles", color_ramp="viridis")
mm.panel(1).title = "2. Population Density"
mm.panel(1).add_layer(pop_choro)
# 4. Panel 3: Flood hazard exposure score
risk_choro = ml.Choropleth.classify(vlayer, property_name="flood_risk_score", method="equal_interval", color_ramp="magma")
mm.panel(2).title = "3. Flood Hazard Exposure"
mm.panel(2).add_layer(risk_choro)
# 5. Panel 4: Future 2030 Master Zoning Plan
mm.panel(3).title = "4. Future Master Plan 2030"
mm.panel(3).add_layer("zoning_plan.geojson", fill_color="#10b981", fill_opacity=0.6)
# 6. Save as standalone interactive HTML dashboard
mm.to_html("urban_assessment_dashboard.html")
# 7. Render inline in Jupyter Notebook / Google Colab
mm.show()
2. Draggable Split-Screen Curtain Swipe Comparison
import multilayer as ml
swipe = ml.SwipeMap(
left_layer="landcover_2010.geojson",
right_layer="landcover_2026.geojson",
left_title="Historical (2010)",
right_title="Current (2026)",
basemap="satellite"
)
swipe.to_html("deforestation_swipe.html")
💻 Command Line Interface (CLI)
# 1. Build a 2x2 synchronized dashboard from 4 GeoJSON files
multilayer build --layers bldgs.geojson,roads.geojson,hazard.geojson,zoning.geojson --grid 2x2 --out city_dashboard.html --open
# 2. Build a 2-panel before/after split-screen swipe comparison
multilayer compare flood_2020.geojson flood_2026.geojson --left-title "2020 Flood" --right-title "2026 Flood" --out flood_swipe.html
# 3. Inspect GeoJSON feature count, properties, and bounding box
multilayer inspect study_area.geojson
# 4. List all built-in web map tile basemaps
multilayer tiles
⚙️ Supported Grid Matrices
| Grid Preset | Layout Dimensions | Panel Count | Primary Cartographic Use Case |
|---|---|---|---|
1x2 |
1 Row $\times$ 2 Columns | 2 Panels | Before/After comparisons, Suitability vs Actual zoning |
2x1 |
2 Rows $\times$ 1 Column | 2 Panels | Vertical elevation profiles, transport corridors |
1x3 |
1 Row $\times$ 3 Columns | 3 Panels | Past $\rightarrow$ Present $\rightarrow$ Future temporal timelines |
2x2 |
2 Rows $\times$ 2 Columns | 4 Panels | 4-way evaluation (Base, Demographics, Hazards, Policy) |
2x3 |
2 Rows $\times$ 3 Columns | 6 Panels | Multi-criteria evaluation (MCDA factor grids) |
2x4 |
2 Rows $\times$ 4 Columns | 8 Panels | High-density multi-scenario sensitivity snapshots |
📄 Academic Citation
If you use multilayer-sdk in scientific publications, planning projects, or research, please cite:
@software{eminoglu2026multilayer,
author = {Emino{\\u{g}}lu, Yusuf},
title = {{multilayer-sdk: Pure-Python Synchronized Multi-Panel Map Visualization, Spatial Comparison Engine, and Interactive Dashboard Builder}},
year = {2026},
publisher = {PyPI - Python Package Index},
version = {0.1.0},
url = {https://github.com/YusufEminoglu/multilayer-sdk}
}
📜 License
Distributed under the MIT License. Copyright (c) 2026 Yusuf Eminoğlu.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file multilayer_sdk-0.1.1.tar.gz.
File metadata
- Download URL: multilayer_sdk-0.1.1.tar.gz
- Upload date:
- Size: 25.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0ad3ddf8815280b715cb318d07f6f6585474b504d25f079149981e7410fc66b
|
|
| MD5 |
484b234eac6cc74c4157ac4c0343b5db
|
|
| BLAKE2b-256 |
3541a63a1dc1440bb24f64a0c09a0c251afcb3e01232ebdaad4a92772f9c0926
|
Provenance
The following attestation bundles were made for multilayer_sdk-0.1.1.tar.gz:
Publisher:
publish.yml on YusufEminoglu/multilayer-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
multilayer_sdk-0.1.1.tar.gz -
Subject digest:
b0ad3ddf8815280b715cb318d07f6f6585474b504d25f079149981e7410fc66b - Sigstore transparency entry: 2591303467
- Sigstore integration time:
-
Permalink:
YusufEminoglu/multilayer-sdk@d8e5c6caea0a7d4bc8a036af03dac626695bdf8c -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/YusufEminoglu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d8e5c6caea0a7d4bc8a036af03dac626695bdf8c -
Trigger Event:
release
-
Statement type:
File details
Details for the file multilayer_sdk-0.1.1-py3-none-any.whl.
File metadata
- Download URL: multilayer_sdk-0.1.1-py3-none-any.whl
- Upload date:
- Size: 23.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e13ce4aa099b4f54e78929a817d3839f3212636c10b57fdea053547244e9a76d
|
|
| MD5 |
f277e14767c778cd045a1566c1fba0d8
|
|
| BLAKE2b-256 |
442bfd2d0a905f6fc89bb21495f7c025e8d31cf9f4be26240c24d940590a50a4
|
Provenance
The following attestation bundles were made for multilayer_sdk-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on YusufEminoglu/multilayer-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
multilayer_sdk-0.1.1-py3-none-any.whl -
Subject digest:
e13ce4aa099b4f54e78929a817d3839f3212636c10b57fdea053547244e9a76d - Sigstore transparency entry: 2591303855
- Sigstore integration time:
-
Permalink:
YusufEminoglu/multilayer-sdk@d8e5c6caea0a7d4bc8a036af03dac626695bdf8c -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/YusufEminoglu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d8e5c6caea0a7d4bc8a036af03dac626695bdf8c -
Trigger Event:
release
-
Statement type: