Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
        }