I have written this code. Try see if it is ok for your use
/// <summary>
/// search the eid nearest from point
/// </summary>
/// <param name="searchTolerance">tolerance for search</param>
/// <param name="point">point input</param>
/// <param name="elementType">type of element found</param>
/// <returns>return eid</returns>
private int GetEIDFromPoint(double searchTolerance, IPoint point, out esriElementType elementType)
{
if (searchTolerance < 0 || point == null)
{
throw new GeometricNetworkException("Tolerance or source not valid!");
}
IFeatureClassContainer featureClassContainer = this.geometricNetwork as IFeatureClassContainer;
double distance = double.PositiveInfinity;
int featureClassID = -1;
IGeometry featureGeometry = null;
for (int i = 0; i < featureClassContainer.ClassCount; i++)
{
IFeatureClass featureClass = featureClassContainer.get_Class(i);
string shapeFieldName = featureClass.ShapeFieldName;
ITopologicalOperator topologicalOperator = point as ITopologicalOperator;
ISpatialFilter spatialFilter = new SpatialFilterClass();
spatialFilter.Geometry = topologicalOperator.Buffer(searchTolerance);
spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
spatialFilter.GeometryField = shapeFieldName;
using (ComReleaser comReleaser = new ComReleaser())
{
IFeatureCursor featureCursor = featureClass.Search(spatialFilter, true);
comReleaser.ManageLifetime(featureCursor);
IFeature feature = featureCursor.NextFeature();
while (feature != null)
{
IProximityOperator proximityOperator = feature.ShapeCopy as IProximityOperator;
double distanceCurrent = proximityOperator.ReturnDistance(point);
if (distance > distanceCurrent)
{
distance = distanceCurrent;
featureClassID = featureClass.FeatureClassID;
featureGeometry = feature.ShapeCopy;
}
feature = featureCursor.NextFeature();
}
}
}
if (featureClassID == -1)
{
throw new GeometricNetworkException("Element in network not found!");
}
IProximityOperator proximityPoint = featureGeometry as IProximityOperator;
IPoint p = proximityPoint.ReturnNearestPoint(point, esriSegmentExtension.esriNoExtension);
int eid = this.geometricNetwork.get_EdgeElement(p);
elementType = esriElementType.esriETEdge;
if (eid < 1)
{
eid = this.geometricNetwork.get_JunctionElement(p);
elementType = esriElementType.esriETJunction;
}
if (eid < 1)
{
throw new GeometricNetworkException("Element in network not found!");
}
return eid;
}