Learn how to query demographic information for locations around the world with the GeoEnrichment service .
The GeoEnrichment service provides global demographic data for 170 countries and regions. To get globally available information, you use the Key Global Facts
data collection , which returns information for the total population, total households, average household size, and total population for males and females for a study area.
In this tutorial, you use ArcGIS REST JS to access the GeoEnrichment service and display global data for Eastern Europe.
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
const apiKey = "YOUR_API_KEY" ;
const basemapId = "ArcGIS:Streets" ;
const basemapURL = "https://basemaps-api.arcgis.com/arcgis/rest/services/styles/" + basemapId + "?type=style&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
< 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 The GeoEnrichment service has data sources for many countries around the world, including most of Europe. Update the position of the map to center on eastern Europe and the basemap I d
.
Update the center
parameter to [18.88, 47.33]
and set zoom
to 5.
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
map.setView (
new ol.View ( {
center : ol.proj.fromLonLat ( [ 18.88 , 47.33 ] ) ,
zoom : 5
} )
) ;
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
const basemapId = "ArcGIS:Navigation" ;
const basemapURL = "https://basemaps-api.arcgis.com/arcgis/rest/services/styles/" + basemapId + "?type=style&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.
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
< 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;
}
</ 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
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 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
and call query Demographic Data
. Set the study Areas
parameter to a point geometry made from the event's lng Lat
property. Set the data Collections
parameter to to ["Key Global Facts"]
to obtain global data for your location.
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
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 ] } }],
dataCollections : [ "KeyGlobalFacts" ],
authentication : authentication
})
});
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
const basemapId = "ArcGIS:Navigation" ;
const basemapURL = "https://basemaps-api.arcgis.com/arcgis/rest/services/styles/" + basemapId + "?type=style&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
arcgisRest
.queryDemographicData({
studyAreas : [{ geometry : { x : lonLat[ 0 ], y : lonLat[ 1 ] } }],
dataCollections : [ "KeyGlobalFacts" ],
authentication : authentication
})
.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
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>Population: ${attributes.TOTPOP} ` ,
`Males: ${attributes.TOTMALES} ` ,
`Females: ${attributes.TOTFEMALES} ` ,
`Average Household Size: ${attributes.AVGHHSZ} `
].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 eastern Europe. Click on the map to query for demographic data and view the results in a popup.
What's next? Learn how to use additional ArcGIS location services in these tutorials: