Learn how to access local data, such as spending trends, for the United States with the GeoEnrichment service .
The GeoEnrichment service provides detailed local data for specific countries. Each individual data field is represented by an analysis variable that are organized into data categories such as spending and market behaviors such as 2022 Educational Attainment
or 2022 Seen Video Ad at Gas Station Last 30 Days
. The data available vary by country and by data provider.
In this tutorial, you use ArcGIS REST JS to access the GeoEnrichment service and display spending trend information for a study area within the United States.
Prerequisites You need an ArcGIS Developer or ArcGIS Online account to access the developer dashboard and create an API key .
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 location services , you need an API key or OAuth 2.0 access token . To learn how to create and scope your key, visit the Create an API key tutorial.
Go to your dashboard to get an API key. The API key must be scoped to access the services used in this tutorial.
In CodePen , update api Key
to use your key.
Use dark colors for code blocks
Change line
1
2
3
4
5
6
7
8
9
10
11
const apiKey = "YOUR_API_KEY" ;
const basemapId = "arcgis/streets" ;
const basemapURL = `https://basemapstyles-api.arcgis.com/arcgis/rest/services/styles/v2/styles/ ${basemapId} ?token= ${apiKey} ` ;
olms.apply(map, basemapURL);
Add references to ArcGIS REST JS This tutorial uses ArcGIS REST JS to access the geoenrichment service. It also uses the ol-popup library to display pop-ups.
Reference the ArcGIS REST JS and ol-popup libraries.
Expand
Use dark colors for code blocks
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
117
118
119
120
121
< link rel = "stylesheet" href = "https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.15.1/css/ol.css" type = "text/css" />
< script src = "https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.15.1/build/ol.js" > </ script >
< script src = "https://cdn.jsdelivr.net/npm/ol-mapbox-style@10.5.0/dist/olms.js" type = "text/javascript" > </ script >
< script src = "https://unpkg.com/@esri/arcgis-rest-request@4.0.0/dist/bundled/request.umd.js" > </ script >
< script src = "https://unpkg.com/ol-popup@4.0.0" > </ script >
< link rel = "stylesheet" href = "https://unpkg.com/ol-popup@4.0.0/src/ol-popup.css" />
< script src = "https://unpkg.com/@esri/arcgis-rest-demographics@4.0.0/dist/bundled/demographics.umd.js" > </ script >
Update the map Update the center
parameter to [-86.7679, 36.1745]
and set zoom
to 12.
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
117
118
119
120
121
map.setView (
new ol.View ( {
center : ol.proj.fromLonLat ( [ - 86.7679 , 36.1745 ] ) ,
zoom : 12
} )
) ;
Update the basemap I d
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
117
118
119
120
121
const basemapId = "arcgis/navigation" ;
const basemapURL = ` https : //basemapstyles-api.arcgis.com/arcgis/rest/services/styles/v2/styles/ $ {basemapId } ?token = $ {apiKey } `;
olms.apply ( map, basemapURL ) .then ( function ( map ) {
Add a click event handler You need a location before calling the GeoEnrichment service . To get a location, you can add a handler to the Map
's click
event. The click handler will be called with an object containing a Coordinate
.
You can change the mouse cursor to a crosshair to make it easier to click precisely. Modify the CSS style of its canvas
element to do this.
In the <style>
, set the mouse cursor style to crosshair
.
Expand
Use dark colors for code blocks
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
117
118
119
120
121
< style >
html ,
body ,
#map {
padding : 0 ;
margin : 0 ;
height : 100% ;
width : 100% ;
font-family : Arial, Helvetica, sans-serif;
font-size : 14px ;
color : #323232 ;
}
#map canvas {
cursor : crosshair;
}
.ol-popup {
width : 250px ;
}
</ style >
Add a handler for the click
event. Inside, convert the click coordinate to a longitude and latitude and save it in a variable.
Expand
Use dark colors for code blocks
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
117
118
119
120
121
olms.apply(map, basemapURL).then( function ( map ) {
map.on( "click" , ( event ) => {
const lonLat = ol.proj.toLonLat(event.coordinate);
});
});
Execute the query You pass one or more study areas to arcgis Rest.query Demographic Data
to specify the location of your query. To query a circular buffer around a point, pass a geometry
object with x
and y
parameters. The default search radius is one mile.
Inside the click handler, create a new arcgis Rest.Api K e y Manager
to access the GeoEnrichment service. Call the service using query Demographic Data
. Set the study Areas
parameter to a point geometry made from the event's lng Lat
property.
In order to access ArcGIS location services with ArcGIS REST JS , you need an access token , either an API key or a token created by OAuth 2.0 authentication. API keys have scopes, so make sure to scope your API key with permissions to access the service.
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
117
118
119
120
121
map.on( "click" , ( event ) => {
const lonLat = ol.proj.toLonLat(event.coordinate);
const authentication = arcgisRest.ApiKeyManager.fromKey(apiKey);
arcgisRest
.queryDemographicData({
studyAreas : [{ geometry : { x : lonLat[ 0 ], y : lonLat[ 1 ] } }],
authentication : authentication,
})
});
Set the analysis Variables
parameter with the following analysis variables:
Buys Natural Products (Psychographics Shopping.MP28067A_ B
) Auto/Truck Rental on Trips (transportation.X7027_ I
) Membership fees for Social Clubs (entertainment.X9005_ I
) Tapestry group name (lifemodegroups NEW.TLIFENAME
) Expand
Use dark colors for code blocks
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
117
118
119
120
121
const authentication = arcgisRest.ApiKeyManager.fromKey(apiKey);
arcgisRest
.queryDemographicData({
studyAreas : [{ geometry : { x : lonLat[ 0 ], y : lonLat[ 1 ] } }],
authentication : authentication,
analysisVariables : [
"PsychographicsShopping.MP28067A_B" ,
"transportation.X7027_I" ,
"entertainment.X9005_I" ,
"lifemodegroupsNEW.TLIFENAME"
],
})
Display the results If the query is successful, the response will contain a results
array with a value containing a Feature Set
. The FeatureSet contains attributes such as population within the study area, the number of males and females, and the average household size. To learn more, visit the GeoEnrichment service page.
You will display the results of the query in a pop-up.
Before the click handler, create a Popup
and save it to a popup
variable. Add it to the map with map.add Overlay
.
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
117
118
119
120
121
const basemapId = "arcgis/navigation" ;
const basemapURL = `https://basemapstyles-api.arcgis.com/arcgis/rest/services/styles/v2/styles/ ${basemapId} ?token= ${apiKey} ` ;
olms.apply(map, basemapURL).then( function ( map ) {
const popup = new Popup();
map.addOverlay(popup);
Add a then
handler to the query Demographic Data
call. Inside, store the Feature Set
from the first result in a variable.
Expand
Use dark colors for code blocks
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
117
118
119
120
121
arcgisRest
.queryDemographicData({
studyAreas : [{ geometry : { x : lonLat[ 0 ], y : lonLat[ 1 ] } }],
authentication : authentication,
analysisVariables : [
"PsychographicsShopping.MP28067A_B" ,
"transportation.X7027_I" ,
"entertainment.X9005_I" ,
"lifemodegroupsNEW.TLIFENAME"
],
})
.then( ( response ) => {
const data = document .getElementById( "data" );
const featureSet = response.results[ 0 ].value.FeatureSet;
});
If the Feature Set
contains data, use its attributes to build a message to show. Use popup.show
to display the message at the location of the mouse click. Otherwise, display a "Data not available" message.
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
117
118
119
120
121
const data = document .getElementById( "data" );
const featureSet = response.results[ 0 ].value.FeatureSet;
let message;
if (featureSet.length > 0 && featureSet[ 0 ].features.length > 0 ) {
const attributes = featureSet[ 0 ].features[ 0 ].attributes;
message =
"<b>Data for a 1 mile search radius</b><br>" +
[
`Buys Natural Products: ${attributes.MP28067a_B} ` ,
`Membership fees for Social Clubs: ${attributes.X9005_I} ` ,
`Auto/Truck Rental on Trips: ${attributes.X7027_I} ` ,
`Tapestry group name: ${attributes.TLIFENAME} `
].join( "<br>" );
} else {
message = "Data not available for this location." ;
}
popup.show(event.coordinate, message);
Run the app In CodePen , run your code to display the map.
You should now see a map centered over Nashville. Click on the map to access the GeoEnrichment service to return local information and view the results in a popup.
What's next? Learn how to use additional ArcGIS location services in these tutorials: