I have been trying to create a locator using ArcPy, but am constantly getting the following error:
Failed to execute. Parameters are not valid.
ERROR 002815: A table is required for each role.
Failed to execute (CreateLocator)
The code I'm using is copied directly from the geoprocessing history tab in the Catalog pane after creating the locator manually via ArcGIS Pro, via right-clicking on the tool result and selecting copy as Python command.
For demonstration purposes, I've hardcoded the layers for ease of readability (and to help troubleshoot). Code is as follows:
import arcpy
import os
project_dir = r"path\to\GeocodingProject"
project_name = "GeocodingProject"
aprx = arcpy.mp.ArcGISProject(os.path.join(project_dir, f"{project_name}.aprx"))
map = aprx.listMaps()[0]
try:
# Create Locator
country_code = 'USA'
language_code = "ENG"
precision_type = "GLOBAL_HIGH"
out_locator = os.path.join(project_dir, f"geocoding_locator_state_11")
primary_reference_data = "tl_2024_11_addrfeat_featnames StreetAddress"
field_mapping = [
f"StreetAddress.FEATURE_ID 'tl_2024_11_addrfeat_featnames.shp'.FID",\
f"StreetAddress.HOUSE_NUMBER_FROM_LEFT 'tl_2024_11_addrfeat_featnames.shp'.LFROMHN",\
f"StreetAddress.HOUSE_NUMBER_TO_LEFT 'tl_2024_11_addrfeat_featnames.shp'.LTOHN",\
f"StreetAddress.HOUSE_NUMBER_FROM_RIGHT 'tl_2024_11_addrfeat_featnames.shp'.RFROMHN",\
f"StreetAddress.HOUSE_NUMBER_TO_RIGHT 'tl_2024_11_addrfeat_featnames.shp'.RTOHN",\
f"StreetAddress.PARITY_LEFT 'tl_2024_11_addrfeat_featnames.shp'.PARITYL",\
f"StreetAddress.PARITY_RIGHT 'tl_2024_11_addrfeat_featnames.shp'.PARITYR",\
f"StreetAddress.STREET_PREFIX_DIR 'tl_2024_11_addrfeat_featnames.shp'.PREDIR",\
f"StreetAddress.STREET_PREFIX_TYPE 'tl_2024_11_addrfeat_featnames.shp'.PRETYP",\
f"StreetAddress.STREET_NAME 'tl_2024_11_addrfeat_featnames.shp'.NAME",\
f"StreetAddress.STREET_SUFFIX_TYPE 'tl_2024_11_addrfeat_featnames.shp'.SUFTYP",\
f"StreetAddress.STREET_SUFFIX_DIR 'tl_2024_11_addrfeat_featnames.shp'.SUFDIR",\
f"StreetAddress.FULL_STREET_NAME 'tl_2024_11_addrfeat_featnames.shp'.FULLNAME",\
f"StreetAddress.POSTAL_LEFT 'tl_2024_11_addrfeat_featnames.shp'.ZIPL",\
f"StreetAddress.POSTAL_RIGHT 'tl_2024_11_addrfeat_featnames.shp'.ZIPR",\
f"StreetAddress.POSTAL_EXT_LEFT 'tl_2024_11_addrfeat_featnames.shp'.PLUS4L",\
f"StreetAddress.POSTAL_EXT_RIGHT 'tl_2024_11_addrfeat_featnames.shp'.PLUS4R"
]
arcpy.geocoding.CreateLocator(
country_code=country_code,
primary_reference_data=primary_reference_data,
field_mapping=field_mapping,
out_locator=out_locator,
language_code=language_code,
alternatename_tables=None,
alternate_field_mapping=None,
custom_output_fields=None,
precision_type="GLOBAL_HIGH"
)
print("Locator created successfully.")
aprx.save()
except Exception as e:
print(f"Error creating locator: {e}")