internal void SnapToRoute(Route r)
{
Coordinate c1, c2;
Coordinate closestPoint = null, tempClosestPoint = null;
int precedingPointId = -1;
double shortestDistance = 10000, tempShortestDistance = 10000;
for (int i = 0; i < r.coordinates.Count; i++)
{
if (i == 0)
{
c1 = r.coordinates.Last();
}
else
{
c1 = r.coordinates[i - 1];
}
c2 = r.coordinates[i];
tempClosestPoint = this.Location.ClosestPoint(c1, c2);
tempShortestDistance = tempClosestPoint.DistanceTo(this.Location);
if (tempShortestDistance < shortestDistance)
{
shortestDistance = tempShortestDistance;
closestPoint = tempClosestPoint;
precedingPointId = i == 0 ? r.coordinates.Count - 1 : i;
}
}
this.snappedCoordinate.Add(r.Id, closestPoint);
this.precedingCoordinate.Add(r.Id, precedingPointId);
this.precedingCoordinateDistance.Add(r.Id, r.coordinates[precedingPointId].DistanceTo(Location));
}