Only this pageAll pages
Powered by GitBook
Couldn't generate the PDF for 157 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

JS SDK API Reference

Loading...

Loading...

Elements


The Felt SDK lets you read, create and update elements on the map.

Elements that are created via the SDK are only available to the current session - they are not persisted to the map and not available to other users of the map.

Controller

Interfaces

Type Aliases

Element Groups

Elements

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

If you want to let your users create elements (as opposed to using the SDK to create them programmatically), you can use the to select and configure the drawing tools in Felt.

ToolsController
ElementsController
PlaceElementCreate
PathElementCreate
PolygonElementCreate
CircleElementCreate
MarkerElementCreate
HighlighterElementCreate
TextElementCreate
NoteElementCreate
ImageElementCreate
PlaceElementRead
PathElementRead
PolygonElementRead
CircleElementRead
MarkerElementRead
HighlighterElementRead
TextElementRead
NoteElementRead
ImageElementRead
LinkElementRead
PlaceElementUpdate
PathElementUpdate
PolygonElementUpdate
CircleElementUpdate
MarkerElementUpdate
HighlighterElementUpdate
TextElementUpdate
NoteElementUpdate
ImageElementUpdate
ElementCreate
ElementUpdate
ElementGroup
GetElementGroupsConstraint
ElementGroupChangeCallbackParams
GetElementsConstraint
ElementChangeCallbackParams
Element

@feltmaps/js-sdk

1.6.0

Minor Changes

  • 160ca6d: Implement getFeatures method on LayersController

  • 6a1e536: Widen allowed boundary types

  • 56077be: Add setLayerBoundary, getLayerBoundaries, onLayerBoundaryChange

1.5.1

Patch Changes

  • ac68984: Update getLayerSchema example

1.5.0

Minor Changes

  • d327b46: Add afterCreation option in pin tool settings to control what happens after creating a Place

  • 6a66d40: Add updateLayer and expand createLayersFromGeoJson options

  • 6504fea: Change documentation for getElementGeoemtry to document Highlighter and Marker functionality, and allow holes in Highlighter geometry

  • cf6711e: Make programmatic element CRUD types more accurate

  • 4c83c60: Add programmatic element creation, editing and deletion

  • 46e8ddc: Add onElementChange and onElementDelete

  • 3e87812: Adds APIs to use Felt's drawing tools on read-only maps

  • d877a83: Add getFeature for getting a single feature as GeoJSON with full detail geometry

  • 7f1d6aa: Add "interaction" to element schema

  • cf1dd7c: Improve Text and Note types and docs

  • 1f6a386: Add getViewportConstraints and setViewportConstraints methods definition

  • b059b70: Add onLayerFiltersChange to allow listening to changes to layer filters, be it ephemeral, style or widget filters that changed.

  • 19b41ce: Improve createLayer API

  • c20e605: Add setLayerLegendVisibility and setLayerGroupLegendVisibility methods definition

  • cbfd3fd: Reject promises when method handlers are invalid

  • 0915f48: Add showLayerDataTable and hideLayerDataTable methods

  • 9620df9: Change Circle.coordinates for Circle.center

  • 63c3042: Add getLayerSchema method

  • 69cc0a9: Fix spelling mistake in types

  • 87304d8: Fix geometry filter type

  • 1f22654: Add screen point to pointer events

  • b0e4149: Improves type readability and docs

  • 65bf269: Add createLayer and deleteLayer

  • 4bd0ae9: Add getMapDetails method definition

  • 5f903fb: Update Layer type and createLayerFromGeoJson to separate out Source concept

  • 597a8d6: Return coordinates on Circle and Place elements as they are only a single point.

  • f2f4289: Add layer stats methods

Patch Changes

  • 993fd44: Allow workers to be SDK clients

  • 417b8f4: Fixes incorrect value in documentation and updates links to other methods

  • 9620df9: Improve element docs

  • f0892c4: Improve documentation

  • bb79037: Fix per-geometry styling for created layers

1.4.0

Minor Changes

  • 555a25a: Add clearSelection method

  • 1f5d950: Add option to pass auth token when embedding

1.3.0

Minor Changes

  • 4bbde62: Allow setting a note to show with layer filters

1.2.0

Minor Changes

  • 7badd4b: Add onMapIdle event

  • 41efd53: Add selectFeature method to select feature by layer and feature ID

  • 208c492: Add areaQuery param to getRenderedFeatures

1.1.0

Minor Changes

  • 5f607ec: Return style with layers, and allow updating layer styles via setLayerStyle

Patch Changes

  • 3a8bec8: Fix API reference link in README

1.0.2

Major Changes

  • Release v1 of Felt JS SDK

GetElementsConstraint


The constraints to apply when getting elements.

Properties

ids?

optional ids: string[]

The ids of the elements to get.

GetElementGroupsConstraint


The constraints to apply when getting element groups.

Properties

ids?

optional ids: string[]

The ids of the element groups to get.

HighlighterElementRead


Properties

id

id: string

The unique identifier for the element.


groupId

groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color

color: string

The color of the element in some CSS-like format.

Example

"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";

Default

"#C93535"

name

name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description

description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes

attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


type

type: "Highlighter"


renderHoles

renderHoles: boolean

Whether to render the holes of the highlighted area.

Default

false

opacity

opacity: number

The opacity of the highlighter, between 0 and 1.

Default

0.5

interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

ImageElementUpdate


Properties

id

id: string

The unique identifier for the element.


type

type: "Image"


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

coordinates?

optional coordinates: [number, number][][] = MultiLineStringGeometrySchema.shape.coordinates


imageUrl?

optional imageUrl: string

The URL of the image that is rendered in this element


opacity?

optional opacity: number

The opacity of the image, between 0 and 1.

Default

1

ImageElementRead


Properties

id

id: string

The unique identifier for the element.


groupId

groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


name

name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description

description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes

attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


type

type: "Image"


imageUrl

imageUrl: string

The URL of the image that is rendered in this element


opacity

opacity: number

The opacity of the image, between 0 and 1.

Default

1

interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

LinkElementRead


Properties

id

id: string

The unique identifier for the element.


groupId

groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color

color: string

The color of the element in some CSS-like format.

Example

"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";

Default

"#C93535"

name

name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description

description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes

attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


type

type: "Link"


url

url: string

The URL of the link that is rendered in this element.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

ImageElementCreate


Properties

type

type: "Image"


coordinates

coordinates: [number, number][][] = MultiLineStringGeometrySchema.shape.coordinates


imageUrl

imageUrl: string

The URL of the image that is rendered in this element


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

opacity?

optional opacity: number

The opacity of the image, between 0 and 1.

Default

1

MarkerElementRead


Properties

id

id: string

The unique identifier for the element.


groupId

groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color

color: string

The color of the element in some CSS-like format.

Example

"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";

Default

"#C93535"

name

name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description

description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes

attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


type

type: "Marker"


opacity

opacity: number

The opacity of the marker, between 0 and 1.

Default

1

size

size: number

The size of the marker, used in conjunction with the zoom to determine the actual size of the marker.

Default

10

zoom

zoom: number

The zoom level at which the marker was created. This is combined with the size to determine the actual size of the marker.

When creating a marker, if you don't supply this value it defaults to the current zoom of the map when you call createElement.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

API Reference

To get started:

import { Felt } from "@feltmaps/js-sdk";

const felt = await Felt.embed(
  document.querySelector("#container"),
  "FELT_MAP_ID",
  {
    uiControls: {
      cooperativeGestures: false,
      fullScreenButton: false,
      showLegend: false,
    },
  }
);
const layers = await map.getLayers();

Documents

Modules

CircleElementUpdate


Properties

id

id: string

The unique identifier for the element.


type

type: "Circle"


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";

Default

"#C93535"

name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

imageUrl?

optional imageUrl: null | string

The URL of an image that has been added to the element.


strokeOpacity?

optional strokeOpacity: number

A value between 0 and 1 that describes the opacity of the element's stroke.

Default

1

strokeWidth?

optional strokeWidth: number

The width of the element's stroke in pixels.

Default

2

strokeStyle?

optional strokeStyle: "solid" | "dashed" | "dotted"

The style of the element's stroke.

Default

"solid"

radius?

optional radius: number

The radius of the circle in meters.


radiusMarker?

optional radiusMarker: boolean

Whether to show a marker on the circle that indicates the radius

Default

false

radiusDisplayAngle?

optional radiusDisplayAngle: number

The angle at which the control point for setting the radius is displayed, in degrees. When the radiusMarker is true, there is a dotted line rendered from the center of the circle to the control point, and the marker is shown at the midpoint of this line.

Default

90

radiusDisplayUnit?

optional radiusDisplayUnit: null | "meter" | "kilometer" | "foot" | "mile"

The unit of the radius used when the radiusMarker is true.

A value of null means that the unit matches the user's locale.

Default

null

fillOpacity?

optional fillOpacity: number

The opacity of the circle's fill.

Default

0.25

center?

The center of the circle.

CircleElementCreate


Properties

type

type: "Circle"


radius

radius: number

The radius of the circle in meters.


center

The center of the circle.


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";

Default

"#C93535"

name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

imageUrl?

optional imageUrl: null | string

The URL of an image that has been added to the element.


strokeOpacity?

optional strokeOpacity: number

A value between 0 and 1 that describes the opacity of the element's stroke.

Default

1

strokeWidth?

optional strokeWidth: number

The width of the element's stroke in pixels.

Default

2

strokeStyle?

optional strokeStyle: "solid" | "dashed" | "dotted"

The style of the element's stroke.

Default

"solid"

radiusMarker?

optional radiusMarker: boolean

Whether to show a marker on the circle that indicates the radius

Default

false

radiusDisplayAngle?

optional radiusDisplayAngle: number

The angle at which the control point for setting the radius is displayed, in degrees. When the radiusMarker is true, there is a dotted line rendered from the center of the circle to the control point, and the marker is shown at the midpoint of this line.

Default

90

radiusDisplayUnit?

optional radiusDisplayUnit: null | "meter" | "kilometer" | "foot" | "mile"

The unit of the radius used when the radiusMarker is true.

A value of null means that the unit matches the user's locale.

Default

null

fillOpacity?

optional fillOpacity: number

The opacity of the circle's fill.

Default

0.25

ElementCreate


ElementChangeCallbackParams


Properties

element

The new data for the element or null if the element was removed.


isBeingCreated

isBeingCreated: boolean

Whether or not this element is still being created by a drawing tool.

For example, if the user begins drawing a polygon, they need to place multiple points until they've ultimately completed the polygon. All the time they are still placing points, this will be true.

For elements that require text entry (such as Places, Text and Notes) this will be true all the time the user is typing text until the point at which the user finishes, by pressing Escape for example.

If the user is editing an existing element, this will be false.

For elements that are created programatically, this will be false.

Element


ElementGroupChangeCallbackParams


Properties

elementGroup

CircleElementRead


Properties

id

id: string

The unique identifier for the element.


groupId

groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color

color: string

The color of the element in some CSS-like format.

Example

"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";

Default

"#C93535"

name

name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description

description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes

attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


imageUrl

imageUrl: null | string

The URL of an image that has been added to the element.


strokeOpacity

strokeOpacity: number

A value between 0 and 1 that describes the opacity of the element's stroke.

Default

1

strokeWidth

strokeWidth: number

The width of the element's stroke in pixels.

Default

2

strokeStyle

strokeStyle: "solid" | "dashed" | "dotted"

The style of the element's stroke.

Default

"solid"

type

type: "Circle"


radius

radius: number

The radius of the circle in meters.


radiusMarker

radiusMarker: boolean

Whether to show a marker on the circle that indicates the radius

Default

false

radiusDisplayAngle

radiusDisplayAngle: number

The angle at which the control point for setting the radius is displayed, in degrees. When the radiusMarker is true, there is a dotted line rendered from the center of the circle to the control point, and the marker is shown at the midpoint of this line.

Default

90

radiusDisplayUnit

radiusDisplayUnit: null | "meter" | "kilometer" | "foot" | "mile"

The unit of the radius used when the radiusMarker is true.

A value of null means that the unit matches the user's locale.

Default

null

fillOpacity

fillOpacity: number

The opacity of the circle's fill.

Default

0.25

center

The center of the circle.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

ElementGroup


Properties

id

id: string

A string identifying the element group.


name

name: string

The name of the element group. This is shown in the legend.


caption

caption: null | string

The caption of the element group. This is shown in the legend.


elementIds

elementIds: string[]

The ids of the elements in the element group.

Remarks


visible

visible: boolean

Whether the element group is visible or not.


shownInLegend

shownInLegend: boolean

Whether the element group is shown in the legend or not.

ElementUpdate


ElementsController


The Elements controller allows you to get information about the elements on the map, and make changes to their visibility.

Extended by

Methods

getElement()

Get a single element from the map by its id.

Parameters

Parameter
Type
Description

id

string

The id of the element you want to get.

Returns

The requested element.

Example

const element = await felt.getElement("element-1");

getElementGeometry()

Get the geometry of an element in GeoJSON geometry format.

For most element types, the geometry returned is based on the coordinates property of the element, with some differences:

  • For Circle elements, the geometry is a Polygon drawn from the center andradius properties.

  • Path elements become MultiLineString geometries.

  • Marker elements return a MultiLineString of the path traced by the user as they drew the marker. Note that this is not the polygon formed by filled-in "pen" stroke, which doesn't exactly follow the path traced by the user as it is smoothed and interpolated to create a continuous line.

  • Text, Note and Image elements do not return geometry, so will return null.

Parameters

Parameter
Type
Description

id

string

The id of the element you want to get the geometry of.

Returns

Example

const geometry = await felt.getElementGeometry("element-1");
console.log(geometry?.type, geometry?.coordinates);

getElements()

Gets elements from the map, according to the constraints supplied. If no constraints are supplied, all elements will be returned.

Parameters

Parameter
Type
Description

constraint?

The constraints to apply to the elements returned from the map.

Returns

All elements on the map.

Remarks

The elements in the map, ordered by the order specified in Felt. This is not necessarily the order that they are drawn in, as Felt draws points above lines and lines above polygons, for instance.

Example

const elements = await felt.getElements();

getElementGroup()

Get an element group from the map by its id.

Parameters

Parameter
Type

id

string

Returns

The requested element group.

Example

const elementGroup = await felt.getElementGroup("element-group-1");

getElementGroups()

Gets element groups from the map, according to the filters supplied. If no constraints are supplied, all element groups will be returned in rendering order.

Parameters

Parameter
Type
Description

constraint?

The constraints to apply to the element groups returned from the map.

Returns

The requested element groups.

Example

const elementGroups = await felt.getElementGroups({ ids: ["element-group-1", "element-group-2"] });

setElementGroupVisibility()

Hide or show element groups with the given ids.

Parameters

Parameter
Type

visibility

Returns

Promise<void>

Example

felt.setElementGroupVisibility({ show: ["element-group-1", "element-group-2"], hide: ["element-group-3"] });

createElement()

Create a new element on the map.

Parameters

Parameter
Type

element

Returns

Example

const element = await felt.createElement({ type: "Place", coordinates: [10, 10] });

updateElement()

Update an element on the map.

Parameters

Parameter
Type

element

Returns

Example

// Update a place element's coordinates
await felt.updateElement({
  id: "element-1",
  coordinates: [10, 20]
});

// Update a polygon's style
await felt.updateElement({
  id: "element-2",
  color: "#ABC123",
  fillOpacity: 0.5
});

deleteElement()

deleteElement(id: string): Promise<void>

Delete an element from the map.

Parameters

Parameter
Type

id

string

Returns

Promise<void>

Example

await felt.deleteElement("element-1");

Events

onElementCreate()

Adds a listener for when an element is created.

Parameters

Parameter
Type
Description

args

-

args.handler

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onElementCreate({
  handler: (element) => console.log(element.id),
});

// later on...
unsubscribe();

onElementCreateEnd()

Listens for when a new element is finished being created by a drawing tool.

For example, when creating a polygon, the user places a series of points then finishes by pressing Enter or Escape. Or when creating a Place element, they add the marker, type a label, then finally deselect the element.

Parameters

Parameter
Type
Description

args

-

args.handler

The handler to call whenever this event fires.

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onToolCreatedElement({
  handler: (params) => console.log(params),
});

// later on...
unsubscribe();

onElementChange()

Adds a listener for when an element changes.

This will fire when an element is being edited, either on the map by the user or programatically.

Parameters

Parameter
Type
Description

args

-

args.options

{ id: string; }

-

args.options.id

string

The id of the element to listen for changes to.

args.handler

The handler that is called when the element changes.

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onElementChange({
  options: { id: "element-1" },
  handler: ({element}) => console.log(element.id),
});

// later on...
unsubscribe();

onElementDelete()

onElementDelete(args: { options: { id: string; }; handler: () => void; }): VoidFunction

Adds a listener for when an element is deleted.

Parameters

Parameter
Type
Description

args

{ options: { id: string; }; handler: () => void; }

-

args.options

{ id: string; }

-

args.options.id

string

The id of the element to listen for deletions of.

args.handler

() => void

The handler that is called when the element is deleted.

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onElementDelete({
  options: { id: "element-1" },
  handler: () => console.log("element-1 deleted"),
});

// later on...
unsubscribe();

onElementGroupChange()

Adds a listener for when an element group changes.

Parameters

Parameter
Type

args

args.options

{ id: string; }

args.options.id

string

args.handler

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onElementGroupChange({
  options: { id: "element-group-1" },
  handler: elementGroup => console.log(elementGroup.id),
});

// later on...
unsubscribe();

HighlighterElementCreate


Properties

type

type: "Highlighter"


coordinates

A multipolygon describing the area that is highlighted.

If renderHoles is set to false, only the outer ring of each polygon will be rendered, filling in the area inside the highlighted region.


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";

Default

"#C93535"

name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

renderHoles?

optional renderHoles: boolean

Whether to render the holes of the highlighted area.

Default

false

opacity?

optional opacity: number

