### Question:
WayHelper { public static double getDistance(final Node aNode, final Node aStart, final Node aEnd) { if (aStart.getLatitude() == aEnd.getLatitude() && aStart.getLongitude() == aEnd.getLongitude()) { return LatLon.distanceInMeters(aNode, aStart); } double length = LatLon.distance(aEnd, aStart); double u = ( (aNode.getLatitude() - aStart.getLatitude()) * (aEnd.getLatitude() - aStart.getLatitude()) + (aNode.getLongitude() - aStart.getLongitude()) * (aEnd.getLongitude() - aStart.getLongitude()) ) / length; if (u < 0.0 || u > 1.0) { return Math.min(LatLon.distanceInMeters(aNode, aStart), LatLon.distanceInMeters(aNode, aEnd)); } double projectedLat = aStart.getLatitude() + u * (aEnd.getLatitude() - aStart.getLatitude()); double projectedLon = aStart.getLongitude() + u * (aEnd.getLongitude() - aStart.getLongitude()); return LatLon.distanceInMeters(new LatLon(aNode.getLatitude(), aNode.getLongitude()), new LatLon(projectedLat, projectedLon)); } WayHelper(final IDataSet aMap); IDataSet getMap(); static String getTag(final Collection<Tag> way, final String key); static String getTag(final Entity way, final String key); List<Node> getNodes(final Way aWay); List<Node> getNodes(final List<WayNode> aWay); Bounds getWayBounds(final Way way); Bounds getWayBounds(final Collection<Way> ways); List<WayNode> simplifyWay(final Way w); List<WayNode> simplifyWay(final Way w, final double threshold,
            final double maxNodeDistance,
            final boolean keepTaggedNodes,
            final boolean keepIntersectionNodes); List<WayNode> simplifyWay(final List<WayNode> wnew, final double threshold,
            final double minNodeDistance,
            final boolean keepTaggedNodes,
            final boolean keepIntersectionNodes); void simplifyWayRange(final List<WayNode> aWay, final int from,
                                 final int to,
                                 final double thr,
                                 final double minDist); static Bounds getBoundsForWay(final Way street, final IDataSet aMap); static boolean isPolygon(final Way aWay); static boolean isOneway(final Way way); static boolean isReverseOneway(final Way way); static boolean isBridge(final Way way); static long areaBoundingBox(final ExtendedWay way); static double area(final Coordinate[] polyPoints); static double[] centerOfMass(final Coordinate[] polyPoints); static boolean containsNode(final Way aToWay, final long aNodeID); static List<Node> isParallel(final List<Node> aFirstWay, final List<Node> aSecondWay); static double getDistanceAndInsert(final Node aNode, final List<Node> aWay); static double getDistance(final Node aNode, final Node aStart, final Node aEnd);  }### Answer:
@Test public void testgetDistanceNodeLine() { Node start = new Node(1, 1, new Date(), null, 0, 1.0, 1.0); Node test = new Node(2, 1, new Date(), null, 0, 2.0, 5.0); Node testOnLine = new Node(5, 1, new Date(), null, 0, 1.0, 5.0); Node end = new Node(3, 1, new Date(), null, 0, 1.0, 10.0); final double expected = LatLon.distanceInMeters(test, testOnLine); double actual = WayHelper.getDistance(test, start, end); assertEquals(expected, actual, 0.0001d); }