Beispiel #1
0
        /// <summary>
        /// Loads an instance from a routing file.
        /// </summary>
        public static bool LoadInstance(FileInfo file)
        {
            try
            {
                if (!file.Exists)
                {
                    return(false);
                }

                Logger.Log("Bootstrapper", TraceEventType.Information,
                           "Loading instance {1} from: {0}", file.FullName, file.Name.GetNameUntilFirstDot());

                if (file.Name.EndsWith("routerdb"))
                {
                    RouterDb routerDb;
                    using (var stream = File.OpenRead(file.FullName))
                    {
                        routerDb = RouterDb.Deserialize(stream);
                    }
                    var multimodalDb     = new MultimodalDb(routerDb, new TransitDb());
                    var multimodalRouter = new MultimodalRouter(multimodalDb,
                                                                Itinero.Osm.Vehicles.Vehicle.Pedestrian.Fastest());
                    var instance = new Instances.Instance(multimodalRouter);
                    InstanceManager.Register(file.Name.GetNameUntilFirstDot(), instance);
                }
                else if (file.Name.EndsWith("multimodaldb"))
                {
                    MultimodalDb routerDb;
                    using (var stream = File.OpenRead(file.FullName))
                    {
                        routerDb = MultimodalDb.Deserialize(stream);
                    }
                    var multimodalRouter = new MultimodalRouter(routerDb,
                                                                Itinero.Osm.Vehicles.Vehicle.Pedestrian.Fastest());
                    var instance = new Instances.Instance(multimodalRouter);
                    InstanceManager.Register(file.Name.GetNameUntilFirstDot(), instance);
                }

                Logger.Log("Bootstrapper", TraceEventType.Information,
                           "Loaded instance {1} from: {0}", file.FullName, file.Name.GetNameUntilFirstDot());

                return(true);
            }
            catch (Exception ex)
            {
                Logger.Log("Bootstrapper", TraceEventType.Critical, "Failed to load file {0}: {1}", file,
                           ex.ToInvariantString());
            }
            return(false);
        }
Beispiel #2
0
        /// <summary>
        /// Loads an instance from a folder.
        /// </summary>
        /// <returns></returns>
        public static bool LoadInstanceFromFolder(DirectoryInfo folder)
        {
            try
            {
                if (!folder.Exists)
                {
                    return(false);
                }

                Logger.Log("Bootstrapper", TraceEventType.Information,
                           "Loading instance {1} from: {0}", folder.FullName, folder.Name);

                var profiles = new List <Itinero.Profiles.Vehicle>();
                foreach (var luaFile in folder.EnumerateFiles("*.lua"))
                {
                    try
                    {
                        using (var stream = luaFile.OpenRead())
                        {
                            profiles.Add(Itinero.Profiles.DynamicVehicle.LoadFromStream(stream));
                        }

                        Logger.Log("Bootstrapper", TraceEventType.Information,
                                   "Loaded profile {0}.", luaFile.FullName);
                    }
                    catch (Exception ex)
                    {
                        Logger.Log("Bootstrapper", TraceEventType.Error,
                                   "Failed loading profile {0}:{1}", luaFile.FullName, ex.ToInvariantString());
                    }
                }

                if (profiles.Count == 0)
                {
                    Logger.Log("Bootstrapper", TraceEventType.Information,
                               "Loading instance {1} from: {0}, no vehicle profiles found or they could not be loaded.", folder.FullName,
                               folder.Name);
                    return(true);
                }

                var osmFile = folder.EnumerateFiles("*.osm").Concat(
                    folder.EnumerateFiles("*.osm.pbf")).First();
                var routerDb = new RouterDb();
                using (var osmFileStream = osmFile.OpenRead())
                {
                    OsmStreamSource source;
                    if (osmFile.FullName.EndsWith(".osm"))
                    {
                        source = new XmlOsmStreamSource(osmFileStream);
                    }
                    else
                    {
                        source = new PBFOsmStreamSource(osmFileStream);
                    }

                    routerDb.LoadOsmData(source, profiles.ToArray());
                }
                var multimodalDb     = new MultimodalDb(routerDb, new TransitDb());
                var multimodalRouter = new MultimodalRouter(multimodalDb,
                                                            Itinero.Osm.Vehicles.Vehicle.Pedestrian.Fastest());
                var instance = new Instances.Instance(multimodalRouter);
                InstanceManager.Register(folder.Name, instance);

                Logger.Log("Bootstrapper", TraceEventType.Information,
                           "Loaded instance {1} from: {0}", folder.FullName, folder.Name);

                return(true);
            }
            catch (Exception ex)
            {
                Logger.Log("Bootstrapper", TraceEventType.Critical,
                           "Failed to load instance {1} from: {0}, {2}", folder.FullName, folder.Name, ex.ToInvariantString());
            }
            return(false);
        }