static void AddFromSourceOsmData(string osmFile, string osmTransitFile) { // load transit data formatted as osm data. using var transitSource = File.OpenRead(osmTransitFile); var osmTransitSource = new OsmSharp.Streams.BinaryOsmStreamSource(transitSource); using var source = File.OpenRead(osmFile); var osmSource = new OsmSharp.Streams.PBFOsmStreamSource(source); var merged = new OsmSharp.Streams.Filters.OsmStreamFilterMerge(); merged.RegisterSource(osmSource); merged.RegisterSource(osmTransitSource); // run through transit handler filter. var transitFilter = new TransitDataHandlerOsmStream((osmGeo) => { if (osmGeo.Tags != null && osmGeo.Tags.Contains("source", "ANYWAYS:transitdb")) { return(true); } return(false); }); transitFilter.RegisterSource(merged); // build routerdb. var routerDb = new RouterDb(); routerDb.LoadOsmData(transitFilter, Vehicle.Bicycle); // after routerdb is finished, use filtered data to properly add transit data. routerDb.AddPublicTransport(transitFilter, new IProfileInstance[] { Vehicle.Bicycle.Fastest() }); // write the result. routerDb.WriteToShape("output.shp"); }
public static void Main(string[] args) { // enable logging. OsmSharp.Logging.Logger.LogAction = (origin, level, message, parameters) => { var formattedMessage = $"{origin} - {message}"; switch (level) { case "critical": Log.Fatal(formattedMessage); break; case "error": Log.Error(formattedMessage); break; case "warning": Log.Warning(formattedMessage); break; case "verbose": Log.Verbose(formattedMessage); break; case "information": Log.Information(formattedMessage); break; default: Log.Debug(formattedMessage); break; } }; Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() .WriteTo.Console() .WriteTo.File(Path.Combine("logs", "log-.txt"), rollingInterval: RollingInterval.Day) .CreateLogger(); // download test data. Download.ToFile("http://files.itinero.tech/data/OSM/planet/europe/luxembourg-latest.osm.pbf", "test.osm.pbf").Wait(); // test read/writing an existing OSM file. Log.Information("Testing reading/writing via OSM binary format..."); using (var sourceStream = File.OpenRead("test.osm.pbf")) using (var targetStream = File.Open("test1.osm.bin", FileMode.Create)) { var source = new OsmSharp.Streams.PBFOsmStreamSource(sourceStream); var target = new OsmSharp.Streams.BinaryOsmStreamTarget(targetStream); target.RegisterSource(source); target.Pull(); } using (var sourceStream = File.OpenRead("test1.osm.bin")) using (var targetStream = File.Open("test2.osm.pbf", FileMode.Create)) { var source = new OsmSharp.Streams.BinaryOsmStreamSource(sourceStream); var target = new OsmSharp.Streams.PBFOsmStreamTarget(targetStream); target.RegisterSource(source); target.Pull(); } // test read/writing an existing OSM file via a compressed stream. Log.Information("Testing reading/writing via OSM binary format using a compressed stream..."); using (var sourceStream = File.OpenRead("test.osm.pbf")) using (var targetStream = File.Open("test2.osm.bin.zip", FileMode.Create)) using (var targetStreamCompressed = new System.IO.Compression.DeflateStream(targetStream, CompressionLevel.Fastest)) { var source = new OsmSharp.Streams.PBFOsmStreamSource(sourceStream); var target = new OsmSharp.Streams.BinaryOsmStreamTarget(targetStreamCompressed); target.RegisterSource(source); target.Pull(); } using (var sourceStream = File.OpenRead("test2.osm.bin.zip")) using (var sourceStreamCompressed = new System.IO.Compression.DeflateStream(sourceStream, CompressionMode.Decompress)) using (var targetStream = File.Open("test2.osm.pbf", FileMode.Create)) { var source = new OsmSharp.Streams.BinaryOsmStreamSource(sourceStreamCompressed); var target = new OsmSharp.Streams.PBFOsmStreamTarget(targetStream); target.RegisterSource(source); target.Pull(); } // test reading/writing edited OSM-data. Log.Information("Testing reading/writing via OSM binary format of edited incomplete OSM data..."); using (var sourceStream = File.OpenRead("./test-data/data.osm")) using (var targetStream = File.Open("test3.osm.bin", FileMode.Create)) { var source = new OsmSharp.Streams.XmlOsmStreamSource(sourceStream); var target = new OsmSharp.Streams.BinaryOsmStreamTarget(targetStream); target.RegisterSource(source); target.Pull(); } using (var sourceStream = File.OpenRead("test3.osm.bin")) using (var targetStream = File.Open("test2.osm.pbf", FileMode.Create)) { var source = new OsmSharp.Streams.BinaryOsmStreamSource(sourceStream); var target = new OsmSharp.Streams.PBFOsmStreamTarget(targetStream); target.RegisterSource(source); target.Pull(); } }