code: @NonNull
    public static LineString lineSlice(@NonNull Point startPt, @NonNull Point stopPt,
                                       @NonNull LineString line) {
  
      List<Point> coords = line.coordinates();
  
      if (coords.size() < 2) {
        throw new TurfException("Turf lineSlice requires a LineString made up of at least 2 "
          + "coordinates.");
      } else if (startPt.equals(stopPt)) {
        throw new TurfException("Start and stop points in Turf lineSlice cannot equal each other.");
      }
  
      Feature startVertex = nearestPointOnLine(startPt, coords);
      Feature stopVertex = nearestPointOnLine(stopPt, coords);
      List<Feature> ends = new ArrayList<>();
      if ((int) startVertex.getNumberProperty(INDEX_KEY)
        <= (int) stopVertex.getNumberProperty(INDEX_KEY)) {
        ends.add(startVertex);
        ends.add(stopVertex);
      } else {
        ends.add(stopVertex);
        ends.add(startVertex);
      }
      List<Point> points = new ArrayList<>();
      points.add((Point) ends.get(0).geometry());
      for (int i = (int) ends.get(0).getNumberProperty(INDEX_KEY) + 1;
           i < (int) ends.get(1).getNumberProperty(INDEX_KEY) + 1; i++) {
        points.add(coords.get(i));
      }
      points.add((Point) ends.get(1).geometry());
      return LineString.fromLngLats(points);
    }
docs: Takes a line, a start {@link Point}, and a stop point and returns the line in between those
  points.
  
  @param startPt used for calculating the lineSlice
  @param stopPt  used for calculating the lineSlice
  @param line    geometry that should be sliced
  @return a sliced {@link LineString}
  @see <a href="http://turfjs.org/docs/#lineslice">Turf Line slice documentation</a>
  @since 1.2.0