-
Notifications
You must be signed in to change notification settings - Fork 3
GeoSet Map Layer
The GeoSet Map Layer (deck_geoset_map_layer) is the core chart type for rendering geospatial data. It renders a single layer of geographic features on an interactive map and is the building block for GeoSet Multi Map.
- In Superset, go to Charts → + Chart
- Select your dataset and choose GeoSet Map Layer as the chart type
- In the Map Configuration panel, configure your layer
Select the column in your dataset that contains GeoJSON geometry. This can be a geometry column (PostGIS) or a text column containing GeoJSON strings.
| Type | Description |
|---|---|
| Polygon | Filled polygons with configurable stroke. Best for boundary/area data. |
| Point | Individual points or icons at coordinate locations. Supports clustering. |
| Line | Polylines and paths. Supports dashed/dotted styles. |
| Text Overlay | Text labels rendered at feature locations. Requires a Text Label Column. |
| GeoJSON | Raw GeoJSON — auto-detects geometry type from the data. |
Maximum number of features to load. For large datasets, increase this or use server-side filtering with Filters.
When enabled, the map automatically fits its viewport to the extent of the loaded features on each query. When disabled, you control the viewport manually.
Sets the initial map center, zoom, pitch, and bearing. Only visible when Autozoom is off.
- Capture Map Viewport — click to snap the popover values to the current map position
- Enable Static Viewport — locks the map to the saved viewport; panning and zooming will not change the saved position
- Save — persists the viewport values
- Close — reverts to the last saved viewport
Choose the base map style (streets, satellite, dark, light, etc.). Requires a valid Mapbox API key in your environment.
Sets the zoom range at which this layer is visible. Useful for multi-layer maps where you want different levels of detail at different zoom levels.
Only available for the Point layer type.
| Control | Description |
|---|---|
| Enable Clustering | Groups nearby points into cluster circles |
| Cluster Radius | Pixel radius for grouping points into a cluster |
| Cluster Max Zoom | Zoom level at which clustering stops and individual points appear |
| Min Points per Cluster | Minimum number of points required to form a cluster |
Columns to display in the tooltip when hovering over a feature.
Columns to display in the click popup when a feature is clicked.
The GeoJSON Config editor controls how features are styled and labeled. It accepts a JSON object with the following top-level keys.
Applies a single style to all features. Used when you don't need per-category or per-value coloring.
{
"globalColoring": {
"fillColor": [40, 147, 179, 255],
"strokeColor": [0, 0, 0, 255],
"strokeWidth": 2,
"lineStyle": "solid",
"fillPattern": "solid",
"pointType": "circle"
}
}| Field | Type | Description |
|---|---|---|
fillColor |
[R, G, B, A] |
Fill color as RGBA (0–255) |
strokeColor |
[R, G, B, A] |
Stroke/outline color as RGBA |
strokeWidth |
number | Stroke width in pixels |
lineStyle |
string | Line rendering style: "solid", "dashed", or "dotted". Optional, defaults to null. |
fillPattern |
string |
"solid" (required) |
pointType |
string | Icon name for point layers: "circle", "point", "marker", "square", or "triangle". Optional, defaults to null (circle). |
Controls the size of point icons. This is a top-level key (not inside globalColoring). It accepts either a static number or a dynamic data-driven configuration object.
Static — a single pixel size applied to all points (1–200):
{
"pointSize": 10
}Dynamic — sizes points based on a numeric column value:
{
"pointSize": {
"valueColumn": "incident_size",
"startSize": 4,
"endSize": 30,
"lowerBound": null,
"upperBound": null
}
}| Field | Type | Description |
|---|---|---|
valueColumn |
string | The numeric column to map to point size |
startSize |
number | Pixel size at the lower bound (1–200) |
endSize |
number | Pixel size at the upper bound (1–200, must be greater than startSize) |
lowerBound |
number, string, or null
|
Value that maps to startSize. A number sets an absolute value, a string like "25%" uses the 25th percentile of the data, and null uses the data minimum. |
upperBound |
number, string, or null
|
Value that maps to endSize. A number sets an absolute value, a string like "75%" uses the 75th percentile of the data, and null uses the data maximum. |
Colors features by a categorical column. Each category maps to a color and an optional legend label.
{
"colorByCategory": {
"dimension": "fire_cause",
"categoricalColors": [
{
"Human": {
"fillColor": [255, 100, 0, 255],
"legend_entry_name": "Human Caused"
}
},
{
"Natural": {
"fillColor": [0, 180, 80, 255],
"legend_entry_name": "Natural"
}
}
],
"defaultLegendName": ["Other"]
}
}| Field | Description |
|---|---|
dimension |
The dataset column name to color by |
categoricalColors |
Array of { category_value: { fillColor, legend_entry_name } } objects |
defaultLegendName |
Label shown in the legend for values not in categoricalColors
|
Colors features using a gradient based on a numeric column value. Bounds and breakpoints accept both numeric values and percentile strings (e.g. "10%", "90%"), which are resolved against the actual data distribution on the frontend.
{
"colorByValue": {
"valueColumn": "max_wind_speed",
"upperBound": 150,
"lowerBound": 0,
"startColor": [255, 255, 0, 255],
"endColor": [255, 0, 0, 255],
"breakpoints": []
}
}| Field | Description |
|---|---|
valueColumn |
The numeric column to map to color |
upperBound |
Value that maps to endColor. Number, percentage string (e.g. "90%"), or null for data maximum. |
lowerBound |
Value that maps to startColor. Number, percentage string (e.g. "10%"), or null for data minimum. |
startColor |
RGBA color for the lowest value |
endColor |
RGBA color for the highest value |
breakpoints |
Optional array of intermediate stops (numbers or percentage strings) |
Controls how this chart's layer appears in a multi-layer legend.
{
"legend": {
"title": "Storm Data",
"name": "Storm Track Points"
}
}| Field | Description |
|---|---|
title |
Group heading in the multi-layer legend |
name |
Label for this specific layer within the group |
Controls the appearance of text annotations rendered on the map. Only applies when a Text Label Column is selected in the chart controls. Color is inherited from globalColoring.fillColor.
{
"textOverlayStyle": {
"fontFamily": "Arial, sans-serif",
"fontSize": 14,
"bold": false,
"offset": [0, 0]
}
}| Field | Type | Default | Description |
|---|---|---|---|
fontFamily |
string | "Arial, sans-serif" |
CSS font family for text labels |
fontSize |
integer | 14 |
Font size in pixels (1–128) |
bold |
boolean | false |
Whether to render text in bold |
offset |
[x, y] |
[0, 0] |
Pixel offset from the feature's anchor point |
The GeoJSON Config is validated on the backend through versioned Marshmallow schemas (V1, V2, V3, etc.). When you save a chart, the frontend includes a schema_version number. If a chart was saved with an older schema version, the backend can automatically upgrade it to the latest version via the /geoset_map/schema/<from>/<to> conversion endpoint. This means older chart configurations continue to work as new fields are added in later schema versions.