/// <summary> /// Tries to calculate a tree starting at the given location. /// </summary> public static Result <Tree> TryCalculateTree(this RouterBase router, Profile profile, RouterPoint origin, float max) { if (!router.SupportsAll(profile)) { return(new Result <Tree>(string.Format("Profile {0} not supported.", profile.Name))); } if (profile.Metric != ProfileMetric.TimeInSeconds) { return(new Result <Tree>(string.Format("Profile {0} not supported, only profiles with metric TimeInSeconds are supported.", profile.Name))); } // get the weight handler. var weightHandler = router.GetDefaultWeightHandler(profile); var getFactor = router.GetDefaultGetFactor(profile); // calculate isochrones. var treeBuilder = new TreeBuilder( new DykstraEdgeVisitor(router.Db.Network.GeometricGraph, getFactor, origin.ToEdgePaths <float>(router.Db, weightHandler, true), max)); treeBuilder.Run(); return(new Result <Tree>(treeBuilder.Tree)); }
/// <summary> /// Tries to calculate a tree starting at the given location. /// </summary> public static Result <Tree> TryCalculateTree(this RouterBase router, Profile profile, RouterPoint origin, float max) { if (!router.SupportsAll(profile)) { return(new Result <Tree>(string.Format("Profile {0} not supported.", profile.FullName))); } if (profile.Metric != ProfileMetric.TimeInSeconds) { return(new Result <Tree>(string.Format("Profile {0} not supported, only profiles with metric TimeInSeconds are supported.", profile.FullName))); } // get the weight handler. var weightHandler = router.GetDefaultWeightHandler(profile); var getFactor = router.GetDefaultGetFactor(profile); // calculate isochrones. TreeBuilder treeBuilder = null; if (!router.Db.HasComplexRestrictions(profile)) { treeBuilder = new TreeBuilder(router.Db.Network.GeometricGraph, new Algorithms.Default.Dykstra(router.Db.Network.GeometricGraph.Graph, weightHandler, null, origin.ToEdgePaths <float>(router.Db, weightHandler, true), max, router.Closures, false)); } else { treeBuilder = new TreeBuilder(router.Db.Network.GeometricGraph, new Algorithms.Default.EdgeBased.Dykstra(router.Db.Network.GeometricGraph.Graph, weightHandler, router.Db.GetGetRestrictions(profile, true), origin.ToEdgePaths <float>(router.Db, weightHandler, true), max, router.Closures, false)); } treeBuilder.Run(); return(new Result <Tree>(treeBuilder.Tree)); }