// License: GPL. For details, see LICENSE file. package CommandLine; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import org.openstreetmap.josm.data.gpx.GpxData; import org.openstreetmap.josm.data.gpx.GpxTrack; import org.openstreetmap.josm.data.gpx.GpxTrackSegment; import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack; import org.openstreetmap.josm.data.gpx.WayPoint; import org.openstreetmap.josm.data.osm.BBox; public class GpxFilter { private BBox bbox; private final GpxData data; public GpxFilter() { bbox = new BBox(0.0, 0.0, 0.0, 0.0); data = new GpxData(); } public void initBboxFilter(BBox bbox) { this.bbox = bbox; } public void addGpxData(GpxData data) { Collection<Collection<WayPoint>> currentTrack; Collection<WayPoint> currentSegment; for (GpxTrack track : data.tracks) { currentTrack = new ArrayList<>(); for (GpxTrackSegment segment : track.getSegments()) { currentSegment = new ArrayList<>(); for (WayPoint wp : segment.getWayPoints()) { if (bbox.bounds(wp.getCoor())) { currentSegment.add(wp); } else { if (currentSegment.size() > 1) { currentTrack.add(currentSegment); currentSegment = new ArrayList<>(); } } } if (currentSegment.size() > 1) { currentTrack.add(currentSegment); currentSegment = new ArrayList<>(); } } this.data.tracks.add(new ImmutableGpxTrack(currentTrack, Collections.<String, Object>emptyMap())); } } public GpxData getGpxData() { return data; } }