private static void OutputData()
{
//Minimums that we will use later.
double maxLat = centerLat + (maxLatKM / 110.574);
double minLat = centerLat - (maxLatKM / 110.574);
double maxLng = centerLng + (maxLngKM / 111.320 * Math.Cos(centerLat));
double minLng = centerLng - (maxLngKM / 111.320 * Math.Cos(centerLat));
//Overrideen to focus on Dominion road
//maxLat = -36.860440;
//minLat = -36.911379;
//minLng = 174.722142;
//maxLng = 174.766603;
var selectedRoutes = routes;
var outputMapStopItems = new List<OutputMapStopItem>();
foreach (var route in selectedRoutes)
{
//Get all trips that actually fall into our time range that we want.
//Just hardcoded to 6 - 10AM approx.
var selectedTrips = route.Trips.Where(x => x.StopTimes.Any(y => DateTime.Compare(y.Time, DateTime.Parse("6:00:00 AM")) > 0 && DateTime.Compare(y.Time, Convert.ToDateTime("10:00:00 AM")) < 0));
foreach (var trip in selectedTrips)
{
var minStopTime = DateTime.MaxValue;
var maxStopTime = DateTime.MinValue;
var stopLatLngs = new List<OutputMapStopLatLng>();
foreach (var stopTime in trip.StopTimes.OrderBy(x => x.Time))
{
var stop = stopLookup[stopTime.StopId];
if (stop.StopLat < maxLat && stop.StopLat > minLat && stop.StopLng < maxLng && stop.StopLng > minLng)
{
stopLatLngs.Add(new OutputMapStopLatLng { Lat = stop.StopLat, Lng = stop.StopLng });
//Used later on.
if (stopTime.Time < minStopTime)
minStopTime = stopTime.Time;
if (stopTime.Time > maxStopTime)
maxStopTime = stopTime.Time;
}
}
//Bail if we didn't actually find any stops that fit what we needed.
if (stopLatLngs.Count < 2)
continue;
//Work out the distance travelled total.
var distanceTravelled = 0.0;
for(int i=1; i < stopLatLngs.Count; i++)
{
distanceTravelled += DistanceBetweenPoints(stopLatLngs[i - 1].Lat, stopLatLngs[i - 1].Lng, stopLatLngs[i].Lat, stopLatLngs[i].Lng);
}
var stopTimeStart = trip.StopTimes.OrderBy(x => x.Time).First();
outputMapStopItems.Add(new OutputMapStopItem
{
StartTime = trip.StopTimes.OrderBy(x => x.Time).First().Time.TimeOfDay.TotalSeconds,
TripId = trip.TripId,
LatLngs = stopLatLngs,
TotalDistanceTraveled = (int)(distanceTravelled * 1000),
TotalTimeTaken = maxStopTime.Subtract(stopTimeStart.Time).TotalMilliseconds
});
}
}
var outputText = JsonConvert.SerializeObject(outputMapStopItems);
File.WriteAllText("stops.json", outputText);
}