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)); }