Learn how to find an address near a location with the geocoding service .
Reverse geocoding is the process of converting a location to an address or place . To reverse geocode, you use the Geocoding service and the reverse Geocode
operation. This operation requires an initial location and returns an address with attributes such as place name and location.
In this tutorial, you use the reverse Geocode
method of ArcGIS REST JS to reverse geocode and find the closest address to your clicked location on the map.
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 This tutorial uses ArcGIS REST JS for reverse geocoding, and the ol-popup library to display pop-ups.
In the <head>
element, add references to the ArcGIS REST JS and ol-popup libraries.
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
< 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/@esri/arcgis-rest-geocoding@4.0.0/dist/bundled/geocoding.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" />
Update the map A navigation basemap layer is typically used in geocoding and routing applications. Update the basemap layer to use ArcGIS: Navigation
.
Update the basemap and the map initialization to center on location [2.3522,48.8566]
, Paris.
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
< script >
const apiKey = "YOUR_API_KEY" ;
const map = new ol.Map({
target : "map"
});
const view = new ol.View({
center : ol.proj.fromLonLat([ 2.3522 , 48.8566 ]), // Paris
zoom : 12
});
map.setView(view);
const basemapId = "ArcGIS:Navigation" ;
olms.apply(map, "https://basemaps-api.arcgis.com/arcgis/rest/services/styles/" + basemapId + "?type=style&token=" + apiKey);
</ script >
Add a pop-up Create a Popup
to display the results of the reverse geocode. It is a type of Overlay
so you add it to the map with map.add Overlay
.
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
const view = new ol.View({
center : ol.proj.fromLonLat([ 2.3522 , 48.8566 ]), // Paris
zoom : 12
});
map.setView(view);
const popup = new Popup();
map.addOverlay(popup);
Add click event handler Before you call the reverse geocoding service, you need the location of the clicked point. Use ol.proj.transform
to convert this into a latitude and longitude.
Add a click handler to the map. Inside, convert the clicked coordinates from the event object into latitude and longitude.
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
const popup = new Popup();
map.addOverlay(popup);
map.on( "click" , ( e ) => {
const coords = ol.proj.transform(e.coordinate, "EPSG:3857" , "EPSG:4326" );
});
Call reverse geocode service Use the ArcGIS REST JS reverse Geocode
method to find an address closest to a point.
Inside the click handler, create a new arcgis Rest.Api K e y Manager
to access the geocoding service. Call the arcgis Rest.reverse Geocode
method with the coordinates array.
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.
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
const coords = ol.proj.transform(e.coordinate, "EPSG:3857" , "EPSG:4326" );
const authentication = arcgisRest.ApiKeyManager.fromKey(apiKey);
arcgisRest
.reverseGeocode(coords, {
authentication
})
Display the result The response from the reverse Geocode
operation contains two properties. address
is a structured object with fields such as street name and business name. location
contains the location of the returned address, which may differ from the coordinates you provided. Display these values in a pop-up. Use a catch
handler to check for errors accessing the service.
Add a then
handler. Use popup.show
to display the resulting address and coordinates.
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
arcgisRest
.reverseGeocode(coords, {
authentication
})
.then( ( result ) => {
const message =
` ${result.address.LongLabel} <br>` + ` ${result.location.x.toLocaleString()} , ${result.location.y.toLocaleString()} ` ;
popup.show(e.coordinate, message);
})
Add a catch
handler. In most cases, errors occur when the user clicks in the water, so simply hide the pop-up when this happens. Use popup.hide()
to remove the pop-up and then write the error to the console.
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
popup.show(e.coordinate, message);
})
.catch( ( error ) => {
popup.hide();
console .error(error);
});
Run the app In CodePen , run your code to display the map.
Click on the map to reverse geocode the clicked point and display a pop-up with the closest address and coordinates.
What's next? Learn how to use additional ArcGIS location services in these tutorials: