Building a composite address locator
Complete the following steps to build composite address locators:
- Create individual address locators.
- Determine the input address fields for the composite locator. These are the fields to which the individual locators are mapped to find an address.
- Specify the input field mapping of each locator's input address fields to the input address fields of the composite address locator.
- Specify the selection criteria for the individual address locator if you want to specify the locator that is used for a particular address based on the criteria (optional).
- Specify where to store the output composite address locator.
Using geoprocessing to create a composite address locator
Use geoprocessing to create a composite address locator. See the following code example:
[C#]
public void CreateCompositeAddressLocatorTool()
{
Geoprocessor GP = new Geoprocessor();
CreateCompositeAddressLocator createCompositeAddressLocator = new
CreateCompositeAddressLocator();
String locator1Path = @"C:\California.gdb\California_city_state_zip_94";
String locator1Name = "cal_locator";
String locator2Path = @"C:\California.gdb\rialto_locator_94";
String locator2Name = "rialto_locator";
// You need a semicolon between each locator.
createCompositeAddressLocator.in_address_locators = locator1Path + " " +
locator1Name + ";" + locator2Path + " " + locator2Name;
/********** ADDRESS Field Mapping **********/
// The field that the locator fields will be mapped to.
// Syntax('*' means 'use as is') = fieldName(no spaces) 'alias name' *true *true isRequiredField fieldSize *Text *0 *0.
String mappedAddressField =
"Address 'Street or Intersection' true true false 100 Text 0 0";
// Syntax('*' means 'use as is') = locatorPath,locatorFieldName,*0,*0.
String mappedLocator1AddressField = locator1Path + ",Address,0,0";
String mappedLocator2AddressField = locator2Path + ",Address,0,0";
// Syntax('*' means 'use as is') = mappedField(See Above) ,*First,*#,mappedLocator1Field(See Above),mappedLocator2Field(See Above).
String addressField = mappedAddressField + @" ,First,#," +
mappedLocator1AddressField + "," + mappedLocator2AddressField;
/******** End ADDRESS Field Mapping ********/
/*********** CITY Field Mapping ************/
// The field the locator fields will be mapped to.
// Syntax('*' means 'use as is') = fieldName(no spaces) 'alias name' *true *true isRequiredField fieldSize *Text *0 *0.
String mappedCityField = "City 'City or Placename' true true false 40 Text 0 0";
// Syntax('*' means 'use as is') = locatorPath,locatorFieldName,*0,*0.
String mappedLocator1CityField = locator1Path + ",City,0,0";
String mappedLocator2CityField = locator2Path + ",City,0,0";
// Syntax('*' means 'use as is') = mappedField(See Above) ,*First,*#,mappedLocator1Field(See Above),mappedLocator2Field(See Above).
String cityField = mappedCityField + @" ,First,#," + mappedLocator1CityField +
"," + mappedLocator2CityField;
/********* End CITY Field Mapping **********/
/*********** STATE Field Mapping ***********/
// The field the locator fields will be mapped to.
// Syntax('*' means 'use as is') = fieldName(no spaces) 'alias name' *true *true isRequiredField fieldSize *Text *0 *0.
String mappedStateField = "State 'State' true true false 20 Text 0 0";
// Syntax('*' means 'use as is') = locatorPath,locatorFieldName,*0,*0.
String mappedLocator1StateField = locator1Path + ",State,0,0";
String mappedLocator2StateField = locator2Path + ",State,0,0";
// Syntax('*' means 'use as is') = mappedField(See Above) ,*First,*#,mappedLocator1Field(See Above),mappedLocator2Field(See Above).
String stateField = mappedStateField + @" ,First,#," + mappedLocator1StateField
+ "," + mappedLocator2StateField;
/********* End STATE Field Mapping *********/
/************ ZIP Field Mapping ************/
// The field that the locator fields will be mapped to.
// Syntax('*' means 'use as is') = fieldName(no spaces) 'alias name' *true *true isRequiredField fieldSize *Text *0 *0.
String mappedZipField = "Zip 'Zipcode' true true false 10 Text 0 0";
// Syntax('*' means 'use as is') = locatorPath,locatorFieldName,*0,*0.
String mappedLocator1ZipField = locator1Path + ",Zip,0,0";
String mappedLocator2ZipField = locator2Path + ",Zip,0,0";
// Syntax('*' means 'use as is') = mappedField(See Above) ,*First,*#,mappedLocator1Field(See Above),mappedLocator2Field(See Above).
String zipField = mappedZipField + @" ,First,#," + mappedLocator1ZipField + ","
+ mappedLocator2ZipField;
/********** End ZIP Field Mapping **********/
// You need a semicolon between each mapped field.
createCompositeAddressLocator.in_field_map = addressField + ";" + cityField +
";" + stateField + ";" + zipField;
// The selection criteria for specific locators.
// Syntax('*' means 'use as is') = locator1Name selectionCriteria;locator2Name selectionCriteria ......
createCompositeAddressLocator.in_selection_criteria = locator1Name + " #;" +
locator2Name + " '\"City\" = 'rialto''";
createCompositeAddressLocator.out_composite_address_locator = @
"C:\California.gdb\California_Composite_Locator";
try
{
IGeoProcessorResult result = GP.Execute(createCompositeAddressLocator, null)
as IGeoProcessorResult;
if (result != null)
{
if (result.Status != esriJobStatus.esriJobSucceeded)
Console.WriteLine("Failed to create the composite address Locator: ")
;
else
Console.WriteLine("Created the composite address Locator. ");
}
else
{
if (GP.MessageCount != 0)
{
for (int i = 0; i < GP.MessageCount; i++)
{
Console.WriteLine("GP Message " + i + " " + GP.GetMessage(i));
}
}
else
Console.WriteLine("Execution failed with no status. ");
}
}
catch (Exception e)
{
Console.WriteLine(
"An Exception occured while executing the CreateCompositeAddressLocator Tool: " + e);
}
}
[VB.NET]
Public Sub CreateCompositeAddressLocatorTool()
Dim GP As ESRI.ArcGIS.Geoprocessor.Geoprocessor = New ESRI.ArcGIS.Geoprocessor.Geoprocessor
Dim createCompositeAddressLocator As CreateCompositeAddressLocator = New CreateCompositeAddressLocator
Dim locator1Path As String = "C:\California.gdb\California_city_state_zip_94"
Dim locator1Name As String = "cal_locator"
Dim locator2Path As String = "C:\California.gdb\rialto_locator_94"
Dim locator2Name As String = "rialto_locator"
' You need a semicolon between each locator.
createCompositeAddressLocator.in_address_locators = locator1Path & " " & locator1Name & ";" & locator2Path & " " & locator2Name
'********** ADDRESS Field Mapping **********'
'' The field the locator fields will be mapped to.
'' Syntax('*' means 'use as is') = fieldName(no spaces) 'alias name' *true *true isRequiredField fieldSize *Text *0 *0.
Dim mappedAddressField As String = "Address 'Street or Intersection' true true false 100 Text 0 0"
'' Syntax('*' means 'use as is') = locatorPath,locatorFieldName,*0,*0.
Dim mappedLocator1AddressField As String = locator1Path & ",Address,0,0"
Dim mappedLocator2AddressField As String = locator2Path & ",Address,0,0"
'' Syntax('*' means 'use as is') = mappedField(See Above) ,*First,*#,mappedLocator1Field(See Above),mappedLocator2Field(See Above).
Dim addressField As String = mappedAddressField & " ,First,#," & mappedLocator1AddressField & "," & mappedLocator2AddressField
'******** End ADDRESS Field Mapping ********'
'*********** CITY Field Mapping ************'
'' The field that the locator fields will be mapped to.
'' Syntax('*' means 'use as is') = fieldName(no spaces) 'alias name' *true *true isRequiredField fieldSize *Text *0 *0.
Dim mappedCityField As String = "City 'City or Placename' true true false 40 Text 0 0"
'' Syntax('*' means 'use as is') = locatorPath,locatorFieldName,*0,*0.
Dim mappedLocator1CityField As String = locator1Path & ",City,0,0"
Dim mappedLocator2CityField As String = locator2Path & ",City,0,0"
'' Syntax('*' means 'use as is') = mappedField(See Above) ,*First,*#,mappedLocator1Field(See Above),mappedLocator2Field(See Above).
Dim cityField As String = mappedCityField & " ,First,#," & mappedLocator1CityField & "," & mappedLocator2CityField
'********* End CITY Field Mapping **********'
'*********** STATE Field Mapping ***********'
'' The field that the locator fields will be mapped to.
'' Syntax('*' means 'use as is') = fieldName(no spaces) 'alias name' *true *true isRequiredField fieldSize *Text *0 *0.
Dim mappedStateField As String = "State 'State' true true false 20 Text 0 0"
'' Syntax('*' means 'use as is') = locatorPath,locatorFieldName,*0,*0.
Dim mappedLocator1StateField As String = locator1Path & ",State,0,0"
Dim mappedLocator2StateField As String = locator2Path & ",State,0,0"
'' Syntax('*' means 'use as is') = mappedField(See Above) ,*First,*#,mappedLocator1Field(See Above),mappedLocator2Field(See Above).
Dim stateField As String = mappedStateField & " ,First,#," & mappedLocator1StateField & "," & mappedLocator2StateField
'********* End STATE Field Mapping *********'
'************ ZIP Field Mapping ************'
'' The field that the locator fields will be mapped to.
'' Syntax('*' means 'use as is') = fieldName(no spaces) 'alias name' *true *true isRequiredField fieldSize *Text *0 *0.
Dim mappedZipField As String = "Zip 'Zipcode' true true false 10 Text 0 0"
'' Syntax('*' means 'use as is') = locatorPath,locatorFieldName,*0,*0.
Dim mappedLocator1ZipField As String = locator1Path & ",Zip,0,0"
Dim mappedLocator2ZipField As String = locator2Path & ",Zip,0,0"
'' Syntax('*' means 'use as is') = mappedField(See Above) ,*First,*#,mappedLocator1Field(See Above),mappedLocator2Field(See Above).
Dim zipField As String = mappedZipField & " ,First,#," & mappedLocator1ZipField & "," & mappedLocator2ZipField
'********** End ZIP Field Mapping **********'
' You need a semicolon between each field.
createCompositeAddressLocator.in_field_map = addressField & ";" & cityField & ";" & stateField & ";" & ZipField
' The selection criteria for specific locators.
createCompositeAddressLocator.in_selection_criteria = locator1Name + " #;" + locator2Name + "'" & ControlChars.Quote & "City" & ControlChars.Quote & " = 'rialto''"
createCompositeAddressLocator.out_composite_address_locator = "C:\California.gdb\California_Composite_Locator"
Try
Dim result As IGeoProcessorResult = GP.Execute(createCompositeAddressLocator, Nothing)
If (Not result Is Nothing) Then
If (Not result.Status = esriJobStatus.esriJobSucceeded) Then
Console.WriteLine("Failed to create the composite address Locator: ")
Else
Console.WriteLine("Created the composite address Locator. ")
End If
Else
If (Not GP.MessageCount = 0) Then
For i As Integer = 0 To GP.MessageCount - 1
Console.WriteLine("GP Message " & i & " " & GP.GetMessage(i))
Next
Else
Console.WriteLine("Execution failed with no status. ")
End If
End If
Catch ex As Exception
Console.WriteLine("An Exception occured while executing the CreateCompositeAddressLocator Tool: " & ex.ToString())
End Try
End Sub
See Also:
Creating an address locatorTo use the code in this topic, reference the following assemblies in your Visual Studio project. In the code files, you will need using (C#) or Imports (VB .NET) directives for the corresponding namespaces (given in parenthesis below if different from the assembly name):
Development licensing | Deployment licensing |
---|---|
ArcGIS for Desktop Standard | ArcGIS for Desktop Standard |
ArcGIS for Desktop Advanced | ArcGIS for Desktop Advanced |
Engine Developer Kit | Engine |