Styling layers
Understanding layer styles
A layer's style is defined in a JSON-based called the Felt Style Language, or FSL for short. Editors can view the current style of a layer inside a Felt map by clicking on Actions > Edit styles in a layer's overflow menu (three dots).
Here is an example of a simple visualization, expressed in FSL:
{
"config": {"labelAttribute": ["type"]},
"legend": {},
"paint": {
"color": "blue",
"opacity": 0.9,
"size": 30,
"strokeColor": "auto",
"strokeWidth": 1
},
"type": "simple",
"version": "2.1"
}Fetching a layer's current style
A layer's FSL can be retrieved by performing a simple GET request to a layer's endpoint:
# Your API token should look like this:
# FELT_API_TOKEN="felt_pat_ABCDEFUDQPAGGNBmX40YNhkCRvvLI3f8/BCwD/g8"
FELT_API_TOKEN="<YOUR_API_TOKEN>"
MAP_ID="<YOUR_MAP_ID>"
LAYER_ID="<YOUR_LAYER_ID>"
curl -L \
-H "Authorization: Bearer ${FELT_API_TOKEN}" \
"https://felt.com/api/v2/maps/${MAP_ID}/layers/${LAYER_ID}"import requests
# Your API token should look like this:
# api_token = "felt_pat_ABCDEFUDQPAGGNBmX40YNhkCRvvLI3f8/BCwD/g8"
api_token = "<YOUR_API_TOKEN>"
map_id = "<YOUR_MAP_ID>"
layer_id = "<YOUR_LAYER_ID>"
r = requests.get(
f"http://felt.com/api/v2/maps/{map_id}/layers/{layer_id}",
headers={"Authorization": f"Bearer {api_token}"}
)
assert r.ok
print(r.json())import os
from felt_python import get_layer_details
# Setting your API token as an env variable can save
# you from repeating it in every function call
os.environ["FELT_API_TOKEN"] = "<YOUR_API_TOKEN>"
map_id = "<YOUR_MAP_ID>"
layer_id = "<YOUR_LAYER_ID>"
layer_details = get_layer_details(map_id, layer_id)Updating an existing layer's style
To update a layer's style, we can send a POST request with the new FSL to the same layer's /update_style endpoint.
curl -L \
-X POST \
"https://felt.com/api/v2/maps/${MAP_ID}/layers/${LAYER_ID}/update_style" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${FELT_API_TOKEN}" \
--data '{"style": {"paint": {"color": "green", "opacity": 0.9, "size": 30, "strokeColor": "auto", "strokeWidth": 1}, "legend": {}, "type": "simple", "version": "2.1"}}'new_fsl = {
"paint": {
"color": "green",
"opacity": 0.9,
"size": 30,
"strokeColor": "auto",
"strokeWidth": 1
},
"legend": {},
"type": "simple",
"version": "2.1"
}
r = requests.post(
f"http://felt.com/api/v2/maps/{map_id}/layers/{layer_id}/update_style",
json={"style": new_fsl},
headers={"Authorization": f"Bearer {api_token}"}
)
assert r.ok
print(r.json())from felt_python import update_layer_style
new_fsl = {
"paint": {
"color": "green",
"opacity": 0.9,
"size": 30,
"strokeColor": "auto",
"strokeWidth": 1
},
"legend": {},
"type": "simple",
"version": "2.1"
}
update_layer_style(
map_id=map_id,
layer_id=layer_id,
style=new_fsl,
)FSL examples
You can find examples of FSL for different visualization types in the Felt Style Language section of these docs:
Simple visualizations: same color and size for all features (vector) or pixels (raster).
Categorical visualizations: different color per feature or pixel, based on a categorical attribute
Numeric visualizations: different color or size per feature or pixel, based on a numeric attribute.
Heatmaps: a density-based visualization style, for vector point layers.
Hillshade: a special kind of visualization for raster elevation layers.
Last updated
Was this helpful?