In this tutorial you will learn how to find an address or place
Geocoding is the process of converting address or placeSearch component to access the Geocoding service and perform interactive searches.
Prerequisites
Steps
Create a new pen
To get started, either complete the Display a map tutorial or
Get an access token
You need an access token
- Go to the Create an API key tutorial and create an API key
An API key is a long-lived access token created using API key credentials. They are valid for up to one year and are typically embedded directly into client applications. with the following privilege(s)Privileges are a set of permissions assigned to ArcGIS accounts, developer credentials, and applications that grant access to secure resources and functionality in ArcGIS. :
- Privileges
- Location services > Basemaps
- Privileges
- In CodePen, set the
apiKeyproperty on the globalesriConfigvariable to your access token.<!-- The esriConfig variable must be defined before adding the other esri libraries --><script>var esriConfig = {apiKey: "YOUR_ACCESS_TOKEN",};</script>
To learn about other ways to get an access token, go to Types of authentication.
Add Search component
The Search component allows you to interactively search for addresses and places. It provides suggestions as you type and allows you to select a result. When you select a result, it zooms to a location and displays a pop-up
-
Inside the
<arcgis-map>component, add the<arcgis-search>component and specify where you want to position it using theslotattribute.29 collapsed lines<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><title>ArcGIS Maps SDK for JavaScript Tutorials: Search for an address</title><style>html,body {height: 100%;margin: 0;}</style><script>var esriConfig = {apiKey: "YOUR_ACCESS_TOKEN",};</script><!-- Load the ArcGIS Maps SDK for JavaScript from CDN --><script type="module" src="https://js.arcgis.com/5.0/"></script></head><body><arcgis-map basemap="arcgis/community" center="-118.49178, 34.01185" zoom="15"><arcgis-zoom slot="top-left"></arcgis-zoom><arcgis-search slot="top-right"></arcgis-search></arcgis-map>50 collapsed lines<script type="module">const locator = await $arcgis.import("@arcgis/core/rest/locator.js");// Get a reference to the map componentconst viewElement = document.querySelector("arcgis-map");// Wait for when the component is readyawait viewElement.viewOnReady();const serviceUrl = "http://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer";viewElement.addEventListener("arcgisViewClick", (event) => {const params = {location: event.detail.mapPoint,};locator.locationToAddress(serviceUrl, params).then((response) => {// Show the addressconst address = response.address;showAddress(address, event.detail.mapPoint);},(error) => {// Show no address foundshowAddress("No address found.", event.detail.mapPoint);},);});function showAddress(address, point) {viewElement.openPopup({title:+ Math.round(point.longitude * 100000) / 100000 +", " +Math.round(point.latitude * 100000) / 100000,content: address,location: point,});}</script></body></html>
Add modules and reference map component
- Use
$arcgis.import()to add thelocatormodule to the app. This module provides helper functions for working with geocoding.
37 collapsed lines
<html>
<head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <title>ArcGIS Maps SDK for JavaScript Tutorials: Search for an address</title>
<style> html, body { height: 100%; margin: 0; } </style>
<script> var esriConfig = { apiKey: "YOUR_ACCESS_TOKEN", }; </script>
<!-- Load the ArcGIS Maps SDK for JavaScript from CDN --> <script type="module" src="https://js.arcgis.com/5.0/"></script>
</head>
<body>
<arcgis-map basemap="arcgis/community" center="-118.49178, 34.01185" zoom="15">
<arcgis-zoom slot="top-left"></arcgis-zoom>
<arcgis-search slot="top-right"></arcgis-search>
</arcgis-map>
<script type="module">
const locator = await $arcgis.import("@arcgis/core/rest/locator.js");
// Get a reference to the map component const viewElement = document.querySelector("arcgis-map");
// Wait for when the component is ready await viewElement.viewOnReady();
</script>5 collapsed lines
</body>
</html>Add the geocoding service URL
Use the locator module to access the Geocoding servicereverseGeocode operation.
- Define a variable,
serviceUrl, then add a reference to the Geocoding serviceA geocoding service is a service that can search for addresses, place addresses, businesses, reverse geocode coordinates to addresses, provide suggestions for places, and perform bulk geocoding. It is hosted by Esri as the ArcGIS Geocoding service and can also be hosted in ArcGIS Enterprise. URL.48 collapsed lines<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><title>ArcGIS Maps SDK for JavaScript Tutorials: Search for an address</title><style>html,body {height: 100%;margin: 0;}</style><script>var esriConfig = {apiKey: "YOUR_ACCESS_TOKEN",};</script><!-- Load the ArcGIS Maps SDK for JavaScript from CDN --><script type="module" src="https://js.arcgis.com/5.0/"></script></head><body><arcgis-map basemap="arcgis/community" center="-118.49178, 34.01185" zoom="15"><arcgis-zoom slot="top-left"></arcgis-zoom><arcgis-search slot="top-right"></arcgis-search></arcgis-map><script type="module">const locator = await $arcgis.import("@arcgis/core/rest/locator.js");// Get a reference to the map componentconst viewElement = document.querySelector("arcgis-map");// Wait for when the component is readyawait viewElement.viewOnReady();const serviceUrl = "http://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer";37 collapsed linesviewElement.addEventListener("arcgisViewClick", (event) => {const params = {location: event.detail.mapPoint,};locator.locationToAddress(serviceUrl, params).then((response) => {// Show the addressconst address = response.address;showAddress(address, event.detail.mapPoint);},(error) => {// Show no address foundshowAddress("No address found.", event.detail.mapPoint);},);});function showAddress(address, point) {viewElement.openPopup({title:+ Math.round(point.longitude * 100000) / 100000 +", " +Math.round(point.latitude * 100000) / 100000,content: address,location: point,});}</script></body></html>
Reverse geocode
Use an event listener to capture a click location on the map and then call the Geocoding service
-
Add an
arcgisViewClickevent handler to the map component. Inside the callback, define an object namedparams. Assign to it a key namedlocationand set they key’s value toevt.detail.mapPoint.48 collapsed lines<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><title>ArcGIS Maps SDK for JavaScript Tutorials: Search for an address</title><style>html,body {height: 100%;margin: 0;}</style><script>var esriConfig = {apiKey: "YOUR_ACCESS_TOKEN",};</script><!-- Load the ArcGIS Maps SDK for JavaScript from CDN --><script type="module" src="https://js.arcgis.com/5.0/"></script></head><body><arcgis-map basemap="arcgis/community" center="-118.49178, 34.01185" zoom="15"><arcgis-zoom slot="top-left"></arcgis-zoom><arcgis-search slot="top-right"></arcgis-search></arcgis-map><script type="module">const locator = await $arcgis.import("@arcgis/core/rest/locator.js");// Get a reference to the map componentconst viewElement = document.querySelector("arcgis-map");// Wait for when the component is readyawait viewElement.viewOnReady();const serviceUrl = "http://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer";viewElement.addEventListener("arcgisViewClick", (event) => {const params = {location: event.detail.mapPoint,};});7 collapsed lines</script></body></html> -
Create a
showAddressfunction to display coordinates and the corresponding address within a pop-upA pop-up is a visual element used to display data for features or graphics in a map. .50 collapsed lines<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><title>ArcGIS Maps SDK for JavaScript Tutorials: Search for an address</title><style>html,body {height: 100%;margin: 0;}</style><script>var esriConfig = {apiKey: "YOUR_ACCESS_TOKEN",};</script><!-- Load the ArcGIS Maps SDK for JavaScript from CDN --><script type="module" src="https://js.arcgis.com/5.0/"></script></head><body><arcgis-map basemap="arcgis/community" center="-118.49178, 34.01185" zoom="15"><arcgis-zoom slot="top-left"></arcgis-zoom><arcgis-search slot="top-right"></arcgis-search></arcgis-map><script type="module">const locator = await $arcgis.import("@arcgis/core/rest/locator.js");// Get a reference to the map componentconst viewElement = document.querySelector("arcgis-map");// Wait for when the component is readyawait viewElement.viewOnReady();const serviceUrl = "http://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer";function showAddress(address, point) {viewElement.openPopup({title:+ Math.round(point.longitude * 100000) / 100000 +", " +Math.round(point.latitude * 100000) / 100000,content: address,location: point,});}7 collapsed lines</script></body></html> -
Reverse geocode
Reverse geocoding is the process of converting a point to its nearest address or place. the point that is created by click on the map. Add a call to the locator’slocationToAddressfunction. Use theshowAddressfunction to display a pop-upA pop-up is a visual element used to display data for features or graphics in a map. with the results.50 collapsed lines<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><title>ArcGIS Maps SDK for JavaScript Tutorials: Search for an address</title><style>html,body {height: 100%;margin: 0;}</style><script>var esriConfig = {apiKey: "YOUR_ACCESS_TOKEN",};</script><!-- Load the ArcGIS Maps SDK for JavaScript from CDN --><script type="module" src="https://js.arcgis.com/5.0/"></script></head><body><arcgis-map basemap="arcgis/community" center="-118.49178, 34.01185" zoom="15"><arcgis-zoom slot="top-left"></arcgis-zoom><arcgis-search slot="top-right"></arcgis-search></arcgis-map><script type="module">const locator = await $arcgis.import("@arcgis/core/rest/locator.js");// Get a reference to the map componentconst viewElement = document.querySelector("arcgis-map");// Wait for when the component is readyawait viewElement.viewOnReady();const serviceUrl = "http://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer";viewElement.addEventListener("arcgisViewClick", (event) => {const params = {location: event.detail.mapPoint,};locator.locationToAddress(serviceUrl, params).then((response) => {// Show the addressconst address = response.address;showAddress(address, event.detail.mapPoint);},(error) => {// Show no address foundshowAddress("No address found.", event.detail.mapPoint);},);});18 collapsed linesfunction showAddress(address, point) {viewElement.openPopup({title:+ Math.round(point.longitude * 100000) / 100000 +", " +Math.round(point.latitude * 100000) / 100000,content: address,location: point,});}</script></body></html>
Run the app
In CodePen, run your code to display the map.
Try searching for the following locations: - Seattle - Space Needle - Hollywood Blvd - 34.13419, -118.29636.
The map should display a Search component that allows you to interactively search for addresses and places
What’s next?
Learn how to use additional SDK features and ArcGIS services in these tutorials:
- Learn more about geocoding