Ignore:
Timestamp:
2008-06-10T00:16:09+02:00 (11 years ago)
Author:
ramack
Message:

improve info on GpxLayers, closes #756 and also gives track length

Location:
trunk/src/org/openstreetmap/josm/data/gpx
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java

    r627 r647  
    99
    1010import org.openstreetmap.josm.data.Bounds;
     11import org.openstreetmap.josm.data.coor.LatLon;
    1112
    1213/**
     
    99100                }
    100101        }
     102   
     103    /**
     104     * calculates the sum of the lengths of all track segments
     105     */
     106    public double length(){
     107        double result = 0.0; // in meters
     108        WayPoint last = null;
     109               
     110        for (GpxTrack trk : tracks) {
     111            for (Collection<WayPoint> trkseg : trk.trackSegs) {
     112                for (WayPoint tpt : trkseg) {
     113                    if(last != null){
     114                        result += calcDistance(last.latlon, tpt.latlon);
     115                    }
     116                    last = tpt;
     117                }
     118                last = null; // restart for each track segment
     119            }
     120        }
     121        return result;
     122    }
     123
     124    /**
     125     * returns the distance in meters between two LatLons
     126     */
     127    public static double calcDistance(LatLon p1, LatLon p2){
     128        double lat1, lon1, lat2, lon2;
     129        double dlon, dlat;
     130           
     131        lat1 = p1.lat() * Math.PI / 180.0;
     132        lon1 = p1.lon() * Math.PI / 180.0;
     133        lat2 = p2.lat() * Math.PI / 180.0;
     134        lon2 = p2.lon() * Math.PI / 180.0;
     135
     136        dlon = lon2 - lon1;
     137        dlat = lat2 - lat1;
     138
     139        double a = (Math.pow(Math.sin(dlat/2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon/2), 2));
     140        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
     141        return 6367000 * c;
     142    }
     143
    101144}
  • trunk/src/org/openstreetmap/josm/data/gpx/WayPoint.java

    r646 r647  
    1313import org.openstreetmap.josm.data.coor.LatLon;
    1414
    15 public class WayPoint extends WithAttributes {
     15public class WayPoint extends WithAttributes implements Comparable{
    1616       
    1717        public final LatLon latlon;
     
    5050        }
    5151
     52    public int compareTo(Object other){
     53        if(other instanceof WayPoint){
     54            WayPoint w = (WayPoint)other;
     55            return (int)time - (int)w.time;
     56        }
     57        return 0;
     58    }
    5259}
Note: See TracChangeset for help on using the changeset viewer.