All tutorials

Using the what3words ArcGIS Locator within ArcGIS Pro

intermediate

The what3words ArcGIS Locator brings the functionality of the what3words API to the ArcGIS platform. You can use the Locator throughout the ArcGIS product suite wherever a custom locator can be added. This includes ArcGIS Desktop – ArcCatalog and ArcMap as well as ArcGIS Pro.

This tutorial goes through the different steps to use each of the tools ArcGIS Pro provides to search for 3 word address, discover 3 word address and carry out batch conversions.

You will need a what3words API key to complete this tutorial.

2

Add the what3words Locator to ArcGIS Online

ArcGIS Pro automatically loads all locators that you have added to your ArcGIS Online account. First the what3words ArcGIS Locator must be added to your ArcGIS Online account following the steps in our tutorial.

3

Search for 3 word addresses

Click on the Map tab on the ArcGIS Ribbon. The Locate button will then be available to search for locations.

If you click on the button next to the search you will be able to see the locators available – the what3words Locator should be present.

You can then search for a 3 word address in the input field.

Suggestions for the 3 word address using our AutoSuggest functionality will appear after you begin typing the third word.

Click a result to zoom to the 3 word address.

4

Discovering 3 word addresses

Right click on the map and click on the What’s Here? option. This will then display all addresses from the available locators.

Select the what3words result to view the 3 word address and coordinates.

5

Geocoding Tools

The what3words Locator can be used in any of the geocoding geoprocessing tools you have access to that accept a custom locator.

Click on the Analysis tab on the ArcGIS ribbon and the Tools button which will open the geoprocessing panel.

Search for geocode to bring back geocoding tools.

Geocode 3 word addresses

In order to geocode a layer of 3 word addresses (convert to coordinates from our API) the Geocode Addresses processing tool can be used.

You will need to specify the point layer to be used, the what3words Locator, the single field option and specify the field that the 3 word addresses lie within.

Reverse geocode a layer of points to obtain 3 word addresses

In order to reverse geocode a layer of points you can use the reverse geocode tool (convert to 3 word address from our API). You will need to specify the layer to find 3 word addresses for and the what3words Locator.

Note that the output of the Reverse Geocode tool is the points (ie. geometry) of the 3 word address and not the points of your original dataset.

Therefore we recommend doing the following to create a populated what3words column on your original dataset:

  1. Use the Reverse Geocode tool to create a new layer of the 3 word address points for your source layer.
  2. Add a “what3words” field to your original (source) layer.
  3. Run the following python script in the Python window (View > Python Window) changing the variables at the start to your layers, the what3words field you have added, and the join field (ie your unique ID field)

Alternatively, you can manually do the same process as the python script does by:

  1. Joining the new geocoded layer to the source layer joining on a unique ID.
  2. Update the what3words field using the field calculator taking the 3 word address from the new layer.
# Your original feature class
sourceFc = r"C:/Data/MyProject7.gdb/sourceLayer"
# Reverse Geocode what3words output
geocodeFc = r"C:/Data/MyProject7.gdb/sourceLayer_ReverseGeocode"

# ID Field (to join)
idFld = "ID"

# The what3words layer you have added
w3wFld = "what3words"
# The 3 word address field (This is the field added by reverse geocode tool so doesn't need changing)
reverseFld = "REV_Match_addr"

import arcpy

# dictionary
valueDi = dict ([(key, val) for key, val in
                 arcpy.da.SearchCursor
                 (geocodeFc, [idFld, reverseFld])])

#update what3words field in your layer
with arcpy.da.UpdateCursor (sourceFc, [w3wFld, idFld]) as cursor:
    for update, key in cursor:
        if not key in valueDi:
            continue
        row = (valueDi [key], key)

        cursor.updateRow (row)

del cursor
Copied

Related tutorials

Back to top