package com.robert.maps.applib.kml; import java.util.Date; import android.location.Location; public class TrackStatHelper { public Date Date1; public Date Date2; public double MaxSpeed; public double AvgSpeed; public double AvgPace; public double MinEle; public double MaxEle; public long MoveTime; public double AvgMoveSpeed; public int Cnt; public double Distance; public long Duration; private Location lastpt = null; private float[] results = { 0 }; public void addPoint(Location pt) { addPoint(pt.getLatitude(), pt.getLongitude(), pt.getAltitude(), pt.getSpeed(), new Date(pt.getTime())); } public void finalCalc() { if (lastpt != null) Date2 = new Date(lastpt.getTime()); if (MoveTime > 0) { AvgMoveSpeed = Distance / (MoveTime / 1000); } if (Duration > 0) AvgSpeed = Distance / (Duration / 1000); if (Distance > 0) AvgPace = Duration / 1000 / (Distance / 1000); } public void addPoint(double lat, double lon, double alt, double speed, Date date) { Cnt++; if (lastpt == null) { lastpt = new Location(""); Date1 = date; MaxSpeed = 0.0; MinEle = alt; MaxEle = alt; Distance = 0; Duration = 0; MoveTime = 0; } else { if (speed > MaxSpeed) MaxSpeed = speed; if (alt > MaxEle) MaxEle = alt; if (alt < MinEle) MinEle = alt; if (lastpt.getSpeed() > 0.5) MoveTime += date.getTime() - lastpt.getTime(); results[0] = 0; try { Location.distanceBetween(lastpt.getLatitude(), lastpt.getLongitude(), lat, lon, results); Distance += results[0]; } catch (Exception e) { } Duration = date.getTime() - Date1.getTime(); Date2 = new Date(date.getTime()); if (MoveTime > 0) AvgMoveSpeed = Distance / (MoveTime / 1000); if (Duration > 0) AvgSpeed = Distance / (Duration / 1000); if (Distance > 0) AvgPace = Duration / 1000 / (Distance / 1000); } lastpt.setLatitude(lat); lastpt.setLongitude(lon); lastpt.setAltitude(alt); lastpt.setSpeed((float) speed); lastpt.setTime(date.getTime()); } }