Ignore:
Timestamp:
2012-09-04T08:49:06+02:00 (12 years ago)
Author:
bastik
Message:

applied #josm8036 - EditGpx: keep relative time difference between anonymized points

Location:
applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/data
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/data/EditGpxData.java

    r28204 r28689  
    33import java.util.ArrayList;
    44import java.util.List;
     5import java.util.NoSuchElementException;
    56
    67import org.openstreetmap.josm.data.gpx.GpxData;
     
    4445        GpxData result = new GpxData();
    4546
     47        double minTime = 0.0;
     48        if (anonTime) {
     49            try {
     50                minTime = minNonDeletedTime();
     51            } catch (NoSuchElementException e) {
     52                // minTime won't be used, so ignore the exception
     53            }
     54        }
     55
    4656        for (EditGpxTrack track: tracks) {
    4757            if (!track.isDeleted()) {
    48                 GpxTrack newTrack = track.createGpxTrack(anonTime);
     58                GpxTrack newTrack = track.createGpxTrack(anonTime, minTime);
    4959                if (!newTrack.getSegments().isEmpty()) {
    5060                    result.tracks.add(newTrack);
     
    5868    }
    5969
     70    /**
     71     * time of the oldest waypoint in the set of non-deleted waypoints
     72     * in this data (in seconds since Epoch)
     73     */
     74    public double minNonDeletedTime() {
     75        boolean foundOne = false;
     76        double minTime = 0.0;
     77
     78        for (EditGpxTrack track: tracks) {
     79            if (!track.isDeleted()) {
     80                try {
     81                    double t = track.minNonDeletedTime();
     82                    if ((!foundOne) || (t < minTime)) {
     83                        minTime = t;
     84                    }
     85                    foundOne = true;
     86                } catch (NoSuchElementException e) {
     87                    continue;
     88                }
     89            }
     90        }
     91
     92        if (!foundOne) {
     93            throw new NoSuchElementException();
     94        }
     95        return minTime;
     96    }
     97
    6098}
  • applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/data/EditGpxTrack.java

    r25486 r28689  
    11package org.openstreetmap.josm.plugins.editgpx.data;
    22
     3import java.text.DateFormat;
     4import java.text.SimpleDateFormat;
    35import java.util.ArrayList;
    46import java.util.Collection;
     7import java.util.Date;
    58import java.util.HashMap;
    69import java.util.List;
    710import java.util.Map;
     11import java.util.NoSuchElementException;
     12import java.util.TimeZone;
    813
    914import org.openstreetmap.josm.data.gpx.GpxTrack;
     
    3237    }
    3338
    34     public GpxTrack createGpxTrack(boolean anonTime) {
     39    public GpxTrack createGpxTrack(boolean anonTime, double minTime) {
    3540
    3641        Collection<Collection<WayPoint>> wayPoints = new ArrayList<Collection<WayPoint>>();
     42
     43        final DateFormat iso8601 =
     44            new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
     45        final TimeZone utc = TimeZone.getTimeZone("UTC");
     46        iso8601.setTimeZone(utc);
    3747
    3848        for (EditGpxTrackSegment segment: segments) {
     
    4353                        // convert to anonymous time
    4454                        for (WayPoint w : points) {
    45                             w.attr.put("time", "1970-01-01T00:00:00.000Z");
     55                            double t = w.time - minTime;
     56                            w.attr.put("time", iso8601.format(
     57                                    new Date((long)(t * 1000))));
    4658                            w.setTime();
     59                            assert w.time == t;
    4760                            if (w.attr.containsKey("name")) {
    4861                                w.attr.put("name", "anon"); //time information can also be in "name" field. so delete time information
     
    7083        return isDeleted;
    7184    }
     85
     86    /**
     87     * time of the oldest waypoint in the set of non-deleted waypoints
     88     * in this track (in seconds since Epoch)
     89     */
     90    public double minNonDeletedTime() {
     91        boolean foundOne = false;
     92        double minTime = 0.0;
     93
     94        for (EditGpxTrackSegment segment: segments) {
     95            if (!segment.isDeleted()) {
     96                try {
     97                    double t = segment.minNonDeletedTime();
     98                    if ((!foundOne) || (t < minTime)) {
     99                        minTime = t;
     100                    }
     101                    foundOne = true;
     102                } catch (NoSuchElementException e) {
     103                    continue;
     104                }
     105            }
     106        }
     107
     108        if (!foundOne) {
     109            throw new NoSuchElementException();
     110        }
     111        return minTime;
     112    }
    72113}
  • applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/data/EditGpxTrackSegment.java

    r23189 r28689  
    22
    33import java.util.ArrayList;
     4import java.util.Collections;
    45import java.util.List;
    56
     
    4243    }
    4344
     45    /**
     46     * time of the oldest waypoint in the set of non-deleted waypoints
     47     * in this segment (in seconds since Epoch)
     48     */
     49    public double minNonDeletedTime() {
     50        return Collections.min(getNonDeletedWaypoints()).time;
     51    }
     52
    4453}
  • applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/data/EditGpxWayPoint.java

    r23189 r28689  
    77import org.openstreetmap.josm.data.gpx.WayPoint;
    88
    9 public class EditGpxWayPoint {
     9public class EditGpxWayPoint implements Comparable<EditGpxWayPoint> {
    1010    private final double time;
    1111    private final CachedLatLon coor;
     
    3434    }
    3535
     36    /**
     37     * returns this waypoint's time in seconds since Epoch
     38     */
     39    public double getTime() {
     40        return time;
     41    }
     42
    3643    public CachedLatLon getCoor() {
    3744        return coor;
    3845    }
     46
     47    public int compareTo(EditGpxWayPoint o) {
     48        return Double.compare(getTime(), o.getTime());
     49    }
    3950}
Note: See TracChangeset for help on using the changeset viewer.