/// <summary> /// Returns the distance traveled until the current time in meters. /// </summary> /// <param name="time">Time in seconds</param> /// <returns>Distance in meters</returns> public double GetDistance(float time) { int index = this.GetTrackPointIndex(time); double distance = this.gpsPoints[index].Distance; GPSCoord lastPosition = this.GetPosition(time); GPSPoint interpolatedPos = new GPSPoint(lastPosition.Longitude, lastPosition.Latitude, lastPosition.Elevation, 0, 0); return distance += interpolatedPos.DistanceFromPoint(this.gpsPoints[index]); }
private int UnscaledMapImageHeight(double routeHeightLat, int zoomLevel) { //m/px double[] zoomScales = { 21282, 16355, 10064, 5540, 2909, 1485, 752, 378, 190, 95, 48, 24, 12, 6, 3, 1.48, 0.74, 0.37, 0.19 }; var origin = new GPSPoint(0, 0, 0, 0); var height = new GPSPoint(0, routeHeightLat, 0, 0); double distance = origin.DistanceFromPoint(height); double scale = zoomScales[zoomLevel - 1]; var result = (int)Math.Round(distance / scale); //TODO: real fix, remove this hack. var quickDemoHack = new Dictionary<int, int>(); quickDemoHack.Add(12, 10); quickDemoHack.Add(13, 29); quickDemoHack.Add(14, 75); return result;// - quickDemoHack[zoomLevel]; }