The opacity of the highlighter, between 0 and 1.

Default

0.5

HighlighterElementUpdate


Properties

id

id: string

The unique identifier for the element.


type

type: "Highlighter"


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";

Default

"#C93535"

name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

renderHoles?

optional renderHoles: boolean

Whether to render the holes of the highlighted area.

Default

false

opacity?

optional opacity: number

The opacity of the highlighter, between 0 and 1.

Default

0.5

coordinates?

A multipolygon describing the area that is highlighted.

If renderHoles is set to false, only the outer ring of each polygon will be rendered, filling in the area inside the highlighted region.

MarkerElementCreate


Properties

type

type: "Marker"


coordinates


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";

Default

"#C93535"

name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

opacity?

optional opacity: number

The opacity of the marker, between 0 and 1.

Default

1

size?

optional size: number

The size of the marker, used in conjunction with the zoom to determine the actual size of the marker.

Default

10

zoom?

optional zoom: number

The zoom level at which the marker was created. This is combined with the size to determine the actual size of the marker.

When creating a marker, if you don't supply this value it defaults to the current zoom of the map when you call createElement.

MarkerElementUpdate


Properties

id

id: string

The unique identifier for the element.


type

type: "Marker"


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

Default


name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default


opacity?

optional opacity: number

The opacity of the marker, between 0 and 1.

Default


size?

optional size: number

The size of the marker, used in conjunction with the zoom to determine the actual size of the marker.

Default


zoom?

optional zoom: number

The zoom level at which the marker was created. This is combined with the size to determine the actual size of the marker.

When creating a marker, if you don't supply this value it defaults to the current zoom of the map when you call createElement.


coordinates?

NoteElementRead


Properties

id

id: string

The unique identifier for the element.


groupId

groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color

color: string

The color of the element in some CSS-like format.

Example

Default


description

description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes

attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


rotation

rotation: number

The rotation of the element in degrees.

Default


scale

scale: number

The relative scale of the element from the default size. This is combined with the zoom to determine the actual size of the element.

Default


zoom

zoom: number

The zoom level at which the element was created. This is combined with the scale to determine the actual size of the element.

When creating an element, if you don't supply this value it defaults to the current zoom of the map when you call createElement.


text

text: string

The text in the element.


align

align: "center" | "left" | "right"

The alignment of the text, either left, center or right.

Default


style

style: "italic" | "light" | "regular" | "caps"

The style of the text, either italic, light, regular or caps.

Default


name

name: string

The text shown in the element, which is identical to the text property.

Remarks

This is added for consistency with other elements that have a name property.


type

type: "Note"


widthScale

widthScale: number


position

The geographical position of the center of the note element.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

NoteElementCreate


Properties

type

type: "Note"


text

text: string


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

Default


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default


rotation?

optional rotation: number

The rotation of the element in degrees.

Default


scale?

optional scale: number

The relative scale of the element from the default size. This is combined with the zoom to determine the actual size of the element.

Default


zoom?

optional zoom: number

The zoom level at which the element was created. This is combined with the scale to determine the actual size of the element.

When creating an element, if you don't supply this value it defaults to the current zoom of the map when you call createElement.


align?

optional align: "center" | "left" | "right"

The alignment of the text, either left, center or right.

Default


style?

optional style: "italic" | "light" | "regular" | "caps"

The style of the text, either italic, light, regular or caps.

Default


widthScale?

optional widthScale: number


position?

The geographical position of the center of the note element.

If this is omitted, the note will be placed at the center of the current viewport.

PathElementRead


Properties

id

id: string

The unique identifier for the element.


groupId

groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color

color: string

The color of the element in some CSS-like format.

Example

Default


name

name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description

description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes

attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


imageUrl

imageUrl: null | string

The URL of an image that has been added to the element.


strokeOpacity

strokeOpacity: number

A value between 0 and 1 that describes the opacity of the element's stroke.

Default


strokeWidth

strokeWidth: number

The width of the element's stroke in pixels.

Default


strokeStyle

strokeStyle: "solid" | "dashed" | "dotted"

The style of the element's stroke.

Default


type

type: "Path"


distanceMarker

distanceMarker: boolean

Whether a distance marker is shown at the midpoint of the path.

Default


routingMode

routingMode: null | "driving" | "cycling" | "walking" | "flying"

Whether this represents a route, and if so, what mode of transport is used.

If this is null, the path is not considered to be a route, so while it can have a distanceMarker, it will does not have a start or end cap.

Default


endCaps

endCaps: boolean

Whether or not to show Start and End caps on the path. This is only available if the routingMode is set.

Default


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

PlaceElementUpdate


Properties

id

id: string

The unique identifier for the element.


type

type: "Place"


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

Default


name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default


imageUrl?

optional imageUrl: null | string

The URL of an image that has been added to the element.


symbol?

optional symbol: string

The symbol that is rendered for the Place.

This can be an emoji by using colon-enclosed characters (e.g. ":smiley:") or one of the symbols available in Felt's symbol library.

You can see the available symbols in the Felt UI when editing a Place by hovering a symbol and converting the tooltip to kebab-case. For example, the "Oil barrel" symbol is oil-barrel.


frame?

optional frame: null | "frame-circle" | "frame-square"

The frame that is rendered around the Place's symbol. This is only available for non-emoji symbols.


hideLabel?

optional hideLabel: boolean

Whether the element's label is hidden on the map. This allows you to add a name to the element and can show in popups, but not have it visible on the map.

This will also hide the faint placeholder label that is shown when an editable Place is selected.

Default


coordinates?

NoteElementUpdate


Properties

id

id: string

The unique identifier for the element.


type

type: "Note"


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

Default


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default


rotation?

optional rotation: number

The rotation of the element in degrees.

Default


scale?

optional scale: number

The relative scale of the element from the default size. This is combined with the zoom to determine the actual size of the element.

Default


zoom?

optional zoom: number

The zoom level at which the element was created. This is combined with the scale to determine the actual size of the element.

When creating an element, if you don't supply this value it defaults to the current zoom of the map when you call createElement.


text?

optional text: string

The text in the element.


align?

optional align: "center" | "left" | "right"

The alignment of the text, either left, center or right.

Default


style?

optional style: "italic" | "light" | "regular" | "caps"

The style of the text, either italic, light, regular or caps.

Default


widthScale?

optional widthScale: number


position?

The geographical position of the center of the note element.

PathElementUpdate


Properties

id

id: string

The unique identifier for the element.


type

type: "Path"


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

Default


name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default


imageUrl?

optional imageUrl: null | string

The URL of an image that has been added to the element.


strokeOpacity?

optional strokeOpacity: number

A value between 0 and 1 that describes the opacity of the element's stroke.

Default


strokeWidth?

optional strokeWidth: number

The width of the element's stroke in pixels.

Default


strokeStyle?

optional strokeStyle: "solid" | "dashed" | "dotted"

The style of the element's stroke.

Default


distanceMarker?

optional distanceMarker: boolean

Whether a distance marker is shown at the midpoint of the path.

Default


routingMode?

optional routingMode: null | "driving" | "cycling" | "walking" | "flying"

Whether this represents a route, and if so, what mode of transport is used.

If this is null, the path is not considered to be a route, so while it can have a distanceMarker, it will does not have a start or end cap.

Default


endCaps?

optional endCaps: boolean

Whether or not to show Start and End caps on the path. This is only available if the routingMode is set.

Default


coordinates?

PathElementCreate


Properties

type

type: "Path"


coordinates


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

Default


name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default


imageUrl?

optional imageUrl: null | string

The URL of an image that has been added to the element.


strokeOpacity?

optional strokeOpacity: number

A value between 0 and 1 that describes the opacity of the element's stroke.

Default


strokeWidth?

optional strokeWidth: number

The width of the element's stroke in pixels.

Default


strokeStyle?

optional strokeStyle: "solid" | "dashed" | "dotted"

The style of the element's stroke.

Default


distanceMarker?

optional distanceMarker: boolean

Whether a distance marker is shown at the midpoint of the path.

Default


routingMode?

optional routingMode: null | "driving" | "cycling" | "walking" | "flying"

Whether this represents a route, and if so, what mode of transport is used.

If this is null, the path is not considered to be a route, so while it can have a distanceMarker, it will does not have a start or end cap.

Default


endCaps?

optional endCaps: boolean

Whether or not to show Start and End caps on the path. This is only available if the routingMode is set.

Default

PlaceElementRead


Properties

id

id: string

The unique identifier for the element.


groupId

groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color

color: string

The color of the element in some CSS-like format.

Example

Default


name

name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description

description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes

attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


imageUrl

imageUrl: null | string

The URL of an image that has been added to the element.


type

type: "Place"


symbol

symbol: string

The symbol that is rendered for the Place.

This can be an emoji by using colon-enclosed characters (e.g. ":smiley:") or one of the symbols available in Felt's symbol library.

You can see the available symbols in the Felt UI when editing a Place by hovering a symbol and converting the tooltip to kebab-case. For example, the "Oil barrel" symbol is oil-barrel.


frame

frame: null | "frame-circle" | "frame-square"

The frame that is rendered around the Place's symbol. This is only available for non-emoji symbols.


hideLabel

hideLabel: boolean

Whether the element's label is hidden on the map. This allows you to add a name to the element and can show in popups, but not have it visible on the map.

This will also hide the faint placeholder label that is shown when an editable Place is selected.

Default


coordinates


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

PolygonElementCreate


Properties

type

type: "Polygon"


coordinates


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

Default


name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default


imageUrl?

optional imageUrl: null | string

The URL of an image that has been added to the element.


strokeOpacity?

optional strokeOpacity: number

A value between 0 and 1 that describes the opacity of the element's stroke.

Default


strokeWidth?

optional strokeWidth: number

The width of the element's stroke in pixels.

Default


strokeStyle?

optional strokeStyle: "solid" | "dashed" | "dotted"

The style of the element's stroke.

Default


fillOpacity?

optional fillOpacity: number

The opacity of the polygon's fill, between 0 and 1.

Default


areaMarker?

optional areaMarker: boolean

Whether to show an area marker on the polygon.

Default

PolygonElementRead


Properties

id

id: string

The unique identifier for the element.


groupId

groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color

color: string

The color of the element in some CSS-like format.

Example

Default


name

name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description

description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes

attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


imageUrl

imageUrl: null | string

The URL of an image that has been added to the element.


strokeOpacity

strokeOpacity: number

A value between 0 and 1 that describes the opacity of the element's stroke.

Default


strokeWidth

strokeWidth: number

The width of the element's stroke in pixels.

Default


strokeStyle

strokeStyle: "solid" | "dashed" | "dotted"

The style of the element's stroke.

Default


type

type: "Polygon"


fillOpacity

fillOpacity: number

The opacity of the polygon's fill, between 0 and 1.

Default


areaMarker

areaMarker: boolean

Whether to show an area marker on the polygon.

Default


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

PolygonElementUpdate


Properties

id

id: string

The unique identifier for the element.


type

type: "Polygon"


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

Default


name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default


imageUrl?

optional imageUrl: null | string

The URL of an image that has been added to the element.


strokeOpacity?

optional strokeOpacity: number

A value between 0 and 1 that describes the opacity of the element's stroke.

Default


strokeWidth?

optional strokeWidth: number

The width of the element's stroke in pixels.

Default


strokeStyle?

optional strokeStyle: "solid" | "dashed" | "dotted"

The style of the element's stroke.

Default


fillOpacity?

optional fillOpacity: number

The opacity of the polygon's fill, between 0 and 1.

Default


areaMarker?

optional areaMarker: boolean

Whether to show an area marker on the polygon.

Default


coordinates?

PlaceElementCreate


Properties

type

type: "Place"


coordinates


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

Default


name?

optional name: null | string

The element's name. For elements that can show a label or text on the map (e.g. a Place or Text element) this is the text that will be shown.

For elements such as Polygons or Paths, the name is what is shown when the element is selected by clicking on it.


description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default


imageUrl?

optional imageUrl: null | string

The URL of an image that has been added to the element.


symbol?

optional symbol: string

The symbol that is rendered for the Place.

This can be an emoji by using colon-enclosed characters (e.g. ":smiley:") or one of the symbols available in Felt's symbol library.

You can see the available symbols in the Felt UI when editing a Place by hovering a symbol and converting the tooltip to kebab-case. For example, the "Oil barrel" symbol is oil-barrel.


frame?

optional frame: null | "frame-circle" | "frame-square"

The frame that is rendered around the Place's symbol. This is only available for non-emoji symbols.


hideLabel?

optional hideLabel: boolean

Whether the element's label is hidden on the map. This allows you to add a name to the element and can show in popups, but not have it visible on the map.

This will also hide the faint placeholder label that is shown when an editable Place is selected.

Default

View for a complete list of available functions. enumerates initialization options.

optional center:

center:

ElementCreate: | | | | | | | |

The parameters for the and the listeners.

element: null |

Element: | | | | | | | | |

The parameters for the listener.

elementGroup: null |

center:

You can use these ids to get the full element objects via the method.

ElementUpdate: | | | | | | | |

getElement(id: string): Promise<null | >

Promise<null | >

getElementGeometry(id: string): Promise<null | >

Promise<null | >

getElements(constraint?: ): Promise<(null | )[]>

Promise<(null | )[]>

getElementGroup(id: string): Promise<null | >

Promise<null | >

getElementGroups(constraint?: ): Promise<(null | )[]>

Promise<(null | )[]>

setElementGroupVisibility(visibility: ): Promise<void>

createElement(element: ): Promise<>

Promise<>

updateElement(element: ): Promise<>

Promise<>

onElementCreate(args: { handler: (change: ) => void; }): VoidFunction

{ handler: (change: ) => void; }

(change: ) => void

The handler that is called when an element is created. This will fire when elements are created programatically, or when the user starts creating an element with a drawing tool. When the user creates an element with a drawing tool, it can begin in an invalid state, such as if you've just placed a single point in a polygon. You can use the isBeingCreated property to determine if the element is still being created by a drawing tool. If you want to know when the element is finished being created, you can use the listener.

onElementCreateEnd(args: { handler: (params: { element: ; }) => void; }): VoidFunction

This differs from the listener, which fires whenever an element is first created. This fires when the user finishes creating an element which could be after a series of interactions.

{ handler: (params: { element: ; }) => void; }

(params: { element: ; }) => void

onElementChange(args: { options: { id: string; }; handler: (change: ) => void; }): VoidFunction

Like the listener, this will fire when an element is still being created by a drawing tool.

You can check the property to determine if the element is still being created by a drawing tool.

{ options: { id: string; }; handler: (change: ) => void; }

(change: ) => void

onElementGroupChange(args: { options: { id: string; }; handler: (change: ) => void; }): VoidFunction

{ options: { id: string; }; handler: (change: ) => void; }

(change: ) => void

coordinates: [][][]

optional coordinates: [][][]

coordinates: [][]

optional coordinates: [][]

position:

optional position:

optional coordinates:

optional position:

optional coordinates: [][]

coordinates: [][]

coordinates:

coordinates: [][]

optional coordinates: [][]

coordinates:

FeltController
FeltEmbedOptions
CHANGELOG
Elements
Interactions
Layers
Main
Misc
Selection
Shared
Tools
UI
Viewport
LngLatTuple
LngLatTuple
PlaceElementCreate
PathElementCreate
PolygonElementCreate
CircleElementCreate
MarkerElementCreate
HighlighterElementCreate
ImageElementCreate
TextElementCreate
NoteElementCreate
Element
PlaceElementRead
PathElementRead
PolygonElementRead
CircleElementRead
MarkerElementRead
HighlighterElementRead
TextElementRead
NoteElementRead
ImageElementRead
LinkElementRead
ElementGroup
LngLatTuple
PlaceElementUpdate
PathElementUpdate
PolygonElementUpdate
CircleElementUpdate
MarkerElementUpdate
HighlighterElementUpdate
TextElementUpdate
NoteElementUpdate
ImageElementUpdate
FeltController
Element
Element
GeoJsonGeometry
GeoJsonGeometry
GetElementsConstraint
Element
Element
ElementGroup
ElementGroup
GetElementGroupsConstraint
ElementGroup
ElementGroup
SetVisibilityRequest
ElementCreate
Element
Element
ElementUpdate
Element
Element
ElementChangeCallbackParams
Element
ElementChangeCallbackParams
ElementGroupChangeCallbackParams
LngLatTuple
LngLatTuple
LngLatTuple
`onElementChange`
`onElementCreate`
`onElementGroupChange`
`getElements`
`onElementCreate`
`onElementCreate`
`isBeingCreated`
"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";
"#C93535"
"default"
1
10
"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";
"#C93535"
0
1
"center"
"regular"
"default"
"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";
"#C93535"
"default"
0
1
"center"
"regular"
"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";
"#C93535"
1
2
"solid"
false
null
false
"default"
"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";
"#C93535"
"default"
false
"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";
"#C93535"
"default"
0
1
"center"
"regular"
"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";
"#C93535"
"default"
1
2
"solid"
false
null
false
"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";
"#C93535"
"default"
1
2
"solid"
false
null
false
"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";
"#C93535"
false
"default"
"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";
"#C93535"
"default"
1
2
"solid"
0.25
false
"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";
"#C93535"
1
2
"solid"
0.25
false
"default"
"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";
"#C93535"
"default"
1
2
"solid"
0.25
false
"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";
"#C93535"
"default"
false

AggregationConfig


Defines how to aggregate a value across features in a layer.

Properties

attribute

attribute: string

The attribute to use for the aggregation. This must be a numeric attribute.


method

method: "avg" | "max" | "min" | "sum" | "median"

The method to use for the aggregation.

AggregationMethod


AggregationMethod: "avg" | "max" | "min" | "sum" | "median"

The method to use for the aggregation.

FilterExpression


