public static void NearestAeroplane(string latitude, string longitude) { double lat = AeroTracker.GetCoordinate(latitude); double lon = AeroTracker.GetCoordinate(longitude); var response = AeroTracker.GetAPIData(); var time = response.Time; var states = response.States; var aeroList = AeroTracker.StatesToAero(states); var nearest = AeroTracker.GetNearest(aeroList, lat, lon); AeroTracker.DisplayNearest(nearest, lat, lon); }
private static List <Aero> StatesToAero(List <List <object> > states) { var aeroList = new List <Aero>(); foreach (var state in states) { try { aeroList.Add(AeroTracker.CreateAero(state)); } catch (InvalidCastException) { continue; } catch (NullReferenceException) { continue; } } return(aeroList); }
private static Aero GetNearest(List <Aero> aeroList, double lat, double lon) { Aero aero; Aero nearest = null; for (var i = 0; i < aeroList.Count; i++) { aero = aeroList[i]; if (i == 0) { aero.RelativeGeoDistance = AeroTracker.GeoDistance(lat, lon, aero.Latitude, aero.Longitude); nearest = aero; continue; } if (nearest == null) { throw new NullReferenceException("Could not find nearest during loop"); } double latTol = Math.Max(nearest.Latitude, lat) - Math.Min(nearest.Latitude, lat); double lonTol = Math.Max(nearest.Longitude, lon) - Math.Min(nearest.Longitude, lon); if (AeroTracker.AeroWithinTol(aero, lat, lon, latTol, lonTol)) { aero.RelativeGeoDistance = AeroTracker.GeoDistance(lat, lon, aero.Latitude, aero.Longitude); if (aero.RelativeGeoDistance < nearest.RelativeGeoDistance) { nearest = aero; } } } if (nearest == null) { throw new NullReferenceException("Could not find nearest during return"); } return(nearest); }
private static double GetCoordinate(string coord) { var values = coord.Split(null); return(AeroTracker.GetLocation(values) * AeroTracker.GetSign(values)); }
static void Main(string[] args) { AeroTracker.NearestAeroplane("44.6", "32.6"); Console.ReadLine(); Console.ReadLine(); }