In this topic
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 |