Add layers to a map
Overview
You will learn: how to add layers to a map from a custom widget.
The map widget in ArcGIS Experience Builder automatically loads layers based on what web map it is configured to load. Depending on your workflow, you may want a custom widget to dynamically add a layer to the map based on user interaction with the widget.
In this tutorial, you will add a button to the widget to add a feature layer to the map.
Prerequisites
- Be sure to download, install, and configure Experience Builder.
- Complete the create a starter widget tutorial. It forms the base of this tutorial.
Steps
Get the starter widget
Download the Starter Widget template here.
In the ArcGIS Experience Builder folder, extract the zip into the following path: /client/your-extensions/widgets.
Change the widget name
In the terminal where the
npm start
is running in the client folder, stop the script by pressingctrl + c
.In your file browser, go to the folder where Experience Builder was extracted.
In the Experience Builder folder, expand the following path: /client/your-extensions/widgets.
In the widgets folder, rename the starter-widget folder to
add-layers-to-a-map
.In the newly-renamed add-layers-to-a-map folder, open the manifest.json file in the code editor.
In the code editor, modify the
name
property toadd-layers-to-a-map
.After the
version
property in manifest.json, add ajimu-arcgis
dependency. Declaring this allows the usage of ArcGIS API for JavaScript modules within the widget.
Implement the settings panel
A settings panel can be implemented to allow Experience authors to customize the widget. The settings panel appears in the right-hand sidebar when a widget is selected in ArcGIS Experience Builder. To create the panel, create a React component that uses React.PureComponent
as a base class.
In the widget root folder, create a
config.json
file that contains an empty object.
- In the src folder, create another folder called setting.
- In the setting folder, create a
setting.tsx
file. - Open the setting/setting.tsx file and include the following import statements.
- Add code to implement the component.
- In the terminal, stop (
ctrl + c
) (if applicable) and start thenpm start
script in the client folder.
Enable selecting a map view data source
In ArcGIS Experience Builder, there can be more than one Map Widget on the page at a time. Because of this, a custom widget must have a section of its Settings Panel that allows the author to choose which map widget to use.
In the setting/setting.tsx file, include the
MapWidgetSelector
module from thejimu
library.Before the
render
function, define theonMapWidgetSelected
function.In the
render
function, in thereturn()
statement, add a tag representing theMapWidgetSelector
.
Access the map
In the previous step, the settings panel was enhanced to allow the Map widget to be selected. The map object can be accessed using the JimuMapViewComponent
.
In the widget.tsx file, add the
JimuMapViewComponent
and theJimuMapView
type from thejimu
library.Before the
render
function, set up the default state.Add a function to update the state every time the JimuMapView data source changes.
In the
render
function, add theJimuMapViewComponent
to the JSX markup.
Add the button
Add a button to the UI of the widget that when clicked will add the layer to the map.
In the code editor, add
form
andinput
tag elements in the existingdiv
in therender
function.Above the
render
function, create a new function calledformSubmit
. This function will get called when the user clicks the Add Layer button.
Add a layer
When the button is clicked, add the layer to the map.
At the top of Widget.tsx, import the
FeatureLayer
class.In the
formSubmit
function, update the code to create the Trailheads (points) feature layer and add it to the map.
Test the widget
Once the code changes have been made, you can test your widget by running Experience Builder and viewing your experience.
In a web browser, go to Experience Builder. e.g. https://localhost:3001
In Experience Builder, click Create New to create a new experience page.
Click the Create button on the Blank scrolling template.
Click the Insert widget button, and drag the new add-layers-to-a-map widget onto the experience.
In the widget settings panel, choose Map 1 from the map selection dropdown.
In the Experience Builder toolbar, click Save then Preview and the experience will open in a new browser tab with your custom widget and a map.
Congratulations, you're done!
In the Experience Builder preview, click the button to add the layer to the map. Compare your widget with our completed widget, and see the top of this page for an example for how the Experience should look.