package org.droidplanner.services.android.impl.core.helpers.geoTools; import com.o3dr.services.android.lib.coordinate.LatLong; import java.util.ArrayList; import java.util.List; public class LineSampler { private List<LatLong> points; private List<LatLong> sampledPoints = new ArrayList<>(); public LineSampler(List<LatLong> points) { this.points = points; } public LineSampler(LatLong p1, LatLong p2) { points = new ArrayList<>(); points.add(p1); points.add(p2); } public List<LatLong> sample(double sampleDistance) { for (int i = 1; i < points.size(); i++) { LatLong from = points.get(i - 1); if (from == null) { continue; } LatLong to = points.get(i); sampledPoints.addAll(sampleLine(from, to, sampleDistance)); } final LatLong lastPoint = getLast(points); if (lastPoint != null) { sampledPoints.add(lastPoint); } return sampledPoints; } private List<LatLong> sampleLine(LatLong from, LatLong to, double samplingDistance) { List<LatLong> result = new ArrayList<LatLong>(); double heading = GeoTools.getHeadingFromCoordinates(from, to); double totalLength = GeoTools.getDistance(from, to); double distance = 0; while (distance < totalLength) { result.add(GeoTools.newCoordFromBearingAndDistance(from, heading, distance)); distance += samplingDistance; } return result; } private LatLong getLast(List<LatLong> list) { return list.get(list.size() - 1); } }