Learn how to calculate the area that can be reached in a given drive time from a location .
A service area , also known as an isochrone, is a polygon that represents the area that can be reached when driving or walking on a street network . The area that can be reached is restricted by either time or distance. To calculate service areas, you can use the Service area service . You provide a start location (facilities), one or more time or distance values, and a spatial reference . Once processed, the service returns the service areas that can be reached.
In this tutorial, you create and display five, ten, and fifteen minute drive time service areas when the map is clicked.
To learn how to find a route and directions to different locations, visit the Get a route and directions tutorial.
Prerequisites You need a free ArcGIS developer account to access your dashboard and API keys . The API key must be scoped to access the services used in this tutorial.
Steps Create a new pen To get started, either complete the Display a map tutorial or use this pen . Set the API key To access ArcGIS services , you need an API key .
Go to your dashboard to get an API key .
In CodePen , set the api Key
to your key, so it can be used to access basemap layer and location services.
Use dark colors for code blocks
Change line
1
2
3
4
esriConfig.apiKey = "YOUR_API_KEY" ;
const map = new Map ({
basemap : "arcgis-topographic" // Basemap layer service
});
Add modules In the require
statement, add the service Area
, Service Area Parameters
, Feature Set
, and Graphic
modules.
More info The ArcGIS Maps SDK for JavaScript is available as AMD modules and ES modules , but this tutorial is based on AMD. The AMD require
function uses references to determine which modules will be loaded – for example, you can specify "esri/Map"
for loading the Map module. After the modules are loaded, they are passed as parameters (e.g. Map
) to the callback function where they can be used in your application. It is important to keep the module references and callback parameters in the same order. For more information on the different types of modules, visit the Introduction to Tooling guide topic.
Expand
Use dark colors for code blocks
Add line. Add line. Add line. Add line. Change line
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
require([
"esri/config",
"esri/Map",
"esri/views/MapView",
"esri/rest/serviceArea",
"esri/rest/support/ServiceAreaParameters",
"esri/rest/support/FeatureSet",
"esri/Graphic"
], function(esriConfig, Map, MapView, serviceArea, ServiceAreaParams, FeatureSet, Graphic) {
Update the map A streets basemap layer is typically used in routing applications. Update the basemap
property to use the arcgis-navigation
basemap layer and change the position of the map to center on Osaka.
Update the basemap
property from arcgis-topographic
to arcgis-navigation
.
Expand
Use dark colors for code blocks
Change line
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
esriConfig.apiKey = "YOUR_API_KEY" ;
const map = new Map ({
basemap : "arcgis-navigation"
});
Change the zoom
and center
properties to center on Osaka.
Expand
Use dark colors for code blocks
Change line Change line
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
esriConfig.apiKey = "YOUR_API_KEY" ;
const map = new Map ({
basemap : "arcgis-navigation"
});
const view = new MapView({
container : "viewDiv" ,
map : map,
center : [ 135.5023 , 34.6937 ], //Longitude, latitude
zoom : 11
});
Define the service url The service Area
module makes a request to a service and returns the results. Use the service Area
class to access the Service area service .
Define a property, service Area Url
, to reference the service url.
Expand
Use dark colors for code blocks
Add line.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
const view = new MapView({
container : "viewDiv" ,
map : map,
center : [ 135.5023 , 34.6937 ], //Longitude, latitude
zoom : 11
});
const serviceAreaUrl = "https://route-api.arcgis.com/arcgis/rest/services/World/ServiceAreas/NAServer/ServiceArea_World/solveServiceArea" ;
Add a point graphic Use a point graphic to display the location (facility) for the service area starting point.
Add a click
handler to add a point graphic to the view
.
Expand
Use dark colors for code blocks
Add line. Add line. Add line.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
const serviceAreaUrl = "https://route-api.arcgis.com/arcgis/rest/services/World/ServiceAreas/NAServer/ServiceArea_World/solveServiceArea" ;
view.on( "click" , function ( event ) {
});
Create a create Graphic
function that takes a point as a parameter and returns a white Graphic
. It should remove all graphics each time.
Expand
Use dark colors for code blocks
Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// Create the location graphic
function createGraphic ( point ) {
view.graphics.removeAll();
const graphic = new Graphic({
geometry : point,
symbol : {
type : "simple-marker" ,
color : "white" ,
size : 8
}
});
view.graphics.add(graphic);
return graphic;
}
Update the click
handler to call the create Graphic
function and store the graphic in location Graphic
.
Expand
Use dark colors for code blocks
Add line.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
view.on( "click" , function ( event ) {
const locationGraphic = createGraphic(event.mapPoint);
});
Click on the map to see a point graphic .
Create service area parameters A service Area
uses drive times (cutoffs) and spatial reference parameters to calculate the service area . It also uses a Feature Set
to set the facilities
(location) from where the service area polygon will be drawn. Use a click
handler in the View
to set the parameters required to create the service area.
Create a create Service Area Params
function that takes point graphic , drive time, and spatial reference parameters.
Expand
Use dark colors for code blocks
Add line. Add line. Add line.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
view.graphics.add(graphic);
return graphic;
}
function createServiceAreaParams ( locationGraphic, driveTimeCutoffs, outSpatialReference ) {
}
Create a Feature Set
to set the features
property with the point graphic .
Expand
Use dark colors for code blocks
Add line. Add line. Add line. Add line.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
function createServiceAreaParams ( locationGraphic, driveTimeCutoffs, outSpatialReference ) {
// Create one or more locations (facilities) to solve for
const featureSet = new FeatureSet({
features : [locationGraphic]
});
}
Create a Service Area Params
and return the task Parameters
element.
Expand
Use dark colors for code blocks
Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
function createServiceAreaParams ( locationGraphic, driveTimeCutoffs, outSpatialReference ) {
// Create one or more locations (facilities) to solve for
const featureSet = new FeatureSet({
features : [locationGraphic]
});
// Set all of the input parameters for the service
const taskParameters = new ServiceAreaParams({
facilities : featureSet,
defaultBreaks : driveTimeCutoffs,
trimOuterPolygon : true ,
outSpatialReference : outSpatialReference
});
return taskParameters;
}
Update the click handler to add drive time cutoffs of 5, 10, and 15 minutes and to call the create Service Area Params
function.
Expand
Use dark colors for code blocks
Add line. Add line.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
view.on( "click" , function ( event ) {
const locationGraphic = createGraphic(event.mapPoint);
const driveTimeCutoffs = [ 5 , 10 , 15 ]; // Minutes
const serviceAreaParams = createServiceAreaParams(locationGraphic, driveTimeCutoffs, view.spatialReference);
});
Solve the service area To solve the service area, pass the service Area Params
to the solve
method. Use a solve Service Area
function to find the service area polygon and add the resulting graphic to the view
.
Create a solve Service Area
function.
Expand
Use dark colors for code blocks
Add line. Add line. Add line.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// Set all of the input parameters for the service
const taskParameters = new ServiceAreaParams({
facilities : featureSet,
defaultBreaks : driveTimeCutoffs,
trimOuterPolygon : true ,
outSpatialReference : outSpatialReference
});
return taskParameters;
}
function solveServiceArea ( url, serviceAreaParams ) {
}
Call the solve
method to find the service area and add the results to the view
.
Expand
Use dark colors for code blocks
Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line. Add line.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
function solveServiceArea ( url, serviceAreaParams ) {
return serviceArea.solve(url, serviceAreaParams)
.then( function ( result ) {
if (result.serviceAreaPolygons.features.length) {
// Draw each service area polygon
result.serviceAreaPolygons.features.forEach( function ( graphic ) {
graphic.symbol = {
type : "simple-fill" ,
color : "rgba(255,50,50,.25)"
}
view.graphics.add(graphic, 0 );
});
}
}, function ( error ) {
console .log(error);
});
}
Update the click
handler to call the solve Service Area
function.
Expand
Use dark colors for code blocks
Add line.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
view.on( "click" , function ( event ) {
const locationGraphic = createGraphic(event.mapPoint);
const driveTimeCutoffs = [ 5 , 10 , 15 ]; // Minutes
const serviceAreaParams = createServiceAreaParams(locationGraphic, driveTimeCutoffs, view.spatialReference);
solveServiceArea(serviceAreaUrl, serviceAreaParams);
});
Run the app In CodePen , run your code to display the map.
Click on the map to create service areas. When you click on the map, you will see a point graphic along with drive time service areas. The service areas represent the area that can be reached within 5, 10, and 15 minutes.
What's next? Learn how to use additional API features and
ArcGIS services in these tutorials: