The Directions Widget provides a way to build driving and walking directions using ArcGIS Online and custom
Network Analysis Route services. Similar to how the route works, this widget
generates a route finding a least-cost path between multiple points using a specified network. When searching
for an address, the location of the points used to navigate depends on the locationType
of the Search properties.
The default value will be "street"
for any locator source that does not define a locationType
. The
resulting directions are displayed with detailed turn-by-turn instructions.
The widget wraps pre-built search functionality directly within it so all you need to do is reference the widget
within your application.
The routing service defaults to this URL:
https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World
.
This routing service requires authentication.
You can use Directions.apiKey, or a global apiKey.
Alternatively, you can log in once prompted, or use another
authentication method
to access the routing service.
To geocode locations in the Directions widget UI, the built-in Search widget uses this URL by default:
https://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer
, which also requires authentication.
Lastly, you can also specify your own ArcGIS Server route and geocoding services. Please see the
routeServiceUrl property for routing, and the Search properties for geocoding.
The Clear route
button calls the reset() method, which
clears all the input stops and results in the widget and in the map. Any types of customizations made to the underlying
functionality of the widget should be handled via its viewModel property.
const directionsWidget = new Directions({
view: view
});
// Adds the Directions widget below other elements in
// the top right corner of the view
view.ui.add(directionsWidget, {
position: "top-right",
index: 2
});
Constructors
-
new Directions(properties)
-
Parameter:properties Objectoptional
See the properties for a list of all the properties that may be passed into the constructor.
Property Overview
Name | Type | Summary | Class | |
---|---|---|---|---|
String | more details An authorization string used to access a resource or service. | more details | Directions | |
String|HTMLElement | more details The ID or node representing the DOM element containing the widget. | more details | Widget | |
String | more details The name of the class. | more details | Accessor | |
GoToOverride | more details This function provides the ability to override either the MapView goTo() or SceneView goTo() methods. | more details | Directions | |
Number | more details Indicates the heading level to use for the origin and destination addresses (i.e. | more details | Directions | |
String | more details The widget's default CSS icon class. | more details | Directions | |
String | more details The unique ID assigned to the widget when the widget is created. | more details | Widget | |
String | more details The widget's default label. | more details | Directions | |
RouteLayerSolveResult | more details The most recent route result. | more details | Directions | |
Number | more details The maximum number of stops allowed for routing. | more details | Directions | |
String | more details The URL of the REST endpoint of the Route service. | more details | Directions | |
SimpleLineSymbol | more details Defines the symbol used to draw the route on the map. | more details | Directions | |
SearchProperties | more details Controls the default properties used when searching. | more details | Directions | |
Object | more details The default stop symbols used to display locations between the origin and final destination. | more details | Directions | |
MapView|SceneView | more details The view from which the widget will operate. | more details | Directions | |
DirectionsViewModel | more details The view model for this widget. | more details | Directions | |
Boolean | more details Indicates whether the widget is visible. | more details | Widget |
Property Details
-
apiKey StringSince: ArcGIS API for JavaScript 4.19
-
An authorization string used to access a resource or service. API keys are generated and managed in the ArcGIS Developer dashboard. An API key is tied explicitly to an ArcGIS account; it is also used to monitor service usage. Setting a fine-grained API key on a specific class overrides the global API key.
By default, the following URLs will be used (unless overwritten in the app, or if using different defaults from a portal):
Geocoding URL:
https://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer
Routing URL:
https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World
Example:const directionsWidget = new Directions({ view: view, apiKey: "YOUR_API_KEY" }); // Add the Directions widget to the top right corner of the view view.ui.add(directionsWidget, { position: "top-right" });
-
-
The ID or node representing the DOM element containing the widget. This property can only be set once. The following examples are all valid use cases when working with widgets.
Examples:// Create the HTML div element programmatically at runtime and set to the widget's container const basemapGallery = new BasemapGallery({ view: view, container: document.createElement("div") }); // Add the widget to the top-right corner of the view view.ui.add(basemapGallery, { position: "top-right" });
// Specify an already-defined HTML div element in the widget's container const basemapGallery = new BasemapGallery({ view: view, container: basemapGalleryDiv }); // Add the widget to the top-right corner of the view view.ui.add(basemapGallery, { position: "top-right" }); // HTML markup <body> <div id="viewDiv"></div> <div id="basemapGalleryDiv"></div> </body>
// Specify the widget while adding to the view's UI const basemapGallery = new BasemapGallery({ view: view }); // Add the widget to the top-right corner of the view view.ui.add(basemapGallery, { position: "top-right" });
-
Since: ArcGIS API for JavaScript 4.7
-
The name of the class. The declared class name is formatted as
esri.folder.className
.
-
goToOverride GoToOverrideSince: ArcGIS API for JavaScript 4.8
-
This function provides the ability to override either the MapView goTo() or SceneView goTo() methods.
Example:// The following snippet uses the Search widget but can be applied to any // widgets that support the goToOverride property. search.goToOverride = function(view, goToParams) { goToParams.options.duration = updatedDuration; return view.goTo(goToParams.target, goToParams.options); };
-
headingLevel NumberSince: ArcGIS API for JavaScript 4.20
-
Indicates the heading level to use for the origin and destination addresses (i.e. "380 New York Street"). By default, this is rendered as a level 2 heading (e.g.
<h2>380 New York Street</h2>
). Depending on the widget's placement in your app, you may need to adjust this heading for proper semantics. This is important for meeting accessibility standards.- Default Value:2
- See also:
Example:// address text will render as an <h3> directions.headingLevel = 3;
-
iconClass StringSince: ArcGIS API for JavaScript 4.7
-
The widget's default CSS icon class.
-
The unique ID assigned to the widget when the widget is created. If not set by the developer, it will default to the container ID, or if that is not present then it will be automatically generated.
-
label StringSince: ArcGIS API for JavaScript 4.7
-
The widget's default label.
-
lastRoute RouteLayerSolveResultreadonly
-
The most recent route result. Returns a RouteLayerSolveResult object containing properties for barriers (if any), stops, and directions.
- Properties:
-
directionLines Collection<DirectionLine>
Collection of direction polylines associated with line segments between turns.
directionPoints Collection<DirectionPoint>Collection of direction items as points with various display information.
pointBarriers Collection<PointBarrier>Collection of point barriers.
polygonBarriers Collection<PolygonBarrier>Collection of polygon barriers.
polylineBarriers Collection<PolylineBarrier>Collection of polyline barriers.
routeInfo RouteInfoInformation about a solved route including the route's geometry and overall distance and time.
stops Collection<Stop>Collection of stops. Respresents the start, end, or midpoint of a route.
- Default Value:null
- See also:
-
maxStops Number
-
The maximum number of stops allowed for routing.
- Default Value:50
-
routeServiceUrl String
-
The URL of the REST endpoint of the Route service.
By default, the DirectionsViewModel will use the global routing serice (see config.routeServiceUrl).
If connected to a Portal you can use the route service advertised on the portal's helper services as demonstrated below.
- See also:
Examples:// Create Directions using the route service advertised on the portal const portal = Portal.getDefault(); const directions = new Directions({ routeServiceUrl: portal.helperServices.route.url, view: view });
// Create Directions using a defined route service with an apiKey const portal = Portal.getDefault(); const directions = new Directions({ apiKey: "YOUR_API_KEY", routeServiceUrl: "https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World", view: view });
-
routeSymbol SimpleLineSymbol
-
Defines the symbol used to draw the route on the map.
-
searchProperties SearchProperties
-
Controls the default properties used when searching. Note that the default
searchProperties
differ slightly from the Search widget.- Default Value:null
-
stopSymbols Object
-
The default stop symbols used to display locations between the origin and final destination.
-
The view from which the widget will operate.
-
viewModel DirectionsViewModelautocast
-
The view model for this widget. This is a class that contains all the logic (properties and methods) that controls this widget's behavior. See the DirectionsViewModel class to access all properties and methods on the widget.
-
Indicates whether the widget is visible.
If
false
, the widget will no longer be rendered in the web document. This may affect the layout of other elements or widgets in the document. For example, if this widget is the first of three widgets associated to the upper right hand corner of the view UI, then the other widgets will reposition when this widget is made invisible. For more information, refer to the CSS display value of"none"
.- Default Value:true
Example:// Hides the widget in the view widget.visible = false;
Method Overview
Name | Return Type | Summary | Class | |
---|---|---|---|---|
String | more details A utility method used for building the value for a widget's | more details | Widget | |
more details Destroys the widget instance. | more details | Widget | ||
Boolean | more details Emits an event on the instance. | more details | Widget | |
Promise<RouteLayerSolveResult> | more details Computes a route and directions. | more details | Directions | |
Boolean | more details Indicates whether there is an event listener on the instance that matches the provided event name. | more details | Widget | |
Boolean | more details
| more details | Widget | |
Boolean | more details
| more details | Widget | |
Boolean | more details
| more details | Widget | |
Object | more details Registers an event handler on the instance. | more details | Widget | |
more details Widget teardown helper. | more details | Widget | ||
more details This method is primarily used by developers when implementing custom widgets. | more details | Widget | ||
Object | more details This method is primarily used by developers when implementing custom widgets. | more details | Widget | |
more details Renders widget to the DOM immediately. | more details | Widget | ||
more details This method is primarily used by developers when implementing custom widgets. | more details | Widget | ||
Promise | more details
| more details | Widget | |
more details Zoom so that the full route is displayed within the current map extent. | more details | Directions |
Method Details
-
Since: ArcGIS API for JavaScript 4.7
-
A utility method used for building the value for a widget's
class
property. This aids in simplifying CSS class setup.Parameter:repeatable The class names.
Returns:Type Description String The computed class name. - See also:
Example:// .tsx syntax showing how to set CSS classes while rendering the widget render() { const dynamicIconClasses = { [CSS.myIcon]: this.showIcon, [CSS.greyIcon]: !this.showIcon }; return ( <div class={classes(CSS.root, CSS.mixin, dynamicIconClasses)} /> ); }
-
destroy()inherited
-
Destroys the widget instance.
-
Emits an event on the instance. This method should only be used when creating subclasses of this class.
Parameters:type StringThe name of the event.
event ObjectoptionalThe event payload.
Returns:Type Description Boolean true
if a listener was notified
-
getDirections(){Promise<RouteLayerSolveResult>}
-
Computes a route and directions. If successfully computed, results will be assigned to lastRoute returned. If a view is assigned, it will zoom to the extent of the route.
Returns:Type Description Promise<RouteLayerSolveResult> When resolved, returns a RouteLayerSolveResult.
-
Indicates whether there is an event listener on the instance that matches the provided event name.
Parameter:type StringThe name of the event.
Returns:Type Description Boolean Returns true if the class supports the input event.
-
Since: ArcGIS API for JavaScript 4.19
-
isFulfilled()
may be used to verify if creating an instance of the class is fulfilled (either resolved or rejected). If it is fulfilled,true
will be returned.Returns:Type Description Boolean Indicates whether creating an instance of the class has been fulfilled (either resolved or rejected).
-
Since: ArcGIS API for JavaScript 4.19
-
isRejected()
may be used to verify if creating an instance of the class is rejected. If it is rejected,true
will be returned.Returns:Type Description Boolean Indicates whether creating an instance of the class has been rejected.
-
Since: ArcGIS API for JavaScript 4.19
-
isResolved()
may be used to verify if creating an instance of the class is resolved. If it is resolved,true
will be returned.Returns:Type Description Boolean Indicates whether creating an instance of the class has been resolved.
-
Registers an event handler on the instance. Call this method to hook an event with a listener.
Parameters:An event or an array of events to listen for.
listener FunctionThe function to call when the event fires.
Returns:Type Description Object Returns an event handler with a remove()
method that should be called to stop listening for the event(s).Property Type Description remove Function When called, removes the listener from the event. Example:view.on("click", function(event){ // event is the event handle returned after the event fires. console.log(event.mapPoint); });
-
own(handles)inherited
-
Widget teardown helper. Any handles added to it will be automatically removed when the widget is destroyed.
Parameter:handles WatchHandle|WatchHandle[]Handles marked for removal once the widget is destroyed.
-
postInitialize()inherited
-
This method is primarily used by developers when implementing custom widgets. Executes after widget is ready for rendering.
-
This method is primarily used by developers when implementing custom widgets. It must be implemented by subclasses for rendering.
Returns:Type Description Object The rendered virtual node.
-
renderNow()inherited
-
Renders widget to the DOM immediately.
-
scheduleRender()inherited
-
This method is primarily used by developers when implementing custom widgets. Schedules widget rendering. This method is useful for changes affecting the UI.
-
Since: ArcGIS API for JavaScript 4.19
-
when()
may be leveraged once an instance of the class is created. This method takes two input parameters: acallback
function and anerrback
function. Thecallback
executes when the instance of the class loads. Theerrback
executes if the instance of the class fails to load.Parameters:callback FunctionoptionalThe function to call when the promise resolves.
errback FunctionoptionalThe function to execute when the promise fails.
Returns:Type Description Promise Returns a new promise for the result of callback
that may be used to chain additional functions.Example:// Although this example uses the BasemapGallery widget, any class instance that is a promise may use when() in the same way let bmGallery = new BasemapGallery(); bmGallery.when(function(){ // This function will execute once the promise is resolved }, function(error){ // This function will execute if the promise is rejected due to an error });
-
zoomToRoute()
-
Zoom so that the full route is displayed within the current map extent.
Type Definitions
-
SearchProperties
-
Configurable Search properties of the widget.
- Properties:
-
activeSourceIndex Number
Number index indicating the current selected source.
allPlaceholder StringString value used as a hint for input text when searching on multiple sources.
autoNavigate BooleanDefault Value:trueIndicates whether to automatically navigate to the selected result once selected.
autoSelect BooleanIndicates whether to automatically select and zoom to the first geocoded result.
optional Indicates whether or not to include defaultSources in the Search UI. This can be a boolean value or a function that returns an array of Search sources.
locationType StringDefine the type of location, either
"street"
or"rooftop"
. The default value will be"street"
for any locator source that does not define a locationType.maxResults NumberDefault Value:6Indicates the maximum number of search results to return.
maxSuggestions NumberDefault Value:6Indicates the maximum number of suggestions to return for the widget's input.
minSuggestCharacters NumberDefault Value:1Indicates the minimum number of characters required before querying for a suggestion.
popupEnabled BooleanDefault Value:falseIndicates whether to display a Popup when a selected result is clicked.
popupTemplate PopupTemplateA customized PopupTemplate for the selected feature.
resultGraphicEnabled BooleanDefault Value:falseIndicates whether to show a graphic on the map for the selected source.
searchAllEnabled BooleanIndicates whether to display the option to search all sources.
searchTerm StringThe value of the search box input text string.
sources Collection<(LayerSearchSource|LocatorSearchSource)>Specifies the sources to search in the view.
suggestionsEnabled BooleanDefault Value:trueIndicates whether to display suggestions as the user enters input text in the widget.
optional The view of the widget.
viewModel SearchViewModelThe Search widget's view model.