Circle layer component for MapLibre maps in Phoenix LiveView.
This component renders point data as circles with variable radius and styling. It's specialized for visualizing POIs, events, and point density with sizes that can be data-driven.
Examples
Basic circle layer:
<.circle_layer
id="pois"
map_id="my-map"
source_id="poi-data"
paint={%{
"circle-radius" => 5,
"circle-color" => "#007cbf"
}}
/>Data-driven styling:
<.circle_layer
id="earthquakes"
map_id="my-map"
source_id="earthquake-data"
paint={%{
"circle-radius" => ["get", "magnitude"],
"circle-color" => [
"interpolate",
["linear"],
["get", "magnitude"],
1, "#ffffb2",
3, "#fd8d3c",
5, "#bd0026"
],
"circle-opacity" => 0.8
}}
/>With filters and zoom constraints:
<.circle_layer
id="large-cities"
map_id="my-map"
source_id="cities"
source_layer="city-labels"
filter={[">=", "population", 1000000]}
min_zoom={4}
max_zoom={10}
paint={%{
"circle-radius" => 8,
"circle-color" => "#FF0000"
}}
/>Events
The circle layer can emit the following events to LiveView:
def handle_event("layer:feature_clicked", %{"layer_id" => id, "feature" => feature}, socket) do
IO.inspect(feature, label: "Clicked feature")
{:noreply, socket}
end
def handle_event("layer:feature_mouseenter", %{"layer_id" => id, "feature" => feature}, socket) do
# Change cursor, show tooltip, etc.
{:noreply, socket}
end
def handle_event("layer:feature_mouseleave", %{"layer_id" => id}, socket) do
# Reset cursor, hide tooltip, etc.
{:noreply, socket}
end
Summary
Functions
Renders a circle layer component.
Functions
Renders a circle layer component.
Attributes
id(required) - Unique identifier for the layermap_id(required) - ID of the map to attach tosource_id(required) - ID of the data sourcesource_layer- Layer name in the source (for vector tiles)paint- Paint properties (circle-radius, circle-color, circle-opacity, etc.)layout- Layout properties (visibility, etc.)filter- Filter expression to show subset of featuresmin_zoom- Minimum zoom level for layer visibilitymax_zoom- Maximum zoom level for layer visibilitybefore_id- ID of layer to insert this layer before
Events
layer:feature_clicked- Fired when a feature is clickedlayer:feature_mouseenter- Fired when mouse enters a featurelayer:feature_mouseleave- Fired when mouse leaves a featurelayer:added- Fired when layer is added to maplayer:removed- Fired when layer is removed from map
Attributes
id(:string) (required)map_id(:string) (required)source_id(:string) (required)source_layer(:string) - Defaults tonil.paint(:map) - Defaults to%{}.layout(:map) - Defaults to%{}.filter(:any) - Defaults tonil.min_zoom(:integer) - Defaults tonil.max_zoom(:integer) - Defaults tonil.before_id(:string) - Defaults tonil.