About the Find the closest intersection from a point Sample
[C#]
FindClosestIntersection.cs
using System;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Location;
using ESRI.ArcGIS.esriSystem;
namespace ClosestIntersectionFromPoint
{
class FindClosestIntersection
{
private static IAoInitialize m_License = null;
// X and Y values can either be passed in at the command line or from the command prompt after starting
static void Main(string[] args)
{
// Initialize the license
getLicense();
// See if the address point was passed in at the command line and if not, enter the values now
double X, Y;
if (args == null || args.Length == 0)
{
Console.WriteLine("Enter a X value: ");
X = double.Parse(Console.ReadLine());
Console.WriteLine("Enter a Y value: ");
Y = double.Parse(Console.ReadLine());
}
else
{
X = double.Parse(args[0]);
Y = double.Parse(args[1]);
}
// Call the reverseGeocode method
ReverseGeocodeIntersection(X, Y);
Console.WriteLine("Press any key to exit...");
Console.ReadLine();
// Return the license
returnLicense();
}
/// <summary>
/// The main functionality to use Intersection Reverse Geocoding
/// </summary>
/// <param name="X"></param>
/// <param name="Y"></param>
private static void ReverseGeocodeIntersection(double X, double Y)
{
// Get a locator from the locator Workspace
System.Object obj = Activator.CreateInstance(Type.GetTypeFromProgID("esriLocation.LocatorManager"));
ILocatorManager2 locatorManager = obj as ILocatorManager2;
ILocatorWorkspace locatorWorkspace = locatorManager.GetLocatorWorkspaceFromPath(@"C:\California_fdb.gdb");
ILocator locator = locatorWorkspace.GetLocator("California_streets_10");
IReverseGeocoding reverseGeocoding = locator as IReverseGeocoding;
// Get the spatial reference from the locator
IAddressGeocoding addressGeocoding = locator as IAddressGeocoding;
IFields matchFields = addressGeocoding.MatchFields;
IField shapeField = matchFields.get_Field(matchFields.FindField("Shape"));
ISpatialReference spatialReference = shapeField.GeometryDef.SpatialReference;
// Set up the point from the X and Y values
IPoint point = new PointClass();
point.SpatialReference = spatialReference;
point.X = X;
point.Y = Y;
// Set the search tolerance for reverse geocoding
IReverseGeocodingProperties reverseGeocodingProperties = reverseGeocoding as IReverseGeocodingProperties;
reverseGeocodingProperties.SearchDistance = 2;
reverseGeocodingProperties.SearchDistanceUnits = esriUnits.esriKilometers;
// Determine if the locator supports intersection geocoding.
// intersectionGeocoding will be null if it is not supported.
IIntersectionGeocoding intersectionGeocoding = locator as IIntersectionGeocoding;
if (intersectionGeocoding == null)
{
Console.WriteLine("You must use a locator that supports intersections. Use a locator that was built off of one"
+ "of the US Streets Locator styles.");
}
else
{
// Find the intersection that is nearest to the Point
IPropertySet addressProperties = reverseGeocoding.ReverseGeocode(point, true);
// Print the intersection properties
IAddressInputs addressInputs = reverseGeocoding as IAddressInputs;
IFields addressFields = addressInputs.AddressFields;
for (int i = 0; i < addressFields.FieldCount; i++)
{
IField addressField = addressFields.get_Field(i);
Console.WriteLine(addressField.AliasName + ": " + addressProperties.GetProperty(addressField.Name));
}
}
}
#region Helper Methods
private static void getLicense()
{
if (!ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop))
throw new Exception("Could not set version. ");
m_License = new AoInitializeClass();
m_License.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcInfo);
}
private static void returnLicense()
{
m_License.Shutdown();
}
#endregion
}
}
[Visual Basic .NET]
FindClosestIntersection.vb
Imports Microsoft.VisualBasic
Imports System
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS.Geometry
Imports ESRI.ArcGIS.Location
Imports ESRI.ArcGIS.esriSystem
Namespace ClosestIntersectionFromPoint
Friend Class FindClosestIntersection
Private Shared m_License As IAoInitialize = Nothing
' X and Y values can either be passed in at the command line or from the command prompt after starting
Shared Sub Main(ByVal args() As String)
' Initialize the license
getLicense()
' See if the address point was passed in at the command line and if not, enter the values now
Dim X, Y As Double
If args Is Nothing OrElse args.Length = 0 Then
Console.WriteLine("Enter a X value: ")
X = Double.Parse(Console.ReadLine())
Console.WriteLine("Enter a Y value: ")
Y = Double.Parse(Console.ReadLine())
Else
X = Double.Parse(args(0))
Y = Double.Parse(args(1))
End If
' Call the reverseGeocode method
ReverseGeocodeIntersection(X, Y)
Console.WriteLine("Press any key to exit...")
Console.ReadLine()
' Return the license
returnLicense()
End Sub
''' <summary>
''' The main functionality to use Intersection Reverse Geocoding
''' </summary>
''' <param name="X"></param>
''' <param name="Y"></param>
Private Shared Sub ReverseGeocodeIntersection(ByVal X As Double, ByVal Y As Double)
' Get a locator from the locator Workspace
Dim obj As System.Object = Activator.CreateInstance(Type.GetTypeFromProgID("esriLocation.LocatorManager"))
Dim locatorManager As ILocatorManager2 = TryCast(obj, ILocatorManager2)
Dim locatorWorkspace As ILocatorWorkspace = locatorManager.GetLocatorWorkspaceFromPath("C:\California_fdb.gdb")
Dim locator As ILocator = locatorWorkspace.GetLocator("CaliforniaTest")
Dim reverseGeocoding As IReverseGeocoding = TryCast(locator, IReverseGeocoding)
' Get the spatial reference from the locator
Dim addressGeocoding As IAddressGeocoding = TryCast(locator, IAddressGeocoding)
Dim matchFields As IFields = addressGeocoding.MatchFields
Dim shapeField As IField = matchFields.Field(matchFields.FindField("Shape"))
Dim spatialReference As ISpatialReference = shapeField.GeometryDef.SpatialReference
' Set up the point from the X and Y values
Dim point As IPoint = New PointClass()
point.SpatialReference = spatialReference
point.X = X
point.Y = Y
' Set the search tolerance for reverse geocoding
Dim reverseGeocodingProperties As IReverseGeocodingProperties = TryCast(reverseGeocoding, IReverseGeocodingProperties)
reverseGeocodingProperties.SearchDistance = 2
reverseGeocodingProperties.SearchDistanceUnits = esriUnits.esriKilometers
' Determine if the locator supports intersection geocoding.
' intersectionGeocoding will be null if it is not supported.
Dim intersectionGeocoding As IIntersectionGeocoding = TryCast(locator, IIntersectionGeocoding)
If intersectionGeocoding Is Nothing Then
Console.WriteLine("You must use a locator that supports intersections. Use a locator that was built off of one" & "of the US Streets Locator styles.")
Else
' Find the intersection that is nearest to the Point
Dim addressProperties As IPropertySet = reverseGeocoding.ReverseGeocode(point, True)
' Print the intersection properties
Dim addressInputs As IAddressInputs = TryCast(reverseGeocoding, IAddressInputs)
Dim addressFields As IFields = addressInputs.AddressFields
For i As Integer = 0 To addressFields.FieldCount - 1
Dim addressField As IField = addressFields.Field(i)
Console.WriteLine(addressField.AliasName & ": " & addressProperties.GetProperty(addressField.Name).ToString())
Next i
End If
End Sub
#Region "Helper Methods"
Private Shared Sub getLicense()
If (Not ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop)) Then
Throw New Exception("Could not set version. ")
End If
m_License = New AoInitializeClass()
m_License.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcInfo)
End Sub
Private Shared Sub returnLicense()
m_License.Shutdown()
End Sub
#End Region
End Class
End Namespace