public List <GeoCoordinatePortable.GeoPosition <Waypoint> > AsPositionEverySecond() { var result = new List <GeoCoordinatePortable.GeoPosition <Waypoint> >(); var startTime = DateTime.UtcNow; var secondOffset = 0; for (int index = 0; index < Route.Count - 1; index++) { var current = Route[index]; var next = Route[index + 1]; var distance = current.GetDistanceTo(next); var duration = next.Time - current.Time; var speed = distance / duration; var heading = current.GetHeadingTo(next); var latitudePerSecond = (next.Latitude - current.Latitude) / duration; var longitudePerSecond = (next.Longitude - current.Longitude) / duration; for (int step = 0; step <= duration; step++) { var waypoint = new Waypoint() { Time = secondOffset, Latitude = current.Latitude + step * latitudePerSecond, Longitude = current.Longitude + step * longitudePerSecond, Speed = speed, Course = heading, Altitude = 2, HorizontalAccuracy = 1.0, VerticalAccuracy = 1.0 }; DateTimeOffset time = startTime.AddSeconds(secondOffset); var position = new GeoCoordinatePortable.GeoPosition <Waypoint>() { Location = waypoint, Timestamp = time }; result.Add(position); secondOffset += 1; } } return(result); }
public static string GetJsonPositionReport(Vehicle vehicle, GeoCoordinatePortable.GeoPosition <Waypoint> waypoint) { var positionReport = new PositionReport() { client_version = 1.ToString(), vehicle_type = vehicle.Type, // Real fake numbers time = waypoint.Timestamp.ToString("o"), lat = waypoint.Location.Latitude.ToString("F6"), lon = waypoint.Location.Longitude.ToString("F6"), course = waypoint.Location.Course.ToString("F2"), speed = waypoint.Location.Speed.ToString("F2"), // Hard-coded elsewhere alt = waypoint.Location.Altitude.ToString("F2"), epx = waypoint.Location.HorizontalAccuracy.ToString("F2"), epy = waypoint.Location.VerticalAccuracy.ToString("F2"), // Hard-coded here climb = 0.0.ToString("F2"), eps = 0.0.ToString("F2"), ept = 0.0.ToString("F2"), epv = 0.0.ToString("F2") }; return(String.Format(TEMPLATE, positionReport.time, positionReport.lat, positionReport.lon, positionReport.climb, positionReport.course, positionReport.eps, positionReport.ept, positionReport.epv, positionReport.epx, positionReport.epy, positionReport.speed, positionReport.alt, positionReport.client_version, positionReport.vehicle_type )); }