Learn how to query global 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
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
<!-- 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.0.2/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 [18.88, 47.33]
and set the zoom level to 5. 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
const basemapEnum = "ArcGIS:Navigation" ;
const map = L.map( "map" , {
minZoom : 2
});
map.setView([ 47.33 , 18.88 ], 5 ); //Eastern Europe
L.esri.Vector.vectorBasemapLayer(basemapEnum, {
apiKey : apiKey
}).addTo(map);
Add a click handler When you click on the map, your application will display demographic 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
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
L.esri.Vector.vectorBasemapLayer(basemapEnum, {
apiKey : apiKey
}).addTo(map);
function getDemographicData ( latlng ) {
}
map.on( "click" , ( e ) => {
getDemographicData(e.latlng);
});
Get demographic data Use the query Demographic Data
operation to retrieve demographic data. To query a circular buffer around a point, pass a geometry
object with x and y parameters. 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
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 with an array containing a single geometry
object with longitude and latitude. Set the data Collections
parameter to to ["Key Global Facts"]
to obtain global data for your location.
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
function getDemographicData ( latlng ) {
arcgisRest
.queryDemographicData({
studyAreas : [{ geometry : { x : latlng.lng, y : latlng.lat } }],
dataCollections : [ "KeyGlobalFacts" ],
authentication : authentication
})
}
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.
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
function getDemographicData ( latlng ) {
arcgisRest
.queryDemographicData({
studyAreas : [{ geometry : { x : latlng.lng, y : latlng.lat } }],
dataCollections : [ "KeyGlobalFacts" ],
authentication : authentication
})
.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>Population: ${attributes.TOTPOP} <br>Males: ${attributes.TOTMALES} <br>Females: ${attributes.TOTFEMALES} <br>Average Household Size: ${attributes.AVGHHSZ} ` ;
} 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
.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>Population: ${attributes.TOTPOP} <br>Males: ${attributes.TOTMALES} <br>Females: ${attributes.TOTFEMALES} <br>Average Household Size: ${attributes.AVGHHSZ} ` ;
} 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 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: