From 78d95d7910d64ed34c3eb60a1a72f073b584323d Mon Sep 17 00:00:00 2001 From: Ramon Date: Mon, 2 Feb 2026 21:47:41 +0200 Subject: [PATCH 1/2] Remove unnecessary code to handle start point in lineSliceAlong() --- services-turf/src/main/java/com/mapbox/turf/TurfMisc.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/services-turf/src/main/java/com/mapbox/turf/TurfMisc.java b/services-turf/src/main/java/com/mapbox/turf/TurfMisc.java index 53d23b12e..3209cb68b 100644 --- a/services-turf/src/main/java/com/mapbox/turf/TurfMisc.java +++ b/services-turf/src/main/java/com/mapbox/turf/TurfMisc.java @@ -210,11 +210,6 @@ public static LineString lineSliceAlong(@NonNull LineString line, } else if (travelled > startDist && slice.size() == 0) { // This logic handles finding the starting point when startDist is not 0 double overshot = startDist - travelled; - if (overshot == 0) { - // This doesn't make sense, why are we stopping when the overshot from startDist is 0? - slice.add(pointAtI); - return LineString.fromLngLats(slice); - } Point previousPoint = Point.fromLngLat(coords[((i - 1) * 2)], coords[((i - 1) * 2) + 1]); double direction = TurfMeasurement.bearing(pointAtI, previousPoint) - 180; Point interpolated = TurfMeasurement.destination(pointAtI, overshot, direction, units); From a62f863511725033943f3038147a7f2acc37853a Mon Sep 17 00:00:00 2001 From: Ramon Date: Mon, 2 Feb 2026 21:48:16 +0200 Subject: [PATCH 2/2] Added test to verify exact end point in lineSliceAlong --- .../java/com/mapbox/turf/TurfMiscTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/services-turf/src/test/java/com/mapbox/turf/TurfMiscTest.java b/services-turf/src/test/java/com/mapbox/turf/TurfMiscTest.java index 266bc3a54..d277d244a 100644 --- a/services-turf/src/test/java/com/mapbox/turf/TurfMiscTest.java +++ b/services-turf/src/test/java/com/mapbox/turf/TurfMiscTest.java @@ -509,6 +509,26 @@ public void testLineSliceAlongRoute1() throws IOException, TurfException { end_point.flattenCoordinates(), DELTA); } + @Test + public void testLineSliceAlongRoute1WithExactStop() throws IOException, TurfException { + Feature route1 = Feature.fromJson(loadJsonFixture(LINE_SLICE_ALONG_ROUTE_ONE)); + LineString lineStringRoute1 = (LineString) route1.geometry(); + + double start = 500; + Point start_point = TurfMeasurement.along(lineStringRoute1, start, TurfConstants.UNIT_MILES); + double exactStop = TurfMeasurement.length(lineStringRoute1, TurfConstants.UNIT_MILES); + + LineString slicedAtExactStop = TurfMisc.lineSliceAlong(route1, start, exactStop, + TurfConstants.UNIT_MILES); + List slicedCoordinatesAtExactStop = slicedAtExactStop.coordinates(); + assertEquals(slicedCoordinatesAtExactStop.get(0).coordinates(), start_point.coordinates()); + Point lastPointInLine = lineStringRoute1.coordinates().get( + lineStringRoute1.coordinates().size() - 1 + ); + assertEquals(slicedCoordinatesAtExactStop.get(slicedCoordinatesAtExactStop.size() - 1) + .coordinates(), lastPointInLine.coordinates()); + } + @Test public void testLineSliceAlongRoute2() throws IOException, TurfException {