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
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
const map = L.map( "map" , {
minZoom : 2
})
map.setView([ 34.02 , - 118.805 ], 13 );
const apiKey = "YOUR_API_KEY" ;
const basemapEnum = "arcgis/streets" ;
L.esri.Vector.vectorBasemapLayer(basemapEnum, {
apiKey : apiKey
}).addTo(map);
Add references to ArcGIS REST JS Reference the demographics
and request
modules from ArcGIS REST JS.
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
<!-- Load Leaflet from CDN -->
< link rel = "stylesheet" href = "https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" crossorigin = "" />
< script src = "https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" crossorigin = "" > </ script >
<!-- Load Esri Leaflet from CDN -->
< script src = "https://unpkg.com/esri-leaflet@3.0.10/dist/esri-leaflet.js" > </ script >
< script src = "https://unpkg.com/esri-leaflet-vector@4.1.0/dist/esri-leaflet-vector.js" > </ script >
<!-- Load ArcGIS REST JS libraries from https://unpkg.com -->
< script src = "https://unpkg.com/@esri/arcgis-rest-request@4.0.0/dist/bundled/request.umd.js" > </ script >
< script src = "https://unpkg.com/@esri/arcgis-rest-demographics@4.0.0/dist/bundled/demographics.umd.js" > </ script >
Update the map Center the map on [-86.7679, 36.1745]
and set the zoom level to 12. Change the basemap Enum
to arcgis/navigation
.
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
const basemapEnum = "argcis/navigation" ;
const map = L.map( "map" , {
minZoom : 2
});
map.setView([ 36.1745 , - 86.7679 ], 12 ); //Nashville, TN
L.esri.Vector.vectorBasemapLayer(basemapEnum, {
apiKey : apiKey
}).addTo(map);
Add a click handler When you click on the map, your application will display local data for the area near the clicked location. Use a click
handler to retrieve the coordinates of the click.
Create a function called get Demographic Data
that takes the latlng
coordinates as a parameter.
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
L.esri.Vector.vectorBasemapLayer(basemapEnum, {
apiKey : apiKey
}).addTo(map);
function getDemographicData ( latlng ) {
}
Add a click
event handler. Inside, call get Demographic Data
with the Lat Lng
of the clicked location.
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
L.esri.Vector.vectorBasemapLayer(basemapEnum, {
apiKey : apiKey
}).addTo(map);
function getDemographicData ( latlng ) {
}
map.on( "click" , ( e ) => {
getDemographicData(e.latlng);
});
Execute the query Use the query Demographic Data
operation to retrieve local data. To query a circular buffer around a point, pass a geometry
object with x
and y
coordinates The default search radius is one mile.
Create a new Api K e y Manager
using your API key .
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.
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
L.esri.Vector.vectorBasemapLayer(basemapEnum, {
apiKey : apiKey
}).addTo(map);
const authentication = arcgisRest.ApiKeyManager.fromKey(apiKey);
function getDemographicData ( latlng ) {
}
Access the GeoEnrichment service with query Demographic Data
. Set the study Areas
parameter to a point geometry made from the event's lng Lat
property. Also pass the authentication
object.
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
function getDemographicData ( latlng ) {
arcgisRest
.queryDemographicData({
studyAreas : [{ geometry : { x : latlng.lng, y : latlng.lat } }],
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
arcgisRest
.queryDemographicData({
studyAreas : [{ geometry : { x : latlng.lng, y : latlng.lat } }],
authentication : authentication,
analysisVariables : [
"PsychographicsShopping.MP28067A_B" ,
"transportation.X7027_I" ,
"entertainment.X9005_I" ,
"lifemodegroupsNEW.TLIFENAME"
],
})
Display results If the query is successful, the response will contain a results
array with a value containing a Feature Set
. The Feature Set
contains demographic attributes such as population within the study area, the number of males and females, and the average household size.
A message will display if there is no data available for a location selected. To learn more, go to the GeoEnrichment page in the Mapping APIs and location services guide.
You can use a Popup
to show the results of the query at the location where you clicked on the map.
More info To learn more about using pop-ups with Esri Leaflet, go to the Display a popup tutorial.
Access the response Feature Set
in a callback function and check to see if it contains data. If data was returned, access the feature attributes to retrieve demographic information.
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. 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
function getDemographicData ( latlng ) {
arcgisRest
.queryDemographicData({
studyAreas : [{ geometry : { x : latlng.lng, y : latlng.lat } }],
authentication : authentication,
analysisVariables : [
"PsychographicsShopping.MP28067A_B" ,
"transportation.X7027_I" ,
"entertainment.X9005_I" ,
"lifemodegroupsNEW.TLIFENAME"
],
})
.then( ( response ) => {
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." ;
}
});
}
Display a Popup
at the clicked location containing the demographic information.
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
.then( ( response ) => {
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." ;
}
var popup = L.popup().setLatLng(latlng).setContent(message).openOn(map);
});
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: