private static DistanceResult GetDistanceMatrix(IMapToolkit toolkit, Place origin, List <Place> destinations) { // Find by file first // {0} toolkit type, {1} Origin Id string fileFormat = "{0}_{1}_Distance.json"; string fileName = string.Format(fileFormat, toolkit.ToolkitType, origin.Id); if (File.Exists(fileName)) { var visit = JsonConvert.DeserializeObject <Visit>(FileIO.ReadAll(fileName)); var distCalculations = new DistanceResult(null) { DistanceSort = visit.Places }; distCalculations.FileName = fileName; distCalculations.IsNew = false; return(distCalculations); } else { // Otherwise call API var distCalculations = toolkit.DistanceMatrix(origin, destinations); distCalculations.FileName = fileName; distCalculations.IsNew = true; SaveToFile(fileName, origin, distCalculations); return(distCalculations); } }
private static DistanceResult AddDistances(IMapToolkit toolkit, Place origin, List <Place> destinations, Graph <Place> graph) { DistanceResult distCalculations = GetDistanceMatrix(toolkit, origin, destinations); EnumerateByDistance( origin, distCalculations, (source, dest, dist) => { if (origin.Id != source.Id) { throw new InvalidOperationException(string.Format("Mismatch: SourceId '{0}', Origin.Id '{1}'", source.Id, origin.Id)); } if (source.Id != dest.Id) { //if(dest.Visited) { return; } graph.Add(source, dest, dist); var sourceNode = graph.Find(source.Id); var destNode = graph.Find(dest.Id); if (graph.Find(source.Id) == null) { graph.AddLookupId(source.Id, sourceNode); } if (graph.Find(dest.Id) == null) { graph.AddLookupId(dest.Id, destNode); } } }); // Calling SaveToFile again so that DistanceId's are also saved if (distCalculations.IsNew) { SaveToFile(distCalculations.FileName, origin, distCalculations); } return(distCalculations); }