FilterExpression: [null | string, "in" | "ni", null | (null | string | number | boolean)[]] | [null | string, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", null | string | number | boolean]

GeoJsonDataVectorSource


A GeoJSON data source is a layer that is populated from GeoJSON data, such as from a local file, or programatically-created data.

Properties

type

type: "geoJsonData"

Identifies this as a GeoJSON data source.


data

data: object

The GeoJSON data for the layer.

This must be a GeoJSON FeatureCollection.

FilterLogicGate


FilterLogicGate: "and" | "or"

FeltTiledVectorSource


FeltTiledVectorSource: { type: "felt"; tileTemplateUrl: string; }

A tiled vector source is a layer that is populated from data the has been uploaded to Felt, and processed into vector tiles.

Type declaration

type

type: "felt"

Identifies this as a tiled vector source. Typically, these tiles will have been uploaded to and processed by Felt.

tileTemplateUrl

tileTemplateUrl: string

The template URL used for fetching tiles.

GetElementsConstraint
GetElementGroupsConstraint
SetVisibilityRequest
ElementCreate
ElementUpdate
ElementChangeCallbackParams
ElementChangeCallbackParams
Element
Element
ElementChangeCallbackParams
ElementChangeCallbackParams
ElementGroupChangeCallbackParams
ElementGroupChangeCallbackParams
LngLatTuple
LngLatTuple
LngLatTuple
LngLatTuple
LngLatTuple
LngLatTuple
LngLatTuple
LngLatTuple
LngLatTuple
LngLatTuple
LngLatTuple
`onElementCreateEnd`

GetLayersConstraint


The constraints to apply when getting layers.

Properties

ids?

optional ids: string[]

The ids of the layers to get.

GetLayerGroupsConstraint


The constraints to apply when getting layer groups.

Properties

ids?

optional ids: string[]

The ids of the layer groups to get.

TextElementCreate


Properties

type

type: "Text"


text

text: string


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";

Default

"#C93535"

description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

rotation?

optional rotation: number

The rotation of the element in degrees.

Default

0

scale?

optional scale: number

The relative scale of the element from the default size. This is combined with the zoom to determine the actual size of the element.

Default

1

zoom?

optional zoom: number

The zoom level at which the element was created. This is combined with the scale to determine the actual size of the element.

When creating an element, if you don't supply this value it defaults to the current zoom of the map when you call createElement.


align?

optional align: "center" | "left" | "right"

The alignment of the text, either left, center or right.

Default

"center"

style?

optional style: "italic" | "light" | "regular" | "caps"

The style of the text, either italic, light, regular or caps.

Default

"regular"

position?

The geographical position of the center of the text element.

If this is omitted, the text will be placed at the center of the current viewport.

InteractionsController


The Interactions controller allows you to observe interactions with the map

Extended by

Events

onPointerClick()

Allows you to be notified the user clicks on the map.

Parameters

Parameter
Type

params

params.handler

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onPointerClick({
  handler: (event) => console.log(event.center, event.features),
});

// later on...
unsubscribe();

onPointerMove()

Allows you to be notified the user moves the mouse over the map.

Parameters

Parameter
Type
Description

params

Params for the listener

params.handler

The handler function

Returns

VoidFunction

A function to unsubscribe from the listener

Example

// Track mouse movement and features under cursor
const unsubscribe = felt.onPointerMove({
  handler: (event) => {
    console.log("Mouse position:", event.center);
    console.log("Features under cursor:", event.features);
  }
});

// later on...
unsubscribe();

MapInteractionEvent


The event object passed to the interaction listeners.

Properties

coordinate

The cursor position in world coordinates.


point

point: { x: number; y: number; }

The pixel coordinates of the mouse cursor, relative to the map and measured from the top left corner.

Name
Type

x

number

y

number


features

The vector features that are under the cursor.


rasterValues

The raster pixel values that are under the cursor.

TextElementUpdate


Properties

id

id: string

The unique identifier for the element.


type

type: "Text"


groupId?

optional groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color?

optional color: string

The color of the element in some CSS-like format.

Example

"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";

Default

"#C93535"

description?

optional description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes?

optional attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

rotation?

optional rotation: number

The rotation of the element in degrees.

Default

0

scale?

optional scale: number

The relative scale of the element from the default size. This is combined with the zoom to determine the actual size of the element.

Default

1

zoom?

optional zoom: number

The zoom level at which the element was created. This is combined with the scale to determine the actual size of the element.

When creating an element, if you don't supply this value it defaults to the current zoom of the map when you call createElement.


text?

optional text: string

The text in the element.


align?

optional align: "center" | "left" | "right"

The alignment of the text, either left, center or right.

Default

"center"

style?

optional style: "italic" | "light" | "regular" | "caps"

The style of the text, either italic, light, regular or caps.

Default

"regular"

position?

The geographical position of the center of the text element.

Interactions


The Interactions module allows you to be notified when the user interacts with the map.

Interactions include clicking and hovering on points and features.

Controller

Interfaces

TextElementRead


Properties

id

id: string

The unique identifier for the element.


groupId

groupId: null | string

The ID of the element group that the element belongs to. For elements that are not part of a group, this will be null.


color

color: string

The color of the element in some CSS-like format.

Example

"#ABC123";
"rgb(255, 0, 0)";
"hsl(200, 100%, 50%)";

Default

"#C93535"

description

description: null | string

Text describing the element, which is shown in an element's popup when it is selected.

Note that some elements are not selectable on the map, such as Notes, Text and Markers, so their description will not be shown.


attributes

attributes: Record<string, unknown>

A set of key-value pairs that can be used to store arbitrary data about the element.

This is most useful for associating additional data with an element that is not part of the element's core data, such as a Place's address or some other data.


rotation

rotation: number

The rotation of the element in degrees.

Default

0

scale

scale: number

The relative scale of the element from the default size. This is combined with the zoom to determine the actual size of the element.

Default

1

zoom

zoom: number

The zoom level at which the element was created. This is combined with the scale to determine the actual size of the element.

When creating an element, if you don't supply this value it defaults to the current zoom of the map when you call createElement.


text

text: string

The text in the element.


align

align: "center" | "left" | "right"

The alignment of the text, either left, center or right.

Default

"center"

style

style: "italic" | "light" | "regular" | "caps"

The style of the text, either italic, light, regular or caps.

Default

"regular"

name

name: string

The text shown in the element, which is identical to the text property.

Remarks

This is added for consistency with other elements that have a name property.


type

type: "Text"


position

The geographical position of the center of the text element.


interaction?

optional interaction: "default" | "locked"

Whether the element is interactive.

The default interaction mode means that the element can be selected and edited by the user, if it was created by the SDK or by the user using a tool.

If the interaction mode is locked, the element will not be editable by the user, which is often used for elements that you don't want the user to edit or move by accident.

Elements that were created by the map author (i.e. not during an SDK "session") are not editable and have special behaviour depending on their name, description and attributes.

Default

"default"

Layers


Layers in a Felt map hold geospatial data, but also configure how the data is rendered both on the map and in the legend. The data can be vector data such as Points, Lines, or Polygons, or raster data such as satellite images.

Each Layer can be grouped under a LayerGroup, and has associated LegendItems that represent how the layer is rendered in the legend.

When a Layer is styled to as categorical data or "classed" numeric data, there will be a LegendItem for each category or class. Each LegendItem can be controlled for visibility independently of the Layer, so you can turn on and off each category or class individually.

Controller

Features

Filters

Layer Groups

Layer Schema

Layer sources

Layers

Legend Items

Stats

CreateLayersFromGeoJsonParams


Properties

name

name: string

The name of the layer to create.


source

The source of the GeoJSON data.


bounds?

optional bounds: [number, number, number, number]

Sets the bounds of the layer.


caption?

optional caption: string

Sets the caption of the layer.


description?

optional description: string

Sets the description of the layer.


geometryStyles?

optional geometryStyles: { Point: object; Line: object; Polygon: object; }

The styles to apply to each geometry on the layer.

These are optional, and if missing will use a default style determined by Felt, which you can consider to be undefined behaviour.

Name
Type

Point?

object

Line?

object

Polygon?

object

Example

const layer = await layersController.createLayersFromGeoJson({
  name: "My Layer",
  geometryStyles: {
    Point: {
      paint: { color: "red", size: 8 },
    },
    Line: {
      paint: { color: "blue", size: 4 },
      config: { labelAttribute: ["name"] },
      label: { minZoom: 0 },
    },
    Polygon: {
      paint: { color: "green", strokeColor: "darkgreen" },
    },
  },
});

DataOnlyLayer


A data-only layer doesn't have any geometry, but can be used to join with other layers

Properties

id

id: string

A string identifying the layer


groupId

groupId: null | string

The ID of the layer group that the layer belongs to.

Layers that appear at the root level in Felt will not have a group ID.


name

name: string

The name of the layer can be displayed in the Legend, depending on how the layer's legend is configured in its style.


caption

caption: null | string

The layer's caption is shown in the legend.


description

description: null | string

The layer description forms part of the layer's metadata. This is visible to users via the layer info button in the legend.


visible

visible: boolean

Whether the layer is visible or not.


shownInLegend

shownInLegend: boolean

Whether the layer is shown in the legend or not.


style

style: object

The FSL style for the layer.

As the types of the styles are very complex, we return object here and advise that you program defensively while reading the styles.


status

status: "processing" | "completed" | "failed" | "incomplete"

The current processing status of the layer.


geometryType

geometryType: null

Indicates that this layer has no geometry.


bounds

bounds: null

This is always null for data-only layers.

Filters


See the examples below for the correct structure to use when building complex filters.

Remarks

The possible operators are:

  • lt: Less than

  • gt: Greater than

  • le: Less than or equal to

  • ge: Greater than or equal to

  • eq: Equal to

  • ne: Not equal to

  • cn: Contains

  • nc: Does not contain

The allowed boolean operators are:

  • and: Logical AND

  • or: Logical OR

Example

// 1. Simple filter: single condition
felt.setLayerFilters({
  layerId: "layer-1",
  filters: ["AREA", "gt", 30_000],
});

// 2. Basic compound filter: two conditions with AND
felt.setLayerFilters({
  layerId: "layer-1",
  filters: [
    ["AREA", "gt", 30_000],  // First condition
    "and",                   // Logic operator
    ["COLOR", "eq", "red"]   // Second condition
  ]
});

// 3. Complex filter: three or more conditions require nesting
// ⚠️ IMPORTANT: Filters use a tree structure, not a flat list
felt.setLayerFilters({
  layerId: "layer-1",
  filters: [
    ["AREA", "gt", 30_000],                // First condition
    "and",                                 // First logic operator
    [                                      // Nested group starts
      ["COLOR", "eq", "red"],              //   Second condition
      "and",                               //   Second logic operator
      ["TYPE", "eq", "residential"]        //   Third condition
    ]                                      // Nested group ends
  ]
});

// 4. Even more complex: four conditions with proper nesting
// Visual structure:
//          AND
//         /   \
//    condition  AND
//              /   \
//        condition  AND
//                  /   \
//            condition  condition
felt.setLayerFilters({
  layerId: "layer-1",
  filters: [
    ["AREA", "gt", 30_000],                // First condition
    "and",
    [
      ["COLOR", "eq", "red"],              // Second condition
      "and",
      [
        ["TYPE", "eq", "residential"],     // Third condition
        "and",
        ["YEAR", "gt", 2000]               // Fourth condition
      ]
    ]
  ]
});

// 5. Mixed operators: combining AND and OR
// Visual structure:
//          AND
//         /   \
//    condition  OR
//              /  \
//        condition condition
felt.setLayerFilters({
  layerId: "layer-1",
  filters: [
    ["AREA", "gt", 30_000],                // Must have large area
    "and",
    [
      ["COLOR", "eq", "red"],              // Must be either red
      "or",
      ["TYPE", "eq", "residential"]        // OR residential type
    ]
  ]
});

FilterTernary


A FilterTernary is a tree structure for combining expressions with logical operators.

When combining three or more conditions, you must use proper nesting rather than a flat list.

Example

// A simple filter with a single condition
const filter = [
  ["AREA", "gt", 30_000],
  "and",
  ["COLOR", "eq", "red"]
]

// A complex filter with multiple conditions
const filter = [
  ["AREA", "gt", 30_000],
  "and",
  [
    ["COLOR", "eq", "red"],
    "or",
    ["TYPE", "eq", "residential"]
  ]
]

GeometryFilter


The common type for filtering data by a spatial boundary.

This can be either:

  • FeltBoundary: a [w, s, e, n] bounding box

  • PolygonGeometry: a GeoJSON Polygon geometry

  • MultiPolygonGeometry: a GeoJSON MultiPolygon geometry

  • LngLatTuple[]: a list of coordinates describing a single ring of a polygon

GeoJsonFileVectorSource


A GeoJSON file source is a layer that is populated from a GeoJSON file on your local machine.

Properties

type

type: "geoJsonFile"

Identifies this as a GeoJSON file source.


file

file: File

The GeoJSON file for the layer.

Layer


GetLayerHistogramParams


Properties

layerId

layerId: string


attribute

attribute: string


steps

steps: number[] | { type: "equal-intervals"; count: number; } | { type: "time-interval"; interval: "hour" | "day" | "week" | "month" | "year"; }


values?

Configuration for filtering and aggregating values while preserving the full set of bin ranges in the results.

This is particularly useful when you want to compare different subsets of data while maintaining consistent ranges. For example:

  • Use the same height ranges for comparing old vs new buildings

Unlike top-level filters which affect both what ranges appear AND their values, filters in this configuration only affect the values while keeping all possible ranges in the results.


filters?

Attribute filters for the features to include when calculating the histogram bins.


boundary?

The spatial boundary for the features to include when calculating the histogram bins.

LayerChangeCallbackParams


Properties

layer

The new data for the layer or null if the layer was removed.

LayerFilters


The filters that are currently set on a layer.

A layer's filters are the combination of various different places in which filters can be applied.

Properties

style

Filters that are set in the layer's style. These are the lowest level of filters, and can only be set by editing the map.


components

Filters that are set in the layer's components, which are interactive elements in the legend. These can be set by viewers for their own session, but their default value can be set by the map creator.


ephemeral

Filters that are set ephemerally by viewers in their own session.


combined

The combined result of all the filters set on the layer.

LayerCommon


The common properties for all layers.

Properties

id

id: string

A string identifying the layer


groupId

groupId: null | string

The ID of the layer group that the layer belongs to.

Layers that appear at the root level in Felt will not have a group ID.


name

name: string

The name of the layer can be displayed in the Legend, depending on how the layer's legend is configured in its style.


caption

caption: null | string

The layer's caption is shown in the legend.


description

description: null | string

The layer description forms part of the layer's metadata. This is visible to users via the layer info button in the legend.


visible

visible: boolean

Whether the layer is visible or not.


shownInLegend

shownInLegend: boolean

Whether the layer is shown in the legend or not.


style

style: object

The FSL style for the layer.

As the types of the styles are very complex, we return object here and advise that you program defensively while reading the styles.


status

status: "processing" | "completed" | "failed" | "incomplete"

The current processing status of the layer.


bounds

bounds: null | [number, number, number, number]

The bounding box of the layer in [west, south, east, north] order

There are cases where the bounds are not available, such as for layers added to the map from URL sources, as these are not (depending on their type) processed and analyzed by Felt.

GetLayerHistogramBin


Properties

min

min: number

The left edge of the bin.


max

max: number

The right edge of the bin.


value

value: number

The number of features in the bin.

optional position:

onPointerClick(params: { handler: (event: ) => void; }): VoidFunction

{ handler: (event: ) => void; }

(event: ) => void

onPointerMove(params: { handler: (event: ) => void; }): VoidFunction

{ handler: (event: ) => void; }

(event: ) => void

coordinate:

features: []

rasterValues: []

optional position:

position:

You can control the visibility of layers, layer groups, and legend items using the, , and methods.

The parameters for the method.

source: | |

Each style should be a valid FSL style, as described in .

See the for details on how to read and write styles.

Filters: | | null | boolean

Filters can be used to change which features in a layer are rendered. Filters can be applied to a layer by the method on the Felt controller.

Filters use a tree structure for combining expressions with logical operators, called a. When combining three or more conditions, you must use proper nesting rather than a flat list.

FilterTernary: [ | | null | boolean, , | | null | boolean]

GeometryFilter: | | | []

This is an input-only type. It is converted to a when passed to .

Layer: | |

The params used to request a histogram of values from a layer, passed to the method.

optional values: { boundary: [number, number][] | [number, number, number, number] | { type: "Polygon"; coordinates: [number, number][][]; } | { type: "MultiPolygon"; coordinates: [number, number][][][]; }; filters: null | boolean | [null | string, "in" | "ni", null | (null | string | number | boolean)[]] | [null | string, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", null | string | number | boolean] | ; aggregation: { method: "avg" | "max" | "min" | "sum" | "median"; attribute: string; }; }

Name
Type
Default value
Description

optional filters:

optional boundary:

The parameters for the listener.

layer: null |

style:

components:

ephemeral:

These are the filters that are set when the method is called. There is no way to set these in the Felt UI - they can only be set using the SDK.

combined:

See the for details on how to read and write styles.

One bin from the response from the method.

LngLatTuple
FeltController
MapInteractionEvent
MapInteractionEvent
LatLng
LayerFeature
RasterValue
LngLatTuple
InteractionsController
MapInteractionEvent
LngLatTuple
LayersController
LayerFeature
RasterValue
LayerFilters
LayerBoundaries
FilterLogicGate
FilterExpression
FilterTernary
Filters
GeometryFilter
LayerGroup
GetLayerGroupsConstraint
LayerGroupChangeCallbackParams
LayerSchema
LayerSchemaCommonAttribute
LayerSchemaNumericAttribute
LayerSchemaTextAttribute
LayerSchemaBooleanAttribute
LayerSchemaDateAttribute
LayerSchemaDateTimeAttribute
LayerSchemaAttribute
RasterLayerSource
RasterBand
GeoJsonUrlVectorSource
GeoJsonDataVectorSource
GeoJsonFileVectorSource
FeltTiledVectorSource
LayerCommon
RasterLayer
VectorLayer
UpdateLayerParams
DataOnlyLayer
GetLayersConstraint
LayerChangeCallbackParams
GetRenderedFeaturesConstraint
CreateLayersFromGeoJsonParams
LayerProcessingStatus
Layer
LegendItem
LegendItemIdentifier
LegendItemsConstraint
LegendItemChangeCallbackParams
AggregationConfig
MultiAggregationConfig
ValueConfiguration
GetLayerCategoriesParams
GetLayerCategoriesGroup
GetLayerHistogramParams
GetLayerHistogramBin
GetLayerCalculationParams
AggregationMethod
GeoJsonUrlVectorSource
GeoJsonDataVectorSource
GeoJsonFileVectorSource
FSL documentation
FilterTernary
FilterExpression
FilterTernary
FilterTernary
FilterExpression
FilterLogicGate
FilterTernary
FilterExpression
FeltBoundary
PolygonGeometry
MultiPolygonGeometry
LngLatTuple
RasterLayer
VectorLayer
DataOnlyLayer
Layer.style

LayerProcessingStatus


LayerProcessingStatus: "processing" | "completed" | "failed" | "incomplete"

This describes the processing status of a layer.

The various values are:

  • processing: The layer has been uploaded or updated and is still processing.

  • completed: The layer has been processed and can be viewed on the map.

  • failed: The layer failed to process and cannot be viewed on the map.

  • incomplete: The layer has not been processed.

MapInteractionEvent
MapInteractionEvent
MapInteractionEvent
MapInteractionEvent
FilterTernary
Filters
GeometryFilter
Layer
Filters
Filters
Filters
Filters
FSL documentation
FeltBoundary

LegendItemIdentifier


The identifier for a legend item. It is a compound key of the layer to which the legend item belongs and the legend item's own id.

Properties

id

id: string

The id of the legend item.


layerId

layerId: string

The id of the layer the legend item belongs to.

boundary?

[number, number][] | [number, number, number, number] | { type: "Polygon"; coordinates: [number, number][][]; } | { type: "MultiPolygon"; coordinates: [number, number][][][]; }

-

-

filters?

-

-

aggregation?

{ method: "avg" | "max" | "min" | "sum" | "median"; attribute: string; }

-

-

aggregation.method

"avg" | "max" | "min" | "sum" | "median"

AggregateMethodSchema

The operation to use on the values from the features in the layer

aggregation.attribute

string

-

The attribute to use for the aggregation. This must be a numeric attribute.

LayerGroupChangeCallbackParams


Properties

layerGroup

LayerGroup


Properties

id

id: string

A string identifying the layer group.


name

name: string

The name of the layer group. This is shown in the legend.


caption

caption: null | string

The caption of the layer group. This is shown in the legend.


layerIds

layerIds: string[]

The ids of the layers in the layer group.

Remarks


visible

visible: boolean

Whether the layer group is visible or not.


shownInLegend

shownInLegend: boolean

Whether the layer group is shown in the legend or not.


bounds

bounds: null | [number, number, number, number]

The bounding box of the layer group in [west, south, east, north] order.

LegendItem


A legend item, which often represents a sub-class of features in a layer in the case of categorical or classed layers.

Properties

title

title: string | string[]

The title of the legend item.


titleDependsOnZoom

titleDependsOnZoom: boolean


visible

visible: boolean

Whether the legend item is visible or not.


id

id: string

The id of the legend item.


layerId

layerId: string

The id of the layer the legend item belongs to.

LegendItemChangeCallbackParams


Properties

legendItem

The new data for the legend item or null if the legend item was removed.

LegendItemsConstraint


Constraints for legend items. If nothing is passed, all legend items will be returned.

Properties

ids?

optional ids: { id: string; layerId: string; }[]

Array of legend item identifiers to constrain by.


layerIds?

optional layerIds: string[]

Array of layer ids to constrain legend items by.

LayerSchemaDateTimeAttribute


The schema for a datetime attribute on a layer.

Properties

id

id: string

The unique identifier for this attribute.


displayName

displayName: string

The human-readable name of this attribute.


detailedType

detailedType: string

The specific data type of this attribute, providing more detail than the basic type.

For instance, a numeric attribute might be "INTEGER", "FLOAT, etc.


distinctCount

distinctCount: number

The number of distinct values present for this attribute across all features.


type

type: "datetime"

Indicates this is a datetime attribute.


min

min: string

The earliest datetime present for this attribute in ISO8601 format.


max

max: string

The latest datetime present for this attribute in ISO8601 format.


sampleValues

sampleValues: { value: string; count: number; }[]

A representative sample of datetime values for this attribute and their frequency.

LayersController


The Layers controller allows you to get information about the layers on the map, and make changes to their visibility.

Layers can be organised into groups, and their groups can also have their visibility toggled.

Extended by

Methods

getLayer()

Get a single layer from the map by its id.

Parameters

Returns

The requested layer.

Example


getLayers()

Gets layers from the map, according to the constraints supplied. If no constraints are supplied, all layers will be returned.

Parameters

Returns

All layers on the map.

Remarks

The layers in the map, ordered by the order specified in Felt. This is not necessarily the order that they are drawn in, as Felt draws points above lines and lines above polygons, for instance.

Example


setLayerVisibility()

Hide or show layers with the given ids.

Parameters

Returns

Promise<void>

Example


setLayerStyle()

setLayerStyle(params: { id: string; style: object; }): Promise<void>

Set the style for a layer using FSL, the Felt Style Language.

Changes are only for this session, and not persisted. This is useful to make temporary changes to a layer's style, such as to highlight a particular layer or feature.

If the style you set is invalid, you will receive an error explaining the problem in the rejected promise value.

Parameters

Returns

Promise<void>

Example


setLayerLegendVisibility()

Hide or show layers with the given ids from the legend.

Parameters

Returns

Promise<void>

Example


createLayersFromGeoJson()

Adds layers to the map from file or URL sources.

Parameters

Returns

The layer groups that were created.

Remarks

This allows you to add temporary layers to the map that don't depend on any processing by Felt. This is useful for viewing data from external sources or remote files.

Example


updateLayer()

Update a layer by passing a subset of the layer's properties.

Parameters

Returns

Example


deleteLayer()

deleteLayer(id: string): Promise<void>

Delete a layer from the map by its id.

Parameters

Returns

Promise<void>

Remarks

This only works for layers created via the SDK createLayersFromGeoJson method, not layers added via the Felt UI.

Example


getLayerGroup()

Get a layer group from the map by its id.

Parameters

Returns

The requested layer group.

Example


getLayerGroups()

Gets layer groups from the map, according to the constraints supplied. If no constraints are supplied, all layer groups will be returned in rendering order.

Parameters

Returns

The requested layer groups.

Example


setLayerGroupVisibility()

Hide or show layer groups with the given ids.

Parameters

Returns

Promise<void>

Example


setLayerGroupLegendVisibility()

Hide or show layer groups with the given ids from the legend.

Parameters

Returns

Promise<void>

Example


getLegendItem()

Allows you to get the state of a single legend item.

Parameters

Returns

Example


getLegendItems()

Allows you to obtain the state of several legend items, by passing in constraints describing which legend items you want.

If you do not pass any constraints, you will receive all legend items.

Parameters

Returns

Example


setLegendItemVisibility()

Hide or show legend items with the given identifiers.

Parameters

Returns

Promise<void>

Example


getLayerFilters()

Get the filters for a layer.

Parameters

Returns

Remarks

The return type gives you the filters split up into the various sources that make up the overall filters for a layer.

Example


setLayerFilters()

Sets the ephemeral filters for a layer.

Parameters

Returns

Promise<void>

Example


getLayerBoundaries()

Get the spatial boundaries that are filtering a layer.

Parameters

Returns

Remarks

The return type gives you the boundaries split up into the various sources that make up the overall boundary for a layer.

The combined boundary is the intersection of the other sources of boundaries.

Example


setLayerBoundary()

Parameters

Returns

Promise<void>

Example


getRenderedFeatures()

Get the features that are currently rendered on the map in the viewport.

Note that this is explicitly about the features that are rendered, which isn't necessarily a complete list of all the features in the viewport. This is because of the way features are tiled: at low zoom levels or high feature densities, many features are omitted from what is rendered on the screen.

Parameters

Returns

Example


getFeature()

Get a feature from the map by its ID and layer ID.

You may want to use this when you don't need the geometry of a feature, but you know the ID of the feature you need.

Parameters

Returns

Example


getFeatures()

Get a list of layer features.

Parameters

Returns

The response is an object which contains:

  • count: the total number of features that match the query.

  • previousPage & nextPage: The tokens to pass in the pagination param to navigate between pages.

Remarks

This list is paginated in sets of 20 features for each page. In order to paginate between pages, the response includes previousPage and nextPage that are tokens that should be sent in the pagination params for requesting sibling pages.

Text search is case-insensitive and looks for matches across all feature properties.

Example


getGeoJsonFeature()

Get a feature in GeoJSON format from the map by its ID and layer ID.

The response is a GeoJSON Feature object with the complete geometry of the feature. Note that for some very large geometries, the response may take a long time to return, and may return a very large object.

Parameters

Returns

Example


getCategoryData()

Gets values from a layer grouped by a given attribute.

Parameters

Returns

Remarks

Groups features in your layer by unique values in the specified attribute and calculates a value for each group. By default, this value is the count of features in each group.

You can apply filters in two ways:

  1. At the top level (using boundary and filters), which affects both what categories are included and how values are calculated

  2. In the values configuration, which only affects the values but keeps all categories

This two-level filtering is particularly useful when you want to compare subsets of data while maintaining consistent categories. For example, you might want to show the distribution of all building types in a city, but only count buildings built after 2000 in each category.

Example


getHistogramData()

Gets a histogram of values from a layer for a given attribute.

Parameters

Returns

Remarks

Creates bins (ranges) for numeric data and counts how many features fall into each bin, or returns aggregated values for each bin.

You can control how the bins are created using the steps parameter, choosing from several methods like equal intervals, quantiles, or natural breaks (Jenks), or passing in the step values directly if you know how you want to bin the data.

Like getCategoryData, you can apply filters in two ways:

  1. At the top level (using boundary and filters), which affects both how the bins are calculated and what features are counted in each bin

  2. In the values configuration, which only affects what gets counted but keeps the bin ranges the same

This is particularly useful when you want to compare distributions while keeping consistent bin ranges. For example, you might want to compare the distribution of building heights in different years while using the same height ranges.

Example


getAggregates()

Calculates a single aggregate value for a layer based on the provided configuration.

Type Parameters

Parameters

Returns

Promise<Record<T, null | number>>

Remarks

Performs statistical calculations on your data, like counting features or computing averages, sums, etc. You can focus your calculation on specific areas or subsets of your data using boundaries and filters.

When no aggregation is specified, it counts features. When an aggregation is provided, it performs that calculation (average, sum, etc.) on the specified attribute.

Example


getLayerSchema()

Get the schema for a layer.

Parameters

Returns

Remarks

The schema describes the structure of the data in a layer, including the attributes that are available on the features in the layer.

This can be useful to build generic UIs that need to know the structure of the data in a layer, such as a dropdown to choose an attribute.

Example

Events

onLayerChange()

Adds a listener for when a layer changes.

Parameters

Returns

VoidFunction

A function to unsubscribe from the listener

Example


onLayerGroupChange()

Adds a listener for when a layer group changes.

Parameters

Returns

VoidFunction

A function to unsubscribe from the listener

Example


onLegendItemChange()

Adds a listener for when a legend item changes.

Parameters

Returns

VoidFunction

A function to unsubscribe from the listener

Example


onLayerFiltersChange()

Adds a listener for when a layer's filters change.

Parameters

Returns

VoidFunction

A function to unsubscribe from the listener

Remarks

This event fires whenever any type of filter changes on the layer, including ephemeral filters set via the SDK, style-based filters, or filters set through the Felt UI via Components.

Example


onLayerBoundariesChange()

Adds a listener for when a layer's spatial boundaries change.

Parameters

Returns

VoidFunction

A function to unsubscribe from the listener

Remarks

This event fires whenever any type of spatial boundary changes on the layer, including ephemeral boundaries set via the SDK or boundaries set through the Felt UI via Spatial filter components.

Example

MultiAggregationConfig


Defines how to aggregate a value across features in a layer with multiple aggregations returned at once.

Type Parameters

Properties

methods

methods: T[]

The operations to use on the values from the features in the layer


attribute?

optional attribute: string

The attribute to use for the aggregation when aggregations other than "count" are used.

This can be omitted if the only aggregation is "count", but must be a numeric attribute otherwise.

GeoJsonDataVectorSource

null | boolean | [null | string, "in" | "ni", null | (null | string | number | boolean)[]] | [null | string, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", null | string | number | boolean] |

The parameters for the listener.

layerGroup: null |

You can use these ids to get the full layer objects via the method.

Whether the title depends on the zoom level or not. If it does, you need to call when the zoom level changes.

Note that as the zoom level changes, the handler will not be called, so you need to call yourself.

The parameters for the listener.

legendItem: null |

Name
Type
Description

This can be used to fetch statistics, categories, histograms etc. for this attribute via the , , and methods.

Name
Type

getLayer(id: string): Promise<null | >

Parameter
Type
Description

Promise<null | >

getLayers(constraint?: ): Promise<(null | )[]>

Parameter
Type
Description

Promise<(null | )[]>

setLayerVisibility(visibility: ): Promise<void>

Parameter
Type

See the for details on how to read and write styles.

Parameter
Type
Description

setLayerLegendVisibility(params: ): Promise<void>

Parameter
Type

createLayersFromGeoJson(params: ): Promise<null | { layerGroup: ; layers: []; }>

Parameter
Type

Promise<null | { layerGroup: ; layers: []; }>

updateLayer(params: ): Promise<>

Note that not all properties can be updated, so check the type to see which properties can be updated.

Parameter
Type

Promise<>

Parameter
Type

getLayerGroup(id: string): Promise<null | >

Parameter
Type

Promise<null | >

getLayerGroups(constraint?: ): Promise<(null | )[]>

Parameter
Type
Description

Promise<(null | )[]>

setLayerGroupVisibility(visibility: ): Promise<void>

Parameter
Type

setLayerGroupLegendVisibility(params: ): Promise<void>

Parameter
Type

getLegendItem(id: ): Promise<null | >

Parameter
Type

Promise<null | >

getLegendItems(constraint?: ): Promise<(null | )[]>

Parameter
Type

Promise<(null | )[]>

setLegendItemVisibility(visibility: { show: []; hide: []; }): Promise<void>

Parameter
Type

getLayerFilters(layerId: string): Promise<null | >

Parameter
Type

Promise<null | >

setLayerFilters(params: { layerId: string; filters: ; note: string; }): Promise<void>

Parameter
Type
Description

getLayerBoundaries(layerId: string): Promise<null | >

Parameter
Type

Promise<null | >

setLayerBoundary(params: { layerIds: string[]; boundary: null | ; }): Promise<void>

Set the boundary for one or more layers.

Parameter
Type
Description

getRenderedFeatures(params?: ): Promise<[]>

Parameter
Type
Description

Promise<[]>

getFeature(params: { id: string | number; layerId: string; }): Promise<null | >

The response is a object, which does not include the geometry of the feature.

Parameter
Type

Promise<null | >

getFeatures(params: { layerId: string; filters: ; sorting: ; boundary: ; search: string; pagination: null | string; }): Promise<{ features: []; count: number; previousPage: null | string; nextPage: null | string; }>

Parameter
Type
Description

Promise<{ features: []; count: number; previousPage: null | string; nextPage: null | string; }>

features: list of objects, which does not include the geometry of the feature but it does include its bounding box.

getGeoJsonFeature(params: { id: string | number; layerId: string; }): Promise<null | >

Parameter
Type

Promise<null | >

getCategoryData(params: ): Promise<[]>

Parameter
Type

Promise<[]>

getHistogramData(params: ): Promise<[]>

Parameter
Type

Promise<[]>

getAggregates<T>(params: <T>): Promise<Record<T, null | number>>

Type Parameter
Parameter
Type

getLayerSchema(layerId: string): Promise<>

Parameter
Type

Promise<>

onLayerChange(args: { options: { id: string; }; handler: (change: ) => void; }): VoidFunction

Parameter
Type
Description

onLayerGroupChange(args: { options: { id: string; }; handler: (change: ) => void; }): VoidFunction

Parameter
Type

onLegendItemChange(args: { options: ; handler: (change: ) => void; }): VoidFunction

Parameter
Type

onLayerFiltersChange(params: { options: { layerId: string; }; handler: (change: ) => void; }): VoidFunction

Parameter
Type

onLayerBoundariesChange(params: { options: { layerId: string; }; handler: (boundaries: null | ) => void; }): VoidFunction

Parameter
Type
Description
Type Parameter
FilterTernary
LayerGroup
FeltBoundary

id

string

The id of the legend item.

layerId

string

The id of the layer the legend item belongs to.

value

string

count

number

id

string

The id of the layer you want to get.

const layer = await felt.getLayer("layer-1");
const layers = await felt.getLayers();
felt.setLayerVisibility({ show: ["layer-1", "layer-2"], hide: ["layer-3"] });

params

{ id: string; style: object; }

-

params.id

string

The id of the layer to set the style for.

params.style

object

The style to set for the layer.

// first get the current style
const oldStyle = (await felt.getLayer("layer-1")).style;

felt.setLayerStyle({ id: "layer-1", style: {
  ...oldStyle,
  paint: {
    ...oldStyle.paint,
    color: "red",
  },
} });
felt.setLayerLegendVisibility({ show: ["layer-1", "layer-2"], hide: ["layer-3"] });
const layerFromFile = await felt.createLayersFromGeoJson({
  source: {
    type: "geoJsonFile",
    file: someFile,
  },
  name: "Parcels",
});

const layerFromUrl = await felt.createLayersFromGeoJson({
  source: {
    sourceType: "geoJsonUrl",
    url: "https://example.com/parcels.geojson",
  },
  name: "Parcels",
await felt.updateLayer({
  id: "layer-1",
  name: "My Layer",
  caption: "A description of the layer",
});

id

string

await felt.deleteLayer("layer-1");

id

string

const layerGroup = await felt.getLayerGroup("layer-group-1");
const layerGroups = await felt.getLayerGroups({ ids: ["layer-group-1", "layer-group-2"] });
felt.setLayerGroupVisibility({ show: ["layer-group-1", "layer-group-2"], hide: ["layer-group-3"] });
felt.setLayerGroupLegendVisibility({ show: ["layer-1", "layer-2"], hide: ["layer-3"] });
const legendItem = await felt.getLegendItem({
  id: "legend-item-1",
  layerId: "layer-1",
})
const legendItems = await felt.getLegendItems({layerId: "layer-1"});
felt.setLegendItemVisibility({
  show: [{layerId: "layer-group-1", id: "item-1-0"}],
  hide: [{layerId: "layer-group-2", id: "item-2-0"}],
})

layerId

string

const filters = await felt.getLayerFilters("layer-1");
console.log(filters.combined, filters.style, filters.ephemeral, filters.components);
await felt.setLayerFilters({
  layerId: "layer-1",
  filters: ["AREA", "gt", 30_000],
});

layerId

string

const boundaries = await felt.getLayerBoundaries("layer-1");

console.log(boundaries?.combined);
console.log(boundaries?.spatialFilters);
console.log(boundaries?.ephemeral);
await felt.setLayerBoundary({
  layerIds: ["layer-1", "layer-2"],
  boundary: { type: "MultiPolygon", coordinates: [[[100, 0], [101, 0], [101, 1], [100, 1], [100, 0]]] }
});
const features = await felt.getRenderedFeatures();

params

{ id: string | number; layerId: string; }

params.id

string | number

params.layerId

string

const feature = await felt.getFeature({ layerId: "layer-1", id: 123 });
const page1Response = await felt.getFeatures({
  layerId: "layer-1",
  search: "abc123",
  pagination: undefined,
});

// Note that the search term here matches the one for the first page.
if (page1Response.nextPage) {
  const page2Response = await felt.getFeatures({
    layerId: "layer-1",
    search: "abc123",
    pagination: page1Response.nextPage,
  });
}

params

{ id: string | number; layerId: string; }

params.id

string | number

params.layerId

string

const feature = await felt.getGeoJsonFeature({ layerId: "layer-1", id: 123 });
// Basic grouping: Count of buildings by type
const buildingsByType = await felt.getCategoryData({
  layerId: "buildings",
  attribute: "type"
});

// Filtered grouping: Only count buildings in downtown
const downtownBuildingsByType = await felt.getCategoryData({
  layerId: "buildings",
  attribute: "type",
  boundary: [-122.43, 47.60, -122.33, 47.62]  // downtown boundary
});

// Advanced: Show all building types, but only sum floor area of recent buildings
const recentBuildingAreaByType = await felt.getCategoryData({
  layerId: "buildings",
  attribute: "type",
  values: {
    filters: ["year_built", "gte", 2000],
    aggregation: {
      method: "sum",
      attribute: "floor_area"
    }
  }
});

// Compare residential density across neighborhoods while only counting recent buildings
const newBuildingDensityByNeighborhood = await felt.getCategoryData({
  layerId: "buildings",
  attribute: "neighborhood",
  values: {
    filters: ["year_built", "gte", 2000],
    aggregation: {
      method: "avg",
      attribute: "units_per_acre"
    }
  }
});
// Basic histogram: Building heights in 5 natural break bins
const buildingHeights = await felt.getHistogramData({
  layerId: "buildings",
  attribute: "height",
  steps: { type: "jenks", count: 5 }
});

// Compare old vs new buildings using the same height ranges
const oldBuildingHeights = await felt.getHistogramData({
  layerId: "buildings",
  attribute: "height",
  steps: [0, 20, 50, 100, 200, 500],
  values: {
    filters: ["year_built", "lt", 1950]
  }
});

const newBuildingHeights = await felt.getHistogramData({
  layerId: "buildings",
  attribute: "height",
  steps: [0, 20, 50, 100, 200, 500],  // Same ranges as above
  values: {
    filters: ["year_built", "gte", 1950]
  }
});

T extends "avg" | "max" | "min" | "sum" | "median" | "count"

// Count all residential buildings
const residentialCount = await felt.getAggregates({
  layerId: "buildings",
  filters: ["type", "eq", "residential"]
});

// Calculate average home value in a specific neighborhood
const avgHomeValue = await felt.getAggregates({
  layerId: "buildings",
  boundary: [-122.43, 47.60, -122.33, 47.62],  // neighborhood boundary
  aggregation: {
    method: "avg",
    attribute: "assessed_value"
  }
});

// Find the maximum building height for buildings built after 2000
const maxNewBuildingHeight = await felt.getAggregates({
  layerId: "buildings",
  filters: ["year_built", "gte", 2000],
  aggregation: {
    method: "max",
    attribute: "height"
  }
});

layerId

string

const schema = await felt.getLayerSchema("layer-1");
const attributeIds = schema.attributes.map((attr) => attr.id);
const unsubscribe = felt.onLayerChange({
  options: { id: "layer-1" },
  handler: ({layer}) => console.log(layer.bounds),
});

// later on...
unsubscribe();
const unsubscribe = felt.onLayerGroupChange({
  options: { id: "layer-group-1" },
  handler: ({layerGroup}) => console.log(layerGroup.id),
});

// later on...
unsubscribe();
const unsubscribe = felt.onLegendItemChange({
  options: { layerId: "layer-1", id: "item-1-0" },
  handler: ({legendItem}) => console.log(legendItem.visible),
});

// later on...
unsubscribe();
const unsubscribe = felt.onLayerFiltersChange({
  options: { layerId: "layer-1" },
  handler: ({combined, ephemeral, style, components}) => {
    console.log("Layer filters updated:", {
      combined,  // All filters combined
      ephemeral, // Filters set via SDK
      style,     // Filters from layer style
      components // Filters from UI components
    });
  },
});

// later on...
unsubscribe();
const unsubscribe = felt.onLayerBoundariesChange({
  options: { layerId: "layer-1" },
  handler: ({combined, ephemeral, spatialFilters}) => {
    console.log("Layer boundaries updated:", {
      combined,  // All boundaries combined
      ephemeral, // Boundaries set via SDK
      spatialFilters // Boundaries set via UI
    });
  },
});

// later on...
unsubscribe();
`setLayerVisibility`
`setLayerGroupVisibility`
`setLegendItemVisibility`
LayersController.createLayersFromGeoJson
`setLayerFilters`
LayersController.createLayersFromGeoJson
LayersController.getHistogramData
`onLayerChange`
`setLayerFilters`
LayersController.getHistogramData
`onLayerGroupChange`
`getLayers`

RasterValue


A raster pixel value for a specific layer.

Properties

value

value: number

The value of the pixel.


layerId

layerId: string

The ID of the layer that the pixel belongs to.


categoryName

categoryName: null | string

The name of the category that the pixel belongs to.


color

color: null | { r: number; g: number; b: number; a: number; }

The color of the pixel. Each value is between 0 and 255.

LegendItem
FeltController
Layer
Layer
GetLayersConstraint
Layer
Layer
SetVisibilityRequest
FSL documentation
SetVisibilityRequest
CreateLayersFromGeoJsonParams
LayerGroup
Layer
LayerGroup
Layer
UpdateLayerParams
Layer
UpdateLayerParams
Layer
LayerGroup
LayerGroup
GetLayerGroupsConstraint
LayerGroup
LayerGroup
SetVisibilityRequest
SetVisibilityRequest
LegendItemIdentifier
LegendItem
LegendItem
LegendItemsConstraint
LegendItem
LegendItem
LegendItemIdentifier
LegendItemIdentifier
LayerFilters
LayerFilters
Filters
LayerBoundaries
LayerBoundaries
GeometryFilter
GetRenderedFeaturesConstraint
LayerFeature
LayerFeature
LayerFeature
LayerFeature
LayerFeature
Filters
SortConfig
GeometryFilter
LayerFeature
LayerFeature
LayerFeature
GeoJsonFeature
GeoJsonFeature
GetLayerCategoriesParams
GetLayerCategoriesGroup
GetLayerCategoriesGroup
GetLayerHistogramParams
GetLayerHistogramBin
GetLayerHistogramBin
GetLayerCalculationParams
LayerSchema
LayerSchema
LayerChangeCallbackParams
LayerGroupChangeCallbackParams
LegendItemIdentifier
LegendItemChangeCallbackParams
LayerFilters
LayerBoundaries
`getLegendItem`
`onLegendItemChange`
`getLegendItem`
`onLegendItemChange`
LayersController.getCategoryData
LayersController.getHistogramData
LayersController.getAggregates

constraint?

The constraints to apply to the layers returned from the map.

visibility

params

params

params

constraint?

The constraints to apply to the layer groups returned from the map.

visibility

params

id

constraint?

visibility

visibility.show?

visibility.hide?

params

-

params.layerId

string

The layer that you want to set the filters for.

params.filters

The filters to set for the layer. This will replace any ephemeral filters that are currently set for the layer.

params.note?

string

A note to display on the layer legend when this filter is applied. When the note is shown, a reset button will also be shown, allowing the user to clear the filter.

params

-

params.layerIds

string[]

The ids of the layers to set the boundary for.

params.boundary

The boundary to set for the layer. Passing null clears the ephemeral boundary for the layer.

params?

The constraints to apply to the features returned from the map.

params

-

params.layerId

string

The ID of the layer to get features from.

params.filters?

Filters to be applied. These filters will merge with layer's own filters.

params.sorting?

Attribute to sort by.

params.boundary?

The spatial boundary to be applied.

params.search?

string

Search term to search by. Search is case-insensitive and looks for matches across all feature properties.

params.pagination?

null | string

Pagination token. It comes from either the previousPage or nextPage properties of the previous response.

params

params

params

args

-

args.options

{ id: string; }

-

args.options.id

string

The id of the layer to listen for changes to.

args.handler

The handler that is called when the layer changes.

args

args.options

{ id: string; }

args.options.id

string

args.handler

args

args.options

args.handler

params

params.options

{ layerId: string; }

params.options.layerId

string

params.handler

params

-

params.options

{ layerId: string; }

-

params.options.layerId

string

The id of the layer to listen for boundary changes on.

params.handler

A function that is called when the boundaries change.

RasterLayer


A raster layer is a layer that contains raster data that can be rendered on the map

Properties

id

id: string

A string identifying the layer


groupId

groupId: null | string

The ID of the layer group that the layer belongs to.

Layers that appear at the root level in Felt will not have a group ID.


name

name: string

The name of the layer can be displayed in the Legend, depending on how the layer's legend is configured in its style.


caption

caption: null | string

The layer's caption is shown in the legend.


description

description: null | string

The layer description forms part of the layer's metadata. This is visible to users via the layer info button in the legend.


visible

visible: boolean

Whether the layer is visible or not.


shownInLegend

shownInLegend: boolean

Whether the layer is shown in the legend or not.


style

style: object

The FSL style for the layer.

As the types of the styles are very complex, we return object here and advise that you program defensively while reading the styles.


status

status: "processing" | "completed" | "failed" | "incomplete"

The current processing status of the layer.


bounds

bounds: null | [number, number, number, number]

The bounding box of the layer in [west, south, east, north] order

There are cases where the bounds are not available, such as for layers added to the map from URL sources, as these are not (depending on their type) processed and analyzed by Felt.


geometryType

geometryType: "Raster"

Identifies the type of geometry in the layer.


source

The source of the raster layer's data.

ValueConfiguration


Configuration for filtering and aggregating values across features.

This can be used to restrict the features considered for aggregation via the boundary and filters properties.

It can also be used to specify how to aggregate the values via the aggregation property.

Properties

boundary?

The spatial boundary for what to count or aggregate.


filters?

Attribute filters to determine what gets counted or aggregated.


aggregation?

Specifies how to aggregate values within each category or bin. When omitted, features are counted. When specified, the chosen calculation (avg, sum, etc.) is performed on the specified attribute.

For example, instead of counting buildings in each category, you might want to sum their square footage or average their assessed values.

Main


Example

// embed the map
const map = await Felt.embed(container, "felt-map-abc-123");

// now the map is loaded and connected, you can use the FeltController interface
// to control the map. For instance, to get information about the layers
const layers = await map.getLayers();

// Or to set the viewport to a specific location and zoom level
await map.setViewport({
  center: { latitude: 37.8113, longitude: -122.2682 },
  zoom: 10,
});

Controller

Instantiation

RasterLayerSource


The source of a raster layer's data.

Properties

imageTileTemplateUrl

imageTileTemplateUrl: string

A URL template for fetching image tiles for the raster.


encodedTileTemplateUrl

encodedTileTemplateUrl: string

A URL template for fetching encoded tiles for the raster.

The encoded raster value can be calculated from the red, green, and blue values of the pixel using the following formula:

base + ((RED << 16) + (GREEN <<8) + BLUE) * interval

or

base + (RED * 256 * 256 + GREEN * 256 + BLUE) * interval

bands

List of encoded raster bands

Misc


The misc module for hard-to-categorize functionality.

Controller

Types

T extends | "count"

{ show: []; hide: []; }

[]

[]

{ layerId: string; filters: ; note: string; }

{ layerIds: string[]; boundary: null | ; }

null |

{ layerId: string; filters: ; sorting: ; boundary: ; search: string; pagination: null | string; }

<T>

{ options: { id: string; }; handler: (change: ) => void; }

(change: ) => void

{ options: { id: string; }; handler: (change: ) => void; }

(change: ) => void

{ options: ; handler: (change: ) => void; }

(change: ) => void

{ options: { layerId: string; }; handler: (change: ) => void; }

(change: ) => void

{ options: { layerId: string; }; handler: (boundaries: null | ) => void; }

(boundaries: null | ) => void

See the for details on how to read and write styles.

source:

optional boundary:

optional filters:

optional aggregation:

Use the object to embed a new iframe, or connect to an existing embedded iframe.

Once you have connected to a Felt map (either by embedding or connecting to an existing iframe), you can use the object to control the map.

To see what you can do with the map, see the documentation for the interface and its constituent controllers.

bands: []

GetLayersConstraint
SetVisibilityRequest
SetVisibilityRequest
CreateLayersFromGeoJsonParams
UpdateLayerParams
GetLayerGroupsConstraint
SetVisibilityRequest
SetVisibilityRequest
LegendItemIdentifier
LegendItemsConstraint
LegendItemIdentifier
LegendItemIdentifier
LegendItemIdentifier
LegendItemIdentifier
Filters
Filters
GeometryFilter
GeometryFilter
GetRenderedFeaturesConstraint
Filters
SortConfig
GeometryFilter
Filters
SortConfig
GeometryFilter
GetLayerCategoriesParams
GetLayerHistogramParams
GetLayerCalculationParams
LayerChangeCallbackParams
LayerChangeCallbackParams
LayerGroupChangeCallbackParams
LayerGroupChangeCallbackParams
LegendItemIdentifier
LegendItemChangeCallbackParams
LegendItemIdentifier
LegendItemChangeCallbackParams
LayerFilters
LayerFilters
LayerBoundaries
LayerBoundaries
AggregationMethod
FSL documentation
FeltBoundary
RasterLayerSource
GeometryFilter
Filters
AggregationConfig
Felt
FeltController
FeltController
FeltController
FeltEmbedOptions
Felt
RasterBand
MiscController
MapDetails

FeltController


This is the main interface for interacting with a Felt map.

This interface is composed of the various controllers, each having a different area of responsibility.

All the methods are listed here, but each controller is documented on its own to make it easier to find related methods and events.

Extends

Methods

getElement()

Get a single element from the map by its id.

Parameters

Parameter
Type
Description

id

string

The id of the element you want to get.

Returns

The requested element.

Example

const element = await felt.getElement("element-1");

getElementGeometry()

Get the geometry of an element in GeoJSON geometry format.

For most element types, the geometry returned is based on the coordinates property of the element, with some differences:

  • For Circle elements, the geometry is a Polygon drawn from the center andradius properties.

  • Path elements become MultiLineString geometries.

  • Marker elements return a MultiLineString of the path traced by the user as they drew the marker. Note that this is not the polygon formed by filled-in "pen" stroke, which doesn't exactly follow the path traced by the user as it is smoothed and interpolated to create a continuous line.

  • Text, Note and Image elements do not return geometry, so will return null.

Parameters

Parameter
Type
Description

id

string

The id of the element you want to get the geometry of.

Returns

Example

const geometry = await felt.getElementGeometry("element-1");
console.log(geometry?.type, geometry?.coordinates);

getElements()

Gets elements from the map, according to the constraints supplied. If no constraints are supplied, all elements will be returned.

Parameters

Parameter
Type
Description

constraint?

The constraints to apply to the elements returned from the map.

Returns

All elements on the map.

Remarks

The elements in the map, ordered by the order specified in Felt. This is not necessarily the order that they are drawn in, as Felt draws points above lines and lines above polygons, for instance.

Example

const elements = await felt.getElements();

getElementGroup()

Get an element group from the map by its id.

Parameters

Parameter
Type

id

string

Returns

The requested element group.

Example

const elementGroup = await felt.getElementGroup("element-group-1");

getElementGroups()

Gets element groups from the map, according to the filters supplied. If no constraints are supplied, all element groups will be returned in rendering order.

Parameters

Parameter
Type
Description

constraint?

The constraints to apply to the element groups returned from the map.

Returns

The requested element groups.

Example

const elementGroups = await felt.getElementGroups({ ids: ["element-group-1", "element-group-2"] });

setElementGroupVisibility()

Hide or show element groups with the given ids.

Parameters

Parameter
Type

visibility

Returns

Promise<void>

Example

felt.setElementGroupVisibility({ show: ["element-group-1", "element-group-2"], hide: ["element-group-3"] });

createElement()

Create a new element on the map.

Parameters

Parameter
Type

element

Returns

Example

const element = await felt.createElement({ type: "Place", coordinates: [10, 10] });

updateElement()

Update an element on the map.

Parameters

Parameter
Type

element

Returns

Example

// Update a place element's coordinates
await felt.updateElement({
  id: "element-1",
  coordinates: [10, 20]
});

// Update a polygon's style
await felt.updateElement({
  id: "element-2",
  color: "#ABC123",
  fillOpacity: 0.5
});

deleteElement()

deleteElement(id: string): Promise<void>

Delete an element from the map.

Parameters

Parameter
Type

id

string

Returns

Promise<void>

Example

await felt.deleteElement("element-1");

getLayer()

Get a single layer from the map by its id.

Parameters

Parameter
Type
Description

id

string

The id of the layer you want to get.

Returns

The requested layer.

Example

const layer = await felt.getLayer("layer-1");

getLayers()

Gets layers from the map, according to the constraints supplied. If no constraints are supplied, all layers will be returned.

Parameters

Parameter
Type
Description

constraint?

The constraints to apply to the layers returned from the map.

Returns

All layers on the map.

Remarks

The layers in the map, ordered by the order specified in Felt. This is not necessarily the order that they are drawn in, as Felt draws points above lines and lines above polygons, for instance.

Example

const layers = await felt.getLayers();

setLayerVisibility()

Hide or show layers with the given ids.

Parameters

Parameter
Type

visibility

Returns

Promise<void>

Example

felt.setLayerVisibility({ show: ["layer-1", "layer-2"], hide: ["layer-3"] });

setLayerStyle()

setLayerStyle(params: { id: string; style: object; }): Promise<void>

Set the style for a layer using FSL, the Felt Style Language.

Changes are only for this session, and not persisted. This is useful to make temporary changes to a layer's style, such as to highlight a particular layer or feature.

If the style you set is invalid, you will receive an error explaining the problem in the rejected promise value.

Parameters

Parameter
Type
Description

params

{ id: string; style: object; }

-

params.id

string

The id of the layer to set the style for.

params.style

object

The style to set for the layer.

Returns

Promise<void>

Example

// first get the current style
const oldStyle = (await felt.getLayer("layer-1")).style;

felt.setLayerStyle({ id: "layer-1", style: {
  ...oldStyle,
  paint: {
    ...oldStyle.paint,
    color: "red",
  },
} });

setLayerLegendVisibility()

Hide or show layers with the given ids from the legend.

Parameters

Parameter
Type

params

Returns

Promise<void>

Example

felt.setLayerLegendVisibility({ show: ["layer-1", "layer-2"], hide: ["layer-3"] });

createLayersFromGeoJson()

Adds layers to the map from file or URL sources.

Parameters

Parameter
Type

params

Returns

The layer groups that were created.

Remarks

This allows you to add temporary layers to the map that don't depend on any processing by Felt. This is useful for viewing data from external sources or remote files.

Example

const layerFromFile = await felt.createLayersFromGeoJson({
  source: {
    type: "geoJsonFile",
    file: someFile,
  },
  name: "Parcels",
});

const layerFromUrl = await felt.createLayersFromGeoJson({
  source: {
    sourceType: "geoJsonUrl",
    url: "https://example.com/parcels.geojson",
  },
  name: "Parcels",

updateLayer()

Update a layer by passing a subset of the layer's properties.

Parameters

Parameter
Type

params

Returns

Example

await felt.updateLayer({
  id: "layer-1",
  name: "My Layer",
  caption: "A description of the layer",
});

deleteLayer()

deleteLayer(id: string): Promise<void>

Delete a layer from the map by its id.

Parameters

Parameter
Type

id

string

Returns

Promise<void>

Remarks

This only works for layers created via the SDK createLayersFromGeoJson method, not layers added via the Felt UI.

Example

await felt.deleteLayer("layer-1");

getLayerGroup()

Get a layer group from the map by its id.

Parameters

Parameter
Type

id

string

Returns

The requested layer group.

Example

const layerGroup = await felt.getLayerGroup("layer-group-1");

getLayerGroups()

Gets layer groups from the map, according to the constraints supplied. If no constraints are supplied, all layer groups will be returned in rendering order.

Parameters

Parameter
Type
Description

constraint?

The constraints to apply to the layer groups returned from the map.

Returns

The requested layer groups.

Example

const layerGroups = await felt.getLayerGroups({ ids: ["layer-group-1", "layer-group-2"] });

setLayerGroupVisibility()

Hide or show layer groups with the given ids.

Parameters

Parameter
Type

visibility

Returns

Promise<void>

Example

felt.setLayerGroupVisibility({ show: ["layer-group-1", "layer-group-2"], hide: ["layer-group-3"] });

setLayerGroupLegendVisibility()

Hide or show layer groups with the given ids from the legend.

Parameters

Parameter
Type

params

Returns

Promise<void>

Example

felt.setLayerGroupLegendVisibility({ show: ["layer-1", "layer-2"], hide: ["layer-3"] });

getLegendItem()

Allows you to get the state of a single legend item.

Parameters

Parameter
Type

id

Returns

Example

const legendItem = await felt.getLegendItem({
  id: "legend-item-1",
  layerId: "layer-1",
})

getLegendItems()

Allows you to obtain the state of several legend items, by passing in constraints describing which legend items you want.

If you do not pass any constraints, you will receive all legend items.

Parameters

Parameter
Type

constraint?

Returns

Example

const legendItems = await felt.getLegendItems({layerId: "layer-1"});

setLegendItemVisibility()

Hide or show legend items with the given identifiers.

Parameters

Parameter
Type

visibility

visibility.show?

visibility.hide?

Returns

Promise<void>

Example

felt.setLegendItemVisibility({
  show: [{layerId: "layer-group-1", id: "item-1-0"}],
  hide: [{layerId: "layer-group-2", id: "item-2-0"}],
})

getLayerFilters()

Get the filters for a layer.

Parameters

Parameter
Type

layerId

string

Returns

Remarks

The return type gives you the filters split up into the various sources that make up the overall filters for a layer.

Example

const filters = await felt.getLayerFilters("layer-1");
console.log(filters.combined, filters.style, filters.ephemeral, filters.components);

setLayerFilters()

Sets the ephemeral filters for a layer.

Parameters

Parameter
Type
Description

params

-

params.layerId

string

The layer that you want to set the filters for.

params.filters

The filters to set for the layer. This will replace any ephemeral filters that are currently set for the layer.

params.note?

string

A note to display on the layer legend when this filter is applied. When the note is shown, a reset button will also be shown, allowing the user to clear the filter.

Returns

Promise<void>

Example

await felt.setLayerFilters({
  layerId: "layer-1",
  filters: ["AREA", "gt", 30_000],
});

getLayerBoundaries()

Get the spatial boundaries that are filtering a layer.

Parameters

Parameter
Type

layerId

string

Returns

Remarks

The return type gives you the boundaries split up into the various sources that make up the overall boundary for a layer.

The combined boundary is the intersection of the other sources of boundaries.

Example

const boundaries = await felt.getLayerBoundaries("layer-1");

console.log(boundaries?.combined);
console.log(boundaries?.spatialFilters);
console.log(boundaries?.ephemeral);

setLayerBoundary()

Parameters

Parameter
Type
Description

params

-

params.layerIds

string[]

The ids of the layers to set the boundary for.

params.boundary

The boundary to set for the layer. Passing null clears the ephemeral boundary for the layer.

Returns

Promise<void>

Example

await felt.setLayerBoundary({
  layerIds: ["layer-1", "layer-2"],
  boundary: { type: "MultiPolygon", coordinates: [[[100, 0], [101, 0], [101, 1], [100, 1], [100, 0]]] }
});

getRenderedFeatures()

Get the features that are currently rendered on the map in the viewport.

Note that this is explicitly about the features that are rendered, which isn't necessarily a complete list of all the features in the viewport. This is because of the way features are tiled: at low zoom levels or high feature densities, many features are omitted from what is rendered on the screen.

Parameters

Parameter
Type
Description

params?

The constraints to apply to the features returned from the map.

Returns

Example

const features = await felt.getRenderedFeatures();

getFeature()

Get a feature from the map by its ID and layer ID.

You may want to use this when you don't need the geometry of a feature, but you know the ID of the feature you need.

Parameters

Parameter
Type

params

{ id: string | number; layerId: string; }

params.id

string | number

params.layerId

string

Returns

Example

const feature = await felt.getFeature({ layerId: "layer-1", id: 123 });

getFeatures()

Get a list of layer features.

Parameters

Parameter
Type
Description

params

-

params.layerId

string

The ID of the layer to get features from.

params.filters?

Filters to be applied. These filters will merge with layer's own filters.

params.sorting?

Attribute to sort by.

params.boundary?

The spatial boundary to be applied.

params.search?

string

Search term to search by. Search is case-insensitive and looks for matches across all feature properties.

params.pagination?

null | string

Pagination token. It comes from either the previousPage or nextPage properties of the previous response.

Returns

The response is an object which contains:

  • count: the total number of features that match the query.

  • previousPage & nextPage: The tokens to pass in the pagination param to navigate between pages.

Remarks

This list is paginated in sets of 20 features for each page. In order to paginate between pages, the response includes previousPage and nextPage that are tokens that should be sent in the pagination params for requesting sibling pages.

Text search is case-insensitive and looks for matches across all feature properties.

Example

const page1Response = await felt.getFeatures({
  layerId: "layer-1",
  search: "abc123",
  pagination: undefined,
});

// Note that the search term here matches the one for the first page.
if (page1Response.nextPage) {
  const page2Response = await felt.getFeatures({
    layerId: "layer-1",
    search: "abc123",
    pagination: page1Response.nextPage,
  });
}

getGeoJsonFeature()

Get a feature in GeoJSON format from the map by its ID and layer ID.

The response is a GeoJSON Feature object with the complete geometry of the feature. Note that for some very large geometries, the response may take a long time to return, and may return a very large object.

Parameters

Parameter
Type

params

{ id: string | number; layerId: string; }

params.id

string | number

params.layerId

string

Returns

Example

const feature = await felt.getGeoJsonFeature({ layerId: "layer-1", id: 123 });

getCategoryData()

Gets values from a layer grouped by a given attribute.

Parameters

Parameter
Type

params

Returns

Remarks

Groups features in your layer by unique values in the specified attribute and calculates a value for each group. By default, this value is the count of features in each group.

You can apply filters in two ways:

  1. At the top level (using boundary and filters), which affects both what categories are included and how values are calculated

  2. In the values configuration, which only affects the values but keeps all categories

This two-level filtering is particularly useful when you want to compare subsets of data while maintaining consistent categories. For example, you might want to show the distribution of all building types in a city, but only count buildings built after 2000 in each category.

Example

// Basic grouping: Count of buildings by type
const buildingsByType = await felt.getCategoryData({
  layerId: "buildings",
  attribute: "type"
});

// Filtered grouping: Only count buildings in downtown
const downtownBuildingsByType = await felt.getCategoryData({
  layerId: "buildings",
  attribute: "type",
  boundary: [-122.43, 47.60, -122.33, 47.62]  // downtown boundary
});

// Advanced: Show all building types, but only sum floor area of recent buildings
const recentBuildingAreaByType = await felt.getCategoryData({
  layerId: "buildings",
  attribute: "type",
  values: {
    filters: ["year_built", "gte", 2000],
    aggregation: {
      method: "sum",
      attribute: "floor_area"
    }
  }
});

// Compare residential density across neighborhoods while only counting recent buildings
const newBuildingDensityByNeighborhood = await felt.getCategoryData({
  layerId: "buildings",
  attribute: "neighborhood",
  values: {
    filters: ["year_built", "gte", 2000],
    aggregation: {
      method: "avg",
      attribute: "units_per_acre"
    }
  }
});

getHistogramData()

Gets a histogram of values from a layer for a given attribute.

Parameters

Parameter
Type

params

Returns

Remarks

Creates bins (ranges) for numeric data and counts how many features fall into each bin, or returns aggregated values for each bin.

You can control how the bins are created using the steps parameter, choosing from several methods like equal intervals, quantiles, or natural breaks (Jenks), or passing in the step values directly if you know how you want to bin the data.

Like getCategoryData, you can apply filters in two ways:

  1. At the top level (using boundary and filters), which affects both how the bins are calculated and what features are counted in each bin

  2. In the values configuration, which only affects what gets counted but keeps the bin ranges the same

This is particularly useful when you want to compare distributions while keeping consistent bin ranges. For example, you might want to compare the distribution of building heights in different years while using the same height ranges.

Example

// Basic histogram: Building heights in 5 natural break bins
const buildingHeights = await felt.getHistogramData({
  layerId: "buildings",
  attribute: "height",
  steps: { type: "jenks", count: 5 }
});

// Compare old vs new buildings using the same height ranges
const oldBuildingHeights = await felt.getHistogramData({
  layerId: "buildings",
  attribute: "height",
  steps: [0, 20, 50, 100, 200, 500],
  values: {
    filters: ["year_built", "lt", 1950]
  }
});

const newBuildingHeights = await felt.getHistogramData({
  layerId: "buildings",
  attribute: "height",
  steps: [0, 20, 50, 100, 200, 500],  // Same ranges as above
  values: {
    filters: ["year_built", "gte", 1950]
  }
});

getAggregates()

Calculates a single aggregate value for a layer based on the provided configuration.

Type Parameters

Type Parameter

T extends "avg" | "max" | "min" | "sum" | "median" | "count"

Parameters

Parameter
Type

params

Returns

Promise<Record<T, null | number>>

Remarks

Performs statistical calculations on your data, like counting features or computing averages, sums, etc. You can focus your calculation on specific areas or subsets of your data using boundaries and filters.

When no aggregation is specified, it counts features. When an aggregation is provided, it performs that calculation (average, sum, etc.) on the specified attribute.

Example

// Count all residential buildings
const residentialCount = await felt.getAggregates({
  layerId: "buildings",
  filters: ["type", "eq", "residential"]
});

// Calculate average home value in a specific neighborhood
const avgHomeValue = await felt.getAggregates({
  layerId: "buildings",
  boundary: [-122.43, 47.60, -122.33, 47.62],  // neighborhood boundary
  aggregation: {
    method: "avg",
    attribute: "assessed_value"
  }
});

// Find the maximum building height for buildings built after 2000
const maxNewBuildingHeight = await felt.getAggregates({
  layerId: "buildings",
  filters: ["year_built", "gte", 2000],
  aggregation: {
    method: "max",
    attribute: "height"
  }
});

getLayerSchema()

Get the schema for a layer.

Parameters

Parameter
Type

layerId

string

Returns

Remarks

The schema describes the structure of the data in a layer, including the attributes that are available on the features in the layer.

This can be useful to build generic UIs that need to know the structure of the data in a layer, such as a dropdown to choose an attribute.

Example

const schema = await felt.getLayerSchema("layer-1");
const attributeIds = schema.attributes.map((attr) => attr.id);

getMapDetails()

Gets the details of the map.

Returns

Example

const details = await felt.getMapDetails();
console.log({
  id: details.id,
  title: details.title,
  description: details.description,
});

getSelection()

Gets the current selection as a list of entity identifiers.

Returns

Example

const selection = await felt.getSelection();

selectFeature()

Selects a feature on a layer. This will show the feature's popup, modal or sidebar (if configured) and highlight the feature.

Parameters

Parameter
Type

params

Returns

Promise<void>

Example

felt.selectFeature({
  id: 123,
  layerId: "my-layer",
  showPopup: true,
  fitViewport: { maxZoom: 15 },
});

clearSelection()

clearSelection(params?: { features: boolean; elements: boolean; }): Promise<void>

Clears the current selection. This clears the selection of

Parameters

Parameter
Type
Description

params?

{ features: boolean; elements: boolean; }

The parameters to clear the selection. If this is not provided, both features and elements will be cleared.

params.features?

boolean

Whether to clear the features from the selection.

params.elements?

boolean

Whether to clear the elements from the selection.

Returns

Promise<void>

Example


// Removes all features and elements from the selection
felt.clearSelection();

// Removes only features from the selection
felt.clearSelection({ features: true });

// Removes only elements from the selection
felt.clearSelection({ elements: true });

Default

{ features: true, elements: true }

setTool()

setTool(tool: null | "text" | "link" | "note" | "pin" | "line" | "route" | "polygon" | "circle" | "marker" | "highlighter"): void

Sets the tool to use for drawing elements on the map.

Parameters

Parameter
Type
Description

tool

null | "text" | "link" | "note" | "pin" | "line" | "route" | "polygon" | "circle" | "marker" | "highlighter"

The tool to set.

Returns

void

Example

// Set the tool to "marker"
await felt.setTool("marker");

// put down the tool
await felt.setTool(null);

getTool()

getTool(): Promise<null | "text" | "link" | "note" | "pin" | "line" | "route" | "polygon" | "circle" | "marker" | "highlighter">

Gets the current tool, if any is in use.

Returns

Promise<null | "text" | "link" | "note" | "pin" | "line" | "route" | "polygon" | "circle" | "marker" | "highlighter">

The current tool, or null if no tool is in use.

Example

const tool = await felt.getTool(); // "marker", "polygon", etc.

onToolChange()

onToolChange(args: { handler: (tool: null | "text" | "link" | "note" | "pin" | "line" | "route" | "polygon" | "circle" | "marker" | "highlighter") => void; }): VoidFunction

Listens for changes to the current tool.

Parameters

Parameter
Type
Description

args

{ handler: (tool: null | "text" | "link" | "note" | "pin" | "line" | "route" | "polygon" | "circle" | "marker" | "highlighter") => void; }

-

args.handler

(tool: null | "text" | "link" | "note" | "pin" | "line" | "route" | "polygon" | "circle" | "marker" | "highlighter") => void

This callback is called with the current tool whenever the tool changes.

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onToolChange({
  handler: tool => console.log(tool),
});

// later on...
unsubscribe();

setToolSettings()

Sets the settings for the current tool.

Parameters

Parameter
Type
Description

settings

The settings to set.

Returns

void

Example

// Set the settings for the marker tool
await felt.setToolSettings({
  tool: "marker",
  color: "#FE17",
});

getToolSettings()

Gets the settings for the chosen tool

Type Parameters

Type Parameter

Parameters

Parameter
Type

tool

T

Returns

The settings for the chosen tool.

Example

const settings = await felt.getToolSettings("marker");

onToolSettingsChange()

Listens for changes to the settings on all tools.

Parameters

Parameter
Type

args

args.handler

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onToolSettingsChange({
  handler: settings => console.log(settings),
});

// later on...
unsubscribe();

updateUiControls()

Updates the UI controls on the embedded map.

Parameters

Parameter
Type
Description

controls

The controls to update.

Returns

void

Example

// Show some UI controls
await felt.updateUiControls({
  showLegend: true,
  fullScreenButton: true,
});

// Disable some UI options
await felt.updateUiControls({
  cooperativeGestures: false,
  geolocation: false,
});

setOnMapInteractionsUi()

Control the on-map UI shown when interacting with features and elements.

If you add your own click, selection or hover handlers you may want to disable various parts of the Felt UI. This method allows you to control the visibility of various parts of the UI that might otherwise be shown when people click or hover on things.

This does not affect selection. That means that selectable features and elements will still be selected when clicked.

Parameters

Parameter
Type

options

Returns

void

Example

// Disable UI when hovering or selecting features
await felt.setOnMapInteractionsUi({
  featureSelectPanel: false,
  featureHoverPanel: false,
});

showLayerDataTable()

Shows a data table view for the specified layer, optionally sorted by a given attribute.

Parameters

Parameter
Type

params?

params.layerId?

string

params.sorting?

Returns

Promise<void>

Example

// Show data table with default sorting
await felt.showLayerDataTable({
  layerId: "layer-1",
});

// Show data table sorted by height in descending order
await felt.showLayerDataTable({
  layerId: "layer-1",
  sorting: {
    attribute: "height",
    direction: "desc",
  },
});

// Show the data table pane with no table visible
await felt.showLayerDataTable();

hideLayerDataTable()

hideLayerDataTable(): Promise<void>

Hides the data table.

Returns

Promise<void>

Example

await felt.hideLayerDataTable();

getViewport()

Gets the current state of the viewport.

Returns

Example

// Get current viewport state
const viewport = await felt.getViewport();
console.log({
  center: viewport.center,
  zoom: viewport.zoom,
});

setViewport()

Moves the map to the specified location.

Parameters

Parameter
Type

viewport

Returns

void

Example

felt.setViewport({
  center: { latitude: 0, longitude: 0 },
  zoom: 10,
});

getViewportConstraints()

Gets the current state of the viewport constraints.

Returns

Example

// Get current viewport constraints
const constraints = await felt.getViewportConstraints();
if (constraints) {
  console.log({
    bounds: constraints.bounds,
    minZoom: constraints.minZoom,
    maxZoom: constraints.maxZoom
  });
} else {
  console.log("No viewport constraints set");
}

setViewportConstraints()

Constrains the map viewport so it stays inside certain bounds and/or certain zoom levels.

Parameters

Parameter
Type

constraints

Returns

void

Examples

felt.setViewportConstraints({
  bounds: [-122.5372532, 37.6652478, -122.1927016, 37.881707],
  minZoom: 1,
  maxZoom: 23,
});

every constraint is optional

felt.setViewportConstraints({
  bounds: [-122.5372532, 37.6652478, -122.1927016, 37.881707],
});

if a constraint is null, it will be removed but keeping the others

felt.setViewportConstraints({ bounds: null });

if method receives null, it will remove the constraints

felt.setViewportConstraints(null);

fitViewportToBounds()

Fits the map to the specified bounds.

Parameters

Parameter
Type

bounds

Returns

void

Example

const west = -122.4194;
const south = 37.7749;
const east = -122.4194;
const north = 37.7749;
felt.fitViewportToBounds({ bounds: [west, south, east, north] });

Events

onElementCreate()

Adds a listener for when an element is created.

Parameters

Parameter
Type
Description

args

-

args.handler

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onElementCreate({
  handler: (element) => console.log(element.id),
});

// later on...
unsubscribe();

onElementCreateEnd()

Listens for when a new element is finished being created by a drawing tool.

For example, when creating a polygon, the user places a series of points then finishes by pressing Enter or Escape. Or when creating a Place element, they add the marker, type a label, then finally deselect the element.

Parameters

Parameter
Type
Description

args

-

args.handler

The handler to call whenever this event fires.

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onToolCreatedElement({
  handler: (params) => console.log(params),
});

// later on...
unsubscribe();

onElementChange()

Adds a listener for when an element changes.

This will fire when an element is being edited, either on the map by the user or programatically.

Parameters

Parameter
Type
Description

args

-

args.options

{ id: string; }

-

args.options.id

string

The id of the element to listen for changes to.

args.handler

The handler that is called when the element changes.

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onElementChange({
  options: { id: "element-1" },
  handler: ({element}) => console.log(element.id),
});

// later on...
unsubscribe();

onElementDelete()

onElementDelete(args: { options: { id: string; }; handler: () => void; }): VoidFunction

Adds a listener for when an element is deleted.

Parameters

Parameter
Type
Description

args

{ options: { id: string; }; handler: () => void; }

-

args.options

{ id: string; }

-

args.options.id

string

The id of the element to listen for deletions of.

args.handler

() => void

The handler that is called when the element is deleted.

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onElementDelete({
  options: { id: "element-1" },
  handler: () => console.log("element-1 deleted"),
});

// later on...
unsubscribe();

onElementGroupChange()

Adds a listener for when an element group changes.

Parameters

Parameter
Type

args

args.options

{ id: string; }

args.options.id

string

args.handler

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onElementGroupChange({
  options: { id: "element-group-1" },
  handler: elementGroup => console.log(elementGroup.id),
});

// later on...
unsubscribe();

onPointerClick()

Allows you to be notified the user clicks on the map.

Parameters

Parameter
Type

params

params.handler

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onPointerClick({
  handler: (event) => console.log(event.center, event.features),
});

// later on...
unsubscribe();

onPointerMove()

Allows you to be notified the user moves the mouse over the map.

Parameters

Parameter
Type
Description

params

Params for the listener

params.handler

The handler function

Returns

VoidFunction

A function to unsubscribe from the listener

Example

// Track mouse movement and features under cursor
const unsubscribe = felt.onPointerMove({
  handler: (event) => {
    console.log("Mouse position:", event.center);
    console.log("Features under cursor:", event.features);
  }
});

// later on...
unsubscribe();

onLayerChange()

Adds a listener for when a layer changes.

Parameters

Parameter
Type
Description

args

-

args.options

{ id: string; }

-

args.options.id

string

The id of the layer to listen for changes to.

args.handler

The handler that is called when the layer changes.

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onLayerChange({
  options: { id: "layer-1" },
  handler: ({layer}) => console.log(layer.bounds),
});

// later on...
unsubscribe();

onLayerGroupChange()

Adds a listener for when a layer group changes.

Parameters

Parameter
Type

args

args.options

{ id: string; }

args.options.id

string

args.handler

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onLayerGroupChange({
  options: { id: "layer-group-1" },
  handler: ({layerGroup}) => console.log(layerGroup.id),
});

// later on...
unsubscribe();

onLegendItemChange()

Adds a listener for when a legend item changes.

Parameters

Parameter
Type

args

args.options

args.handler

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onLegendItemChange({
  options: { layerId: "layer-1", id: "item-1-0" },
  handler: ({legendItem}) => console.log(legendItem.visible),
});

// later on...
unsubscribe();

onLayerFiltersChange()

Adds a listener for when a layer's filters change.

Parameters

Parameter
Type

params

params.options

{ layerId: string; }

params.options.layerId

string

params.handler

Returns

VoidFunction

A function to unsubscribe from the listener

Remarks

This event fires whenever any type of filter changes on the layer, including ephemeral filters set via the SDK, style-based filters, or filters set through the Felt UI via Components.

Example

const unsubscribe = felt.onLayerFiltersChange({
  options: { layerId: "layer-1" },
  handler: ({combined, ephemeral, style, components}) => {
    console.log("Layer filters updated:", {
      combined,  // All filters combined
      ephemeral, // Filters set via SDK
      style,     // Filters from layer style
      components // Filters from UI components
    });
  },
});

// later on...
unsubscribe();

onLayerBoundariesChange()

Adds a listener for when a layer's spatial boundaries change.

Parameters

Parameter
Type
Description

params

-

params.options

{ layerId: string; }

-

params.options.layerId

string

The id of the layer to listen for boundary changes on.

params.handler

A function that is called when the boundaries change.

Returns

VoidFunction

A function to unsubscribe from the listener

Remarks

This event fires whenever any type of spatial boundary changes on the layer, including ephemeral boundaries set via the SDK or boundaries set through the Felt UI via Spatial filter components.

Example

const unsubscribe = felt.onLayerBoundariesChange({
  options: { layerId: "layer-1" },
  handler: ({combined, ephemeral, spatialFilters}) => {
    console.log("Layer boundaries updated:", {
      combined,  // All boundaries combined
      ephemeral, // Boundaries set via SDK
      spatialFilters // Boundaries set via UI
    });
  },
});

// later on...
unsubscribe();

onSelectionChange()

Adds a listener for when the selection changes.

Parameters

Parameter
Type

params

params.handler

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onSelectionChange({
  handler: ({selection}) => console.log(selection),
});

// later on...
unsubscribe();

onViewportMove()

Adds a listener for when the viewport changes.

Parameters

Parameter
Type
Description

args

-

args.handler

This callback is called with the current viewport state whenever the viewport changes.

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onViewportMove({
  handler: viewport => console.log(viewport.center.latitude),
});

// later on...
unsubscribe();

onViewportMoveEnd()

Adds a listener for when the viewport move ends, which is when the user stops dragging or zooming the map, animations have finished, or inertial dragging ends.

Parameters

Parameter
Type

args

args.handler

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onViewportMoveEnd({
  handler: viewport => console.log(viewport.center.latitude),
});

// later on...
unsubscribe();

onMapIdle()

onMapIdle(args: { handler: () => void; }): VoidFunction

Adds a listener for when the map is idle, which is defined as:

  • No transitions are in progress

  • The user is not interacting with the map, e.g. by panning or zooming

  • All tiles for the current viewport have been loaded

  • Any fade transitions (e.g. for labels) have completed

Parameters

Parameter
Type

args

{ handler: () => void; }

args.handler

() => void

Returns

VoidFunction

A function to unsubscribe from the listener

Example

const unsubscribe = felt.onMapIdle({ handler: () => console.log("map is idle") });

// later on...
unsubscribe();

Properties

iframe

readonly iframe: null | HTMLIFrameElement

The iframe element containing the Felt map, if it is an embedded map.

.......

getElement(id: string): Promise<null | >

Promise<null | >

getElementGeometry(id: string): Promise<null | >

Promise<null | >

getElements(constraint?: ): Promise<(null | )[]>

Promise<(null | )[]>

getElementGroup(id: string): Promise<null | >

Promise<null | >

getElementGroups(constraint?: ): Promise<(null | )[]>

Promise<(null | )[]>

setElementGroupVisibility(visibility: ): Promise<void>

createElement(element: ): Promise<>

Promise<>

updateElement(element: ): Promise<>

Promise<>

getLayer(id: string): Promise<null | >

Promise<null | >

getLayers(constraint?: ): Promise<(null | )[]>

Promise<(null | )[]>

setLayerVisibility(visibility: ): Promise<void>

See the for details on how to read and write styles.

setLayerLegendVisibility(params: ): Promise<void>

createLayersFromGeoJson(params: ): Promise<null | { layerGroup: ; layers: []; }>

Promise<null | { layerGroup: ; layers: []; }>

updateLayer(params: ): Promise<>

Note that not all properties can be updated, so check the type to see which properties can be updated.

Promise<>

getLayerGroup(id: string): Promise<null | >

Promise<null | >

getLayerGroups(constraint?: ): Promise<(null | )[]>

Promise<(null | )[]>

setLayerGroupVisibility(visibility: ): Promise<void>

setLayerGroupLegendVisibility(params: ): Promise<void>

getLegendItem(id: ): Promise<null | >

Promise<null | >

getLegendItems(constraint?: ): Promise<(null | )[]>

Promise<(null | )[]>

setLegendItemVisibility(visibility: { show: []; hide: []; }): Promise<void>

{ show: []; hide: []; }

[]

[]

getLayerFilters(layerId: string): Promise<null | >

Promise<null | >

setLayerFilters(params: { layerId: string; filters: ; note: string; }): Promise<void>

{ layerId: string; filters: ; note: string; }

getLayerBoundaries(layerId: string): Promise<null | >

Promise<null | >

setLayerBoundary(params: { layerIds: string[]; boundary: null | ; }): Promise<void>

Set the boundary for one or more layers.

{ layerIds: string[]; boundary: null | ; }

null |

getRenderedFeatures(params?: ): Promise<[]>

Promise<[]>

getFeature(params: { id: string | number; layerId: string; }): Promise<null | >

The response is a object, which does not include the geometry of the feature.

Promise<null | >

getFeatures(params: { layerId: string; filters: ; sorting: ; boundary: ; search: string; pagination: null | string; }): Promise<{ features: []; count: number; previousPage: null | string; nextPage: null | string; }>

{ layerId: string; filters: ; sorting: ; boundary: ; search: string; pagination: null | string; }

Promise<{ features: []; count: number; previousPage: null | string; nextPage: null | string; }>

features: list of objects, which does not include the geometry of the feature but it does include its bounding box.

getGeoJsonFeature(params: { id: string | number; layerId: string; }): Promise<null | >

Promise<null | >

getCategoryData(params: ): Promise<[]>

Promise<[]>

getHistogramData(params: ): Promise<[]>

Promise<[]>

getAggregates<T>(params: <T>): Promise<Record<T, null | number>>

<T>

getLayerSchema(layerId: string): Promise<>

Promise<>

getMapDetails(): Promise<>

Promise<>

getSelection(): Promise<[]>

Promise<[]>

selectFeature(params: ): Promise<void>

setToolSettings(settings: ): void

getToolSettings<T>(tool: T): Promise<[T]>

T extends keyof

Promise<[T]>

onToolSettingsChange(args: { handler: (settings: ) => void; }): VoidFunction

{ handler: (settings: ) => void; }

(settings: ) => void

updateUiControls(controls: ): void

setOnMapInteractionsUi(options: ): void

showLayerDataTable(params?: { layerId: string; sorting: ; }): Promise<void>

{ layerId: string; sorting: ; }

getViewport(): Promise<>

Promise<>

setViewport(viewport: ): void

getViewportConstraints(): Promise<null | >

Promise<null | >

setViewportConstraints(constraints: null | Partial<>): void

null | Partial<>

fitViewportToBounds(bounds: ): void

onElementCreate(args: { handler: (change: ) => void; }): VoidFunction

{ handler: (change: ) => void; }

(change: ) => void

The handler that is called when an element is created. This will fire when elements are created programatically, or when the user starts creating an element with a drawing tool. When the user creates an element with a drawing tool, it can begin in an invalid state, such as if you've just placed a single point in a polygon. You can use the isBeingCreated property to determine if the element is still being created by a drawing tool. If you want to know when the element is finished being created, you can use the listener.

onElementCreateEnd(args: { handler: (params: { element: ; }) => void; }): VoidFunction

This differs from the listener, which fires whenever an element is first created. This fires when the user finishes creating an element which could be after a series of interactions.

{ handler: (params: { element: ; }) => void; }

(params: { element: ; }) => void

onElementChange(args: { options: { id: string; }; handler: (change: ) => void; }): VoidFunction

Like the listener, this will fire when an element is still being created by a drawing tool.

You can check the property to determine if the element is still being created by a drawing tool.

{ options: { id: string; }; handler: (change: ) => void; }

(change: ) => void

onElementGroupChange(args: { options: { id: string; }; handler: (change: ) => void; }): VoidFunction

{ options: { id: string; }; handler: (change: ) => void; }

(change: ) => void

onPointerClick(params: { handler: (event: ) => void; }): VoidFunction

{ handler: (event: ) => void; }

(event: ) => void

onPointerMove(params: { handler: (event: ) => void; }): VoidFunction

{ handler: (event: ) => void; }

(event: ) => void

onLayerChange(args: { options: { id: string; }; handler: (change: ) => void; }): VoidFunction

{ options: { id: string; }; handler: (change: ) => void; }

(change: ) => void

onLayerGroupChange(args: { options: { id: string; }; handler: (change: ) => void; }): VoidFunction

{ options: { id: string; }; handler: (change: ) => void; }

(change: ) => void

onLegendItemChange(args: { options: ; handler: (change: ) => void; }): VoidFunction

{ options: ; handler: (change: ) => void; }

(change: ) => void

onLayerFiltersChange(params: { options: { layerId: string; }; handler: (change: ) => void; }): VoidFunction

{ options: { layerId: string; }; handler: (change: ) => void; }

(change: ) => void

onLayerBoundariesChange(params: { options: { layerId: string; }; handler: (boundaries: null | ) => void; }): VoidFunction

{ options: { layerId: string; }; handler: (boundaries: null | ) => void; }

(boundaries: null | ) => void

onSelectionChange(params: { handler: (change: { selection: []; }) => void; }): VoidFunction

{ handler: (change: { selection: []; }) => void; }

(change: { selection: []; }) => void

onViewportMove(args: { handler: (viewport: ) => void; }): VoidFunction

{ handler: (viewport: ) => void; }

(viewport: ) => void

onViewportMoveEnd(args: { handler: (viewport: ) => void; }): VoidFunction

{ handler: (viewport: ) => void; }

(viewport: ) => void

ViewportController
UiController
LayersController
ElementsController
SelectionController
InteractionsController
ToolsController
MiscController
Element
Element
GeoJsonGeometry
GeoJsonGeometry
GetElementsConstraint
Element
Element
ElementGroup
ElementGroup
GetElementGroupsConstraint
ElementGroup
ElementGroup
SetVisibilityRequest
ElementCreate
Element
Element
ElementUpdate
Element
Element
Layer
Layer
GetLayersConstraint
Layer
Layer
SetVisibilityRequest
FSL documentation
SetVisibilityRequest
CreateLayersFromGeoJsonParams
LayerGroup
Layer
LayerGroup
Layer
UpdateLayerParams
Layer
UpdateLayerParams
Layer
LayerGroup
LayerGroup
GetLayerGroupsConstraint
LayerGroup
LayerGroup
SetVisibilityRequest
SetVisibilityRequest
LegendItemIdentifier
LegendItem
LegendItem
LegendItemsConstraint
LegendItem
LegendItem
LegendItemIdentifier
LegendItemIdentifier
LayerFilters
LayerFilters
Filters
LayerBoundaries
LayerBoundaries
GeometryFilter
GetRenderedFeaturesConstraint
LayerFeature
LayerFeature
LayerFeature
LayerFeature
LayerFeature
Filters
SortConfig
GeometryFilter
LayerFeature
LayerFeature
LayerFeature
GeoJsonFeature
GeoJsonFeature
GetLayerCategoriesParams
GetLayerCategoriesGroup
GetLayerCategoriesGroup
GetLayerHistogramParams
GetLayerHistogramBin
GetLayerHistogramBin
GetLayerCalculationParams
LayerSchema
LayerSchema
MapDetails
MapDetails
EntityNode
EntityNode
FeatureSelection
InputToolSettings
ToolSettingsMap
ToolSettingsMap
ToolSettingsChangeEvent
UiControlsOptions
OnMapInteractionsOptions
SortConfig
ViewportState
ViewportState
SetViewportCenterZoomParams
ViewportConstraints
ViewportConstraints
ViewportConstraints
ViewportFitBoundsParams
ElementChangeCallbackParams
Element
ElementChangeCallbackParams
ElementGroupChangeCallbackParams
MapInteractionEvent
MapInteractionEvent
LayerChangeCallbackParams
LayerGroupChangeCallbackParams
LegendItemIdentifier
LegendItemChangeCallbackParams
LayerFilters
LayerBoundaries
EntityNode
ViewportState
ViewportState
`onElementCreate`
`onElementCreate`
`isBeingCreated`
GetElementsConstraint
GetElementGroupsConstraint
SetVisibilityRequest
ElementCreate
ElementUpdate
GetLayersConstraint
SetVisibilityRequest
SetVisibilityRequest
CreateLayersFromGeoJsonParams
UpdateLayerParams
GetLayerGroupsConstraint
SetVisibilityRequest
SetVisibilityRequest
LegendItemIdentifier
LegendItemsConstraint
LegendItemIdentifier
LegendItemIdentifier
LegendItemIdentifier
LegendItemIdentifier
Filters
Filters
GeometryFilter
GeometryFilter
GetRenderedFeaturesConstraint
Filters
SortConfig
GeometryFilter
Filters
SortConfig
GeometryFilter
GetLayerCategoriesParams
GetLayerHistogramParams
GetLayerCalculationParams
FeatureSelection
InputToolSettings
ToolSettingsMap
ToolSettingsChangeEvent
ToolSettingsChangeEvent
UiControlsOptions
OnMapInteractionsOptions
SortConfig
SortConfig
SetViewportCenterZoomParams
ViewportConstraints
ViewportFitBoundsParams
ElementChangeCallbackParams
ElementChangeCallbackParams
Element
Element
ElementChangeCallbackParams
ElementChangeCallbackParams
ElementGroupChangeCallbackParams
ElementGroupChangeCallbackParams
MapInteractionEvent
MapInteractionEvent
MapInteractionEvent
MapInteractionEvent
LayerChangeCallbackParams
LayerChangeCallbackParams
LayerGroupChangeCallbackParams
LayerGroupChangeCallbackParams
LegendItemIdentifier
LegendItemChangeCallbackParams
LegendItemIdentifier
LegendItemChangeCallbackParams
LayerFilters
LayerFilters
LayerBoundaries
LayerBoundaries
EntityNode
EntityNode
ViewportState
ViewportState
ViewportState
ViewportState
`onElementCreateEnd`

GetLayerCategoriesParams


Properties

layerId

layerId: string

The ID of the layer to get categories from.


attribute

attribute: string

The attribute to use for categorization.


limit?

optional limit: number

The maximum number of categories to return.


filters?

Attribute filters for the features to include when calculating the categories.


boundary?

The spatial boundary for the features to include when calculating the categories.


values?

Configuration for filtering and aggregating values while preserving the full set of categories in the results.

This is particularly useful when you want to compare different subsets of data while maintaining consistent categories. For example:

  • Show all building types in a city, but only count recent buildings in each type

  • Keep all neighborhood categories but only sum up residential square footage

Unlike top-level filters which affect both what categories appear AND their values, filters in this configuration only affect the values while keeping all possible categories in the results.

The parameters for getting categories from a layer, passed to the method.

optional filters:

optional boundary:

optional values:

Filters
GeometryFilter
ValueConfiguration
LayersController.getCategoryData

GetLayerCalculationParams


Type Parameters

Type Parameter

Properties

layerId

layerId: string

The ID of the layer to calculate an aggregate value for.


aggregation

Specifies how to aggregate values within each category or bin. When omitted, features are counted. When specified, the chosen calculation (avg, sum, etc.) is performed on the specified attribute.


filters?

Attribute filters for the features to include when calculating the aggregate value.


boundary?

The spatial boundary for the features to include when calculating the aggregate value.

The parameters for calculating a single aggregate value for a layer, passed to the method.

T extends | "count"

aggregation: <T>

optional filters:

optional boundary:

MultiAggregationConfig
Filters
GeometryFilter
LayersController.getAggregates
AggregationMethod

GeoJsonUrlVectorSource


A GeoJSON URL source is a layer that is populated from a GeoJSON file at a remote URL.

These sources are ones that have not been uploaded to and processed by Felt, and as such their capabilities are limited.

For instance, they cannot be filtered, nor can statistics be fetched for them.

Properties

type

type: "geoJsonUrl"

Identifies this as a GeoJSON URL source.


url

url: string

The remote URL of the GeoJSON file used to populate the layer.


refreshInterval?

optional refreshInterval: null | number

The interval in milliseconds between automatic refreshes of the GeoJSON.

The value must be in the range of 250ms - 5 minutes (300,000ms).

If the value is null, the GeoJSON will not be refreshed automatically.

`ephemeral`
`ephemeral`

LayerBoundaries


All the different sources for boundaries for a layer, including their combined result.

Properties

spatialFilters

Boundaries set by drawing spatial filters on the map.

When there are multiple spatial filters, they are combined into a multi-polygon.


ephemeral

Boundaries that are set ephemerally by viewers in their own session.


combined

The combined result of all the boundaries set on the layer.

Each different source of boundary is intersected to produce the combined result.

spatialFilters: null |

ephemeral: null |

These are the filters that are set when the method is called. There is no way to set these in the Felt UI - they can only be set using the SDK.

combined: null |

MultiPolygonGeometry
GeometryFilter
MultiPolygonGeometry
LayersController.setLayerBoundary

LayerFeature


A LayerFeature is a single geographical item in a layer.

Properties

id

id: string | number

The identifier of the feature, unique within the layer.


layerId

layerId: string

The identifier of the layer that the feature belongs to.


geometryType

geometryType: "Polygon" | "MultiPolygon" | "LineString" | "MultiLineString" | "Point" | "MultiPoint" | string & {}

The type of geometry of the feature.

Remarks

For example, this may return LineString but the full feature is a MultiLineString, or, similarly Polygon here may be a MultiPolygon in the full feature.

As a result, you should treat this property as being indicative only.


bbox

bbox: undefined | [number, number, number, number]

The bounding box of the feature.

Remarks

Because LayerFeatures can be read from tiled features and considering that feature geometry can go through multiple tiles, it's possible that this is not the complete bounding box of the feature.


properties

The properties of the feature, as a bag of attributes.

GetLayerCategoriesGroup


Properties

key

key: string | number | boolean

The category for which the value was calculated.


value

value: null | number

The value calculated for the category, whether a count, sum, average, etc.

null is returned if there are no features in the category as opposed to zero, so as not to confuse with a real zero value from some aggregation.

GetRenderedFeaturesConstraint


Properties

areaQuery?


layerIds?

optional layerIds: string[]

The ids of the layers to get rendered features for.

It is intended to be a lightweight object that contains the properties of a feature, but not the geometry. It is returned by methods like and , and as part of the methods in the

The geometry can be obtained via the method, which returns a object.

Because LayerFeatures can be read from tiled features, it's possible that this geometryType won't match the geometry.type of the returned by .

properties:

A single category from the response from the method.

Constraints for the method. This can include layer constriants, spatial constraints, or both. If no constraints are provided, all rendered features will be returned.

optional areaQuery: { coordinates: ; } | { boundary: [number, number, number, number]; }

The area to query for rendered features. This can be specific coordinates or a . If omitted, the entire viewport will be queried.

GeoJsonProperties
SelectionController
FeltController.getRenderedFeatures
FeltController.getFeature
GeoJsonFeature
FeltController.getGeoJsonFeature
GeoJsonFeature
FeltController.getGeoJsonFeature
LatLng
FeltBoundary
LayersController.getCategoryData
`getRenderedFeatures`

LayerSchema


The schema that describes the structure of the features in a layer.

Remarks

This can be useful to build generic UIs that need to know the structure of the data in a layer, such as a dropdown to choose an attribute.

Properties

featureCount

featureCount: number

The total number of features in the layer.


attributes

Array of attribute schemas describing the properties available on features in this layer.

attributes: []

LayerSchemaAttribute

LayerSchemaAttribute


A single attribute from the layer schema.

Remarks

Each feature in a layer has a set of attributes, and these types describe the structure of a single attribute, including things like id, display name, type, and sample values.

LayerSchemaAttribute: | | | |

LayerSchemaNumericAttribute
LayerSchemaTextAttribute
LayerSchemaBooleanAttribute
LayerSchemaDateAttribute
LayerSchemaDateTimeAttribute

LayerSchemaNumericAttribute


The schema for a numeric attribute on a layer.

Properties

id

id: string

The unique identifier for this attribute.


displayName

displayName: string

The human-readable name of this attribute.


detailedType

detailedType: string

The specific data type of this attribute, providing more detail than the basic type.

For instance, a numeric attribute might be "INTEGER", "FLOAT, etc.


distinctCount

distinctCount: number

The number of distinct values present for this attribute across all features.


type

type: "numeric"

Indicates this is a numeric attribute.


sampleValues

sampleValues: { value: number; count: number; }[]

A small sample of values for this attribute and their frequency.

Name
Type

value

number

count

number


min

min: number

The minimum value present for this attribute across all features.


max

max: number

The maximum value present for this attribute across all features.

This can be used to fetch statistics, categories, histograms etc. for this attribute via the , , and methods.

LayersController.getCategoryData
LayersController.getHistogramData
LayersController.getAggregates

LayerSchemaCommonAttribute


The common schema for all attributes.

Properties

id

id: string

The unique identifier for this attribute.


displayName

displayName: string

The human-readable name of this attribute.


detailedType

detailedType: string

The specific data type of this attribute, providing more detail than the basic type.

For instance, a numeric attribute might be "INTEGER", "FLOAT, etc.


distinctCount

distinctCount: number

The number of distinct values present for this attribute across all features.

LayerSchemaDateAttribute


The schema for a date attribute on a layer.

Properties

id

id: string

The unique identifier for this attribute.


displayName

displayName: string

The human-readable name of this attribute.


detailedType

detailedType: string

The specific data type of this attribute, providing more detail than the basic type.

For instance, a numeric attribute might be "INTEGER", "FLOAT, etc.


distinctCount

distinctCount: number

The number of distinct values present for this attribute across all features.


type

type: "date"

Indicates this is a date attribute.


min

min: string

The earliest date present for this attribute in truncated ISO8601 format (YYYY-MM-DD).


max

max: string

The latest date present for this attribute in truncated ISO8601 format (YYYY-MM-DD).


sampleValues

sampleValues: { value: string; count: number; }[]

A representative sample of date values for this attribute and their frequency.

Name
Type

value

string

count

number

LayerSchemaTextAttribute


The schema for a text attribute on a layer.

Properties

id

id: string

The unique identifier for this attribute.


displayName

displayName: string

The human-readable name of this attribute.


detailedType

detailedType: string

The specific data type of this attribute, providing more detail than the basic type.

For instance, a numeric attribute might be "INTEGER", "FLOAT, etc.


distinctCount

distinctCount: number

The number of distinct values present for this attribute across all features.


type

type: "text"

Indicates this is a text attribute.


sampleValues

sampleValues: { value: string; count: number; }[]

A small sample of string values for this attribute and their frequency.

Name
Type

value

string

count

number

LayerSchemaBooleanAttribute


The schema for a boolean attribute on a layer.

Properties

id

id: string

The unique identifier for this attribute.


displayName

displayName: string

The human-readable name of this attribute.


detailedType

detailedType: string

The specific data type of this attribute, providing more detail than the basic type.

For instance, a numeric attribute might be "INTEGER", "FLOAT, etc.


distinctCount

distinctCount: number

The number of distinct values present for this attribute across all features.


type

type: "boolean"

Indicates this is a boolean attribute.


sampleValues

sampleValues: { value: boolean; count: number; }[]

A representative sample of boolean values for this attribute and their frequency.

Name
Type

value

boolean

count

number

This can be used to fetch statistics, categories, histograms etc. for this attribute via the , , and methods.

This can be used to fetch statistics, categories, histograms etc. for this attribute via the , , and methods.

This can be used to fetch statistics, categories, histograms etc. for this attribute via the , , and methods.

This can be used to fetch statistics, categories, histograms etc. for this attribute via the , , and methods.

LayersController.getCategoryData
LayersController.getHistogramData
LayersController.getAggregates
LayersController.getCategoryData
LayersController.getHistogramData
LayersController.getAggregates
LayersController.getCategoryData
LayersController.getHistogramData
LayersController.getAggregates
LayersController.getCategoryData
LayersController.getHistogramData
LayersController.getAggregates

VectorLayer


A vector layer is a layer that contains vector data that can be rendered on the map

Properties

id

id: string

A string identifying the layer


groupId

groupId: null | string

The ID of the layer group that the layer belongs to.

Layers that appear at the root level in Felt will not have a group ID.


name

name: string

The name of the layer can be displayed in the Legend, depending on how the layer's legend is configured in its style.


caption

caption: null | string

The layer's caption is shown in the legend.


description

description: null | string

The layer description forms part of the layer's metadata. This is visible to users via the layer info button in the legend.


visible

visible: boolean

Whether the layer is visible or not.


shownInLegend

shownInLegend: boolean

Whether the layer is shown in the legend or not.


style

style: object

The FSL style for the layer.

As the types of the styles are very complex, we return object here and advise that you program defensively while reading the styles.


status

status: "processing" | "completed" | "failed" | "incomplete"

The current processing status of the layer.


bounds

bounds: null | [number, number, number, number]

The bounding box of the layer in [west, south, east, north] order

There are cases where the bounds are not available, such as for layers added to the map from URL sources, as these are not (depending on their type) processed and analyzed by Felt.


geometryType

geometryType: "Polygon" | "Point" | "Line"

Identifies the type of geometry in the layer.


source

The source of the vector layer's data.

See the for details on how to read and write styles.

source: | | Omit<, "data">

FSL documentation
FeltBoundary
GeoJsonUrlVectorSource
FeltTiledVectorSource
GeoJsonDataVectorSource

RasterBand


The RasterBand interface describes the metadata for a raster band, necessary for calculating the encoded raster value from the red, green, and blue values of the pixel.

Properties

base

base: number

Encoding base value as a floating point number


interval

interval: number

Encoding interval as a floating point number


bandIndex

bandIndex: number

1-based index of the band in the raster

FeltEmbedOptions


Properties

uiControls?


initialViewport?


token?

optional token: string

A short-lived (15 minutes) authentication token to use for showing embeds that are configured to be private.

Felt


The Felt SDK is a library for embedding Felt maps into your website, allowing you to control and inspect the map programmatically.

Type declaration

embed()

Parameters

Returns

connect()

Binds to an existing Felt map iframe.

Parameters

Returns

optional uiControls:

optional initialViewport:

const Felt: { embed: Promise<>; connect: Promise<>; }

Embeds a Felt map into the provided container, returning a promise that resolves to a object that you can use to control the map.

Parameter
Type
Description

Promise<>

A promise for a .

Parameter
Type
Description

Promise<>

UiControlsOptions
ViewportCenterZoom

feltWindow

Pick<Window, "postMessage">

The iframe element containing the Felt map.

FeltController
FeltController
FeltController
FeltController
FeltController
FeltController

container

HTMLElement

The container element to embed the map into.

mapId

string

The ID of the map to embed.

options?

The options to configure the map.

UpdateLayerParams


Properties

id

id: string

The id of the layer to update.


shownInLegend?

optional shownInLegend: boolean

Changes whether the layer is shown in the legend.


name?

optional name: string

Changes the name of the layer.


caption?

optional caption: string

Changes the caption of the layer.


description?

optional description: string

Changes the description of the layer.


bounds?

optional bounds: [number, number, number, number]

Changes the bounds of the layer.


style?

optional style: object

The style of the layer.


source?

Updates the source of the layer.

Only layers that have a GeoJSON source can have their source udpated.

For URL sources, if you pass the same URL again it will cause the data to be refreshed.

The value you need to pass to

optional source: | |

FeltEmbedOptions
GeoJsonUrlVectorSource
GeoJsonDataVectorSource
GeoJsonFileVectorSource
LayersController.updateLayer