Widgets


pydeck

Source

"""
Widgets
=======

Demonstrates deck.gl UI widgets in pydeck.

This example shows several built-in widgets for map navigation and interaction:
- ZoomWidget and CompassWidget for camera control
- FullscreenWidget and ScreenshotWidget for utility
- ScaleWidget for displaying map scale
- StatsWidget for rendering performance stats
"""

import pydeck as pdk

# Data sources
COUNTRIES = "https://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_50m_admin_0_scale_rank.geojson"
AIR_PORTS = "https://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_10m_airports.geojson"

# Initial view centered on London
view_state = pdk.ViewState(latitude=51.47, longitude=0.45, zoom=4, bearing=0, pitch=30)

# Layers
countries_layer = pdk.Layer(
    "GeoJsonLayer",
    id="base-map",
    data=COUNTRIES,
    stroked=True,
    filled=True,
    line_width_min_pixels=2,
    opacity=0.4,
    get_line_color=[60, 60, 60],
    get_fill_color=[200, 200, 200],
)

airports_layer = pdk.Layer(
    "GeoJsonLayer",
    id="airports",
    data=AIR_PORTS,
    filled=True,
    point_radius_min_pixels=2,
    point_radius_scale=2000,
    get_point_radius="11 - properties.scalerank",
    get_fill_color=[200, 0, 80, 180],
    pickable=True,
    auto_highlight=True,
)

# Widgets for map navigation and interaction
widgets = [
    pdk.Widget("ZoomWidget"),
    pdk.Widget("CompassWidget"),
    pdk.Widget("FullscreenWidget"),
    pdk.Widget("ScreenshotWidget"),
    pdk.Widget("ScaleWidget", placement="bottom-right"),
    pdk.Widget("StatsWidget", statsType="luma", placement="bottom-left"),
]

deck = pdk.Deck(
    layers=[countries_layer, airports_layer],
    initial_view_state=view_state,
    widgets=widgets,
    tooltip={"text": "{properties.name} ({properties.abbrev})\n{properties.type}"},
)

deck.to_html("widgets.html")