/// <summary> /// Creates a router. /// </summary> /// <param name="interpreter"></param> /// <param name="manifestResourceName"></param> /// <returns></returns> protected override Router CreateRouter(IOsmRoutingInterpreter interpreter, string manifestResourceName) { TagsTableCollectionIndex tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var data = new DynamicGraphRouterDataSource <CHEdgeData>(new MemoryDirectedGraph <CHEdgeData>(), tagsIndex); var targetData = new CHEdgeGraphOsmStreamTarget( data, interpreter, tagsIndex, Vehicle.Car); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(manifestResourceName)); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); // do the pre-processing part. var witnessCalculator = new DykstraWitnessCalculator(); var preProcessor = new CHPreProcessor(data, new EdgeDifferenceContractedSearchSpace(data, witnessCalculator), witnessCalculator); preProcessor.Start(); return(Router.CreateCHFrom(data, new CHRouter(), interpreter)); }
public void RoutingRegressionTest1() { var interpreter = new OsmRoutingInterpreter(); var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var memoryData = new DynamicGraphRouterDataSource<LiveEdge>(tagsIndex); var targetData = new LiveGraphOsmStreamTarget(memoryData, interpreter, tagsIndex); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream("OsmSharp.Test.Unittests.test_routing_regression1.osm")); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); var basicRouter = new Dykstra(); var router = Router.CreateLiveFrom(memoryData, basicRouter, interpreter); // resolve the three points in question. var point35 = new GeoCoordinate(51.01257, 4.000753); var point35resolved = router.Resolve(Vehicle.Car, point35); var point45 = new GeoCoordinate(51.01315, 3.999588); var point45resolved = router.Resolve(Vehicle.Car, point45); // route between 35 and 45. var routebefore = router.Calculate(Vehicle.Car, point35resolved, point45resolved); // route between 35 and 45. var routeafter = router.Calculate(Vehicle.Car, point35resolved, point45resolved); Assert.AreEqual(routebefore.TotalDistance, routeafter.TotalDistance); }
public void TestIsVertexValidRoundaboutExit() { var tags = new TagsTableCollectionIndex(); var graph = new DynamicGraphRouterDataSource <LiveEdge>(tags); var vertex1 = graph.AddVertex(0, 0); var vertex2 = graph.AddVertex(1, 1); var vertex3 = graph.AddVertex(2, 2); var vertex4 = graph.AddVertex(3, 3); var edge = new LiveEdge() { Distance = 100, Forward = true, Tags = tags.Add(new TagsCollection( Tag.Create("highway", "tertiary"))) }; var onwayEdge = new LiveEdge() { Distance = 100, Forward = true, Tags = tags.Add(new TagsCollection( Tag.Create("highway", "tertiary"), Tag.Create("oneway", "yes"))) }; graph.AddEdge(vertex1, vertex2, onwayEdge, null); graph.AddEdge(vertex2, vertex3, edge, null); graph.AddEdge(vertex2, vertex4, onwayEdge, null); var encoder = new OpenLR.Referenced.Osm.ReferencedOsmEncoder(new BasicRouterDataSource <LiveEdge>(graph), new EncoderMock()); Assert.IsTrue(encoder.IsVertexValid(vertex3)); }
public void TestRandomBlockTagSerializatonNonBeginPosition() { TagsTableCollectionIndex tagsIndex = new TagsTableCollectionIndex(); TagsCollection tagsCollection = new TagsCollection(); for (int i = 0; i < 100; i++) { int tagCollectionSize = OsmSharp.Math.Random.StaticRandomGenerator.Get().Generate(10) + 1; for (int idx = 0; idx < tagCollectionSize; idx++) { int tagValue = OsmSharp.Math.Random.StaticRandomGenerator.Get().Generate(10); tagsCollection.Add( string.Format("key_{0}", tagValue), string.Format("value_{0}", tagValue)); } uint tagsId = tagsIndex.Add(tagsCollection); } ITagsCollectionIndexReadonly tagsIndexReadonly = this.SerializeDeserializeBlock(tagsIndex, 10, 123); Assert.AreEqual(tagsIndex.Max, tagsIndexReadonly.Max); for (uint idx = 0; idx < tagsIndex.Max; idx++) { ComparisonHelpers.CompareTags(tagsIndex.Get(idx), tagsIndexReadonly.Get(idx)); } }
/// <summary> /// Executes the tests. /// </summary> public static void Test() { TagsTableCollectionIndex index = new TagsTableCollectionIndex(); // first fill the index. ITagCollectionIndexTests.FillIndex(index, 100000); // serialize the index. FileInfo testFile = new FileInfo(@"test.file"); testFile.Delete(); Stream writeStream = testFile.OpenWrite(); OsmSharp.Logging.Log.TraceEvent("Blocked", OsmSharp.Logging.TraceEventType.Information, "Serializing blocked file...."); TagIndexSerializer.SerializeBlocks(writeStream, index, 100); writeStream.Flush(); writeStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("Blocked", OsmSharp.Logging.TraceEventType.Information, string.Format("Serialized file: {0}KB", testFile.Length / 1024)); // deserialize the index. Stream readStream = testFile.OpenRead(); ITagsCollectionIndexReadonly readOnlyIndex = TagIndexSerializer.DeserializeBlocks(readStream); // test access. OsmSharp.Logging.Log.TraceEvent("Blocked", OsmSharp.Logging.TraceEventType.Information, "Started testing random access...."); ITagCollectionIndexTests.TestRandomAccess("Blocked", readOnlyIndex, 1000); readStream.Dispose(); testFile.Delete(); }
/// <summary> /// Builds data source. /// </summary> /// <param name="interpreter"></param> /// <param name="embeddedString"></param> /// <returns></returns> public override IBasicRouterDataSource <LiveEdge> BuildData(IOsmRoutingInterpreter interpreter, string embeddedString) { string key = string.Format("Dykstra.Routing.IBasicRouterDataSource<SimpleWeighedEdge>.OSM.{0}", embeddedString); var data = StaticDictionary.Get <IBasicRouterDataSource <LiveEdge> >( key); if (data == null) { var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var memoryData = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex); var targetData = new LiveGraphOsmStreamTarget(memoryData, interpreter, tagsIndex); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedString)); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); data = memoryData; StaticDictionary.Add <IBasicRouterDataSource <LiveEdge> >(key, data); } return(data); }
/// <summary> /// Builds the data. /// </summary> /// <param name="interpreter"></param> /// <param name="embeddedString"></param> /// <returns></returns> public override IBasicRouterDataSource <CHEdgeData> BuildData(IOsmRoutingInterpreter interpreter, string embeddedString) { string key = string.Format("CHEdgeDifference.Routing.IBasicRouterDataSource<CHEdgeData>.OSM.{0}", embeddedString); var data = StaticDictionary.Get <IBasicRouterDataSource <CHEdgeData> >( key); if (data == null) { var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var memoryData = new DynamicGraphRouterDataSource <CHEdgeData>(tagsIndex); var targetData = new CHEdgeGraphOsmStreamTarget( memoryData, interpreter, tagsIndex, Vehicle.Car); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedString)); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); // do the pre-processing part. var witnessCalculator = new DykstraWitnessCalculator(); var preProcessor = new CHPreProcessor(memoryData, new EdgeDifference(memoryData, witnessCalculator), witnessCalculator); preProcessor.Start(); data = memoryData; StaticDictionary.Add <IBasicRouterDataSource <CHEdgeData> >(key, data); } return(data); }
public void TestRandomBlockTagSerializatonNonBeginPositionLimitedStreamRegression() { TagsTableCollectionIndex tagsIndex = new TagsTableCollectionIndex(); TagsCollection tagsCollection = new TagsCollection(); for (int i = 0; i < 101; i++) { int tagCollectionSize = OsmSharp.Math.Random.StaticRandomGenerator.Get().Generate(10) + 1; for (int idx = 0; idx < tagCollectionSize; idx++) { int tagValue = OsmSharp.Math.Random.StaticRandomGenerator.Get().Generate(10); tagsCollection.Add( string.Format("key_{0}", tagValue), string.Format("value_{0}", tagValue)); } uint tagsId = tagsIndex.Add(tagsCollection); } ITagsCollectionIndexReadonly tagsIndexReadonly = this.SerializeDeserializeBlockLimitedStream(tagsIndex, 10, 123); Assert.AreEqual(tagsIndex.Max, tagsIndexReadonly.Max); for (uint idx = 0; idx < tagsIndex.Max; idx++) { ComparisonHelpers.CompareTags(tagsIndex.Get(idx), tagsIndexReadonly.Get(idx)); } }
/// <summary> /// Executes the CH contractions while verifying each step. /// </summary> /// <param name="stream"></param> public void DoTestCHEdgeDifferenceVerifiedContraction(Stream stream) { _interpreter = new OsmRoutingInterpreter(); var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. _data = new DynamicGraphRouterDataSource <CHEdgeData>(tagsIndex); var targetData = new CHEdgeGraphOsmStreamTarget( _data, _interpreter, tagsIndex, Vehicle.Car); var dataProcessorSource = new XmlOsmStreamSource(stream); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); // do the pre-processing part. var witnessCalculator = new DykstraWitnessCalculator(); var preProcessor = new CHPreProcessor(_data, new EdgeDifference(_data, witnessCalculator), witnessCalculator); preProcessor.OnBeforeContractionEvent += new CHPreProcessor.VertexDelegate(pre_processor_OnBeforeContractionEvent); preProcessor.OnAfterContractionEvent += new CHPreProcessor.VertexDelegate(pre_processor_OnAfterContractionEvent); preProcessor.Start(); }
/// <summary> /// Creates a router. /// </summary> /// <param name="interpreter"></param> /// <param name="manifestResourceName"></param> /// <returns></returns> protected override Router CreateRouter(IOsmRoutingInterpreter interpreter, string manifestResourceName) { var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var source = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(manifestResourceName)); var data = CHEdgeGraphOsmStreamTarget.Preprocess( source, new OsmRoutingInterpreter(), Vehicle.Car); // serialize. var memoryStream = new MemoryStream(); TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); var routingSerializer = new CHEdgeDataDataSourceSerializer(); routingSerializer.Serialize(memoryStream, data, metaData); memoryStream.Seek(0, SeekOrigin.Begin); var deserialized = routingSerializer.Deserialize(memoryStream); return(Router.CreateCHFrom(deserialized, new CHRouter(), new OsmRoutingInterpreter())); }
/// <summary> /// Builds the data. /// </summary> /// <param name="interpreter"></param> /// <param name="embeddedString"></param> /// <returns></returns> public override IBasicRouterDataSource <CHEdgeData> BuildData(IOsmRoutingInterpreter interpreter, string embeddedString) { var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var memoryData = new DynamicGraphRouterDataSource <CHEdgeData>(tagsIndex); var targetData = new CHEdgeGraphOsmStreamTarget( memoryData, interpreter, tagsIndex, Vehicle.Car); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedString)); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); // do the pre-processing part. var preProcessor = new CHPreProcessor(memoryData, new SparseOrdering(memoryData), new DykstraWitnessCalculator()); preProcessor.Start(); return(memoryData); }
public void TestOneHop() { // build test data. var tagsIndex = new TagsTableCollectionIndex(); var tags = new TagsCollection(new Tag() { Key = "highway", Value = "residential" }); var tagsId = tagsIndex.Add(tags); var graph = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex); var vertex1 = graph.AddVertex(50.909909938361324f, 4.452434778213501f); var vertex2 = graph.AddVertex(50.916698097895550f, 4.459059834480286f); graph.AddEdge(vertex1, vertex2, new LiveEdge() { Distance = 890.65f, Forward = true, Tags = tagsId }); // calculate route. var router = new BasicRouter(); var route = router.Calculate(new BasicRouterDataSource <LiveEdge>(graph), OsmSharp.Routing.Vehicle.Car, vertex1, vertex2, true); // verify result. Assert.IsNotNull(route); Assert.AreEqual(vertex2, route.Vertex); Assert.AreEqual(OsmSharp.Routing.Vehicle.Car.Weight(tags, 890.65f), route.Weight); Assert.AreEqual(vertex1, route.From.Vertex); Assert.AreEqual(0, route.From.Weight); }
/// <summary> /// Tests preprocessing data from a PBF file. /// </summary> /// <param name="name"></param> /// <param name="pbfFile"></param> public static void TestPreprocessing(string name, string pbfFile) { FileInfo testFile = new FileInfo(string.Format(@".\TestFiles\{0}", pbfFile)); Stream stream = testFile.OpenRead(); var progress = new OsmStreamFilterProgress(); progress.RegisterSource(new PBFOsmStreamSource(stream)); var performanceInfo = new PerformanceInfoConsumer("LivePreProcessor", 20000); performanceInfo.Start(); performanceInfo.Report("Pulling from {0}...", testFile.Name); var tagsIndex = new TagsTableCollectionIndex(); // creates a tagged index. // read from the OSM-stream. var memoryGraph = new MemoryMappedFileDynamicGraph <LiveEdge>(1000000, @"c:\temp\"); var memoryData = new DynamicGraphRouterDataSource <LiveEdge>(memoryGraph, tagsIndex); var targetData = new LiveGraphOsmStreamTarget(memoryData, new OsmRoutingInterpreter(), tagsIndex); targetData.RegisterSource(progress); targetData.Pull(); stream.Dispose(); performanceInfo.Stop(); // make sure the router is still here after GC to note the memory difference. OsmSharp.Logging.Log.TraceEvent("LivePreProcessor", Logging.TraceEventType.Information, memoryData.ToString()); memoryData = null; GC.Collect(); }
public void RoutingRegressionTest1() { var interpreter = new OsmRoutingInterpreter(); var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var memoryData = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex); var targetData = new LiveGraphOsmStreamTarget(memoryData, interpreter, tagsIndex); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream("OsmSharp.Test.Unittests.test_routing_regression1.osm")); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); var basicRouter = new DykstraRoutingLive(); var router = Router.CreateLiveFrom(memoryData, basicRouter, interpreter); // resolve the three points in question. var point35 = new GeoCoordinate(51.01257, 4.000753); var point35resolved = router.Resolve(Vehicle.Car, point35); var point45 = new GeoCoordinate(51.01315, 3.999588); var point45resolved = router.Resolve(Vehicle.Car, point45); // route between 35 and 45. var routebefore = router.Calculate(Vehicle.Car, point35resolved, point45resolved); // route between 35 and 45. var routeafter = router.Calculate(Vehicle.Car, point35resolved, point45resolved); Assert.AreEqual(routebefore.TotalDistance, routeafter.TotalDistance); }
/// <summary> /// Creates the tags collection index. /// </summary> /// <returns></returns> protected virtual ITagsCollectionIndex CreateTagsCollectionIndex() { var tagsTable = new TagsTableCollectionIndex(false, true); // tagsTable.DropReverseIndexex(); return(tagsTable); }
/// <summary> /// Returns a new router. /// </summary> /// <param name="interpreter"></param> /// <param name="embeddedName"></param> /// <param name="contract"></param> /// <returns></returns> public override Router BuildRouter(IOsmRoutingInterpreter interpreter, string embeddedName, bool contract) { if (_data == null) { _data = new Dictionary <string, DynamicGraphRouterDataSource <LiveEdge> >(); } DynamicGraphRouterDataSource <LiveEdge> data = null; if (!_data.TryGetValue(embeddedName, out data)) { var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. data = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex); var targetData = new LiveGraphOsmStreamTarget( data, interpreter, tagsIndex, new Vehicle[] { Vehicle.Car }, false); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(string.Format( "OsmSharp.Test.Unittests.{0}", embeddedName))); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); _data[embeddedName] = data; } return(Router.CreateLiveFrom(data, new Dykstra(), interpreter)); }
public void TestTwoNeighboursOneWay() { var tags = new TagsTableCollectionIndex(); var graph = new DynamicGraphRouterDataSource <LiveEdge>(tags); var vertex1 = graph.AddVertex(0, 0); var vertex2 = graph.AddVertex(1, 1); var vertex3 = graph.AddVertex(2, 2); var edge = new LiveEdge() { Distance = 100, Forward = true, Tags = tags.Add(new TagsCollection( Tag.Create("FOW", "2"), Tag.Create("FRC", "3"), Tag.Create("ONEWAY", "FT"))) }; graph.AddEdge(vertex1, vertex2, edge, null); graph.AddEdge(vertex2, vertex3, edge, null); var encoder = new OpenLR.Referenced.MultiNet.ReferencedMultiNetEncoder(new BasicRouterDataSource <LiveEdge>(graph), new EncoderMock()); Assert.IsFalse(encoder.IsVertexValid(vertex2)); }
/// <summary> /// Returns a new router. /// </summary> /// <param name="interpreter"></param> /// <param name="embeddedName"></param> /// <param name="contract"></param> /// <returns></returns> public override Router BuildRouter(IOsmRoutingInterpreter interpreter, string embeddedName, bool contract) { if (_data == null) { _data = new Dictionary <string, DynamicGraphRouterDataSource <CHEdgeData> >(); } DynamicGraphRouterDataSource <CHEdgeData> data = null; if (!_data.TryGetValue(embeddedName, out data)) { var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. data = new DynamicGraphRouterDataSource <CHEdgeData>(tagsIndex); var targetData = new CHEdgeGraphOsmStreamTarget( data, interpreter, tagsIndex, Vehicle.Car); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(string.Format( "OsmSharp.Test.Unittests.{0}", embeddedName))); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); // do the pre-processing part. var preProcessor = new CHPreProcessor(data, new SparseOrdering(data), new DykstraWitnessCalculator()); preProcessor.Start(); _data[embeddedName] = data; } return(Router.CreateCHFrom(data, new CHRouter(), interpreter)); }
/// <summary> /// Tests routing from a serialized routing file. /// </summary> /// <param name="name"></param> /// <param name="stream"></param> /// <param name="testCount"></param> public static void TestSerializedRouting(string name, Stream stream, int testCount) { var vehicle = Vehicle.Car; var tagsIndex = new TagsTableCollectionIndex(); // creates a tagged index. // read from the OSM-stream. var reader = new OsmSharp.Osm.PBF.Streams.PBFOsmStreamSource(stream); var interpreter = new OsmRoutingInterpreter(); var data = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex); data.DropVertexIndex(); var targetData = new LiveGraphOsmStreamTarget(data, interpreter, tagsIndex); targetData.RegisterSource(reader); targetData.Pull(); data.RebuildVertexIndex(); // creates the live edge router. var router = new Dykstra(); var performanceInfo = new PerformanceInfoConsumer("LiveRouting"); performanceInfo.Start(); performanceInfo.Report("Routing {0} routes...", testCount); var successCount = 0; var totalCount = testCount; var latestProgress = -1.0f; while (testCount > 0) { var from = (uint)OsmSharp.Math.Random.StaticRandomGenerator.Get().Generate(data.VertexCount - 1) + 1; var to = (uint)OsmSharp.Math.Random.StaticRandomGenerator.Get().Generate(data.VertexCount - 1) + 1; var route = router.Calculate(data, interpreter, vehicle, from, to); if (route != null) { successCount++; } testCount--; // report progress. var progress = (float)System.Math.Round(((double)(totalCount - testCount) / (double)totalCount) * 100); if (progress != latestProgress) { OsmSharp.Logging.Log.TraceEvent("LiveRouting", TraceEventType.Information, "Routing... {0}%", progress); latestProgress = progress; } } performanceInfo.Stop(); OsmSharp.Logging.Log.TraceEvent("LiveRouting", OsmSharp.Logging.TraceEventType.Information, string.Format("{0}/{1} routes successfull!", successCount, totalCount)); }
/// <summary> /// /// </summary> /// <param name="stream"></param> /// <param name="vehicle"></param> public CHEdgeGraphFileStreamTarget(Stream stream, Vehicle vehicle) { _graphStream = stream; var tagsIndex = new TagsTableCollectionIndex(); var interpreter = new OsmRoutingInterpreter(); _graph = new DynamicGraphRouterDataSource <CHEdgeData>(tagsIndex); _graphTarget = new CHEdgeGraphOsmStreamTarget( _graph, interpreter, tagsIndex, vehicle); }
/// <summary> /// Tests routing from a serialized routing file. /// </summary> /// <param name="name"></param> /// <param name="stream"></param> /// <param name="testCount"></param> public static void TestSerializedRouting(string name, Stream stream, int testCount) { var vehicle = Vehicle.Car; var tagsIndex = new TagsTableCollectionIndex(); // creates a tagged index. // read from the OSM-stream. var reader = new OsmSharp.Osm.PBF.Streams.PBFOsmStreamSource(stream); var interpreter = new OsmRoutingInterpreter(); var data = new DynamicGraphRouterDataSource<LiveEdge>(tagsIndex); data.DropVertexIndex(); var targetData = new LiveGraphOsmStreamTarget(data, interpreter, tagsIndex); targetData.RegisterSource(reader); targetData.Pull(); data.RebuildVertexIndex(); // creates the live edge router. var router = new Dykstra(); var performanceInfo = new PerformanceInfoConsumer("LiveRouting"); performanceInfo.Start(); performanceInfo.Report("Routing {0} routes...", testCount); var successCount = 0; var totalCount = testCount; var latestProgress = -1.0f; while (testCount > 0) { var from = (uint)OsmSharp.Math.Random.StaticRandomGenerator.Get().Generate(data.VertexCount - 1) + 1; var to = (uint)OsmSharp.Math.Random.StaticRandomGenerator.Get().Generate(data.VertexCount - 1) + 1; var route = router.Calculate(data, interpreter, vehicle, from, to); if (route != null) { successCount++; } testCount--; // report progress. var progress = (float)System.Math.Round(((double)(totalCount - testCount) / (double)totalCount) * 100); if (progress != latestProgress) { OsmSharp.Logging.Log.TraceEvent("LiveRouting", TraceEventType.Information, "Routing... {0}%", progress); latestProgress = progress; } } performanceInfo.Stop(); OsmSharp.Logging.Log.TraceEvent("LiveRouting", OsmSharp.Logging.TraceEventType.Information, string.Format("{0}/{1} routes successfull!", successCount, totalCount)); }
/// <summary> /// Executes the tests. /// </summary> public static void Test() { TagsTableCollectionIndex index = new TagsTableCollectionIndex(); // execute the standard tests on this index. ITagCollectionIndexTests.Test("Table", index, 100000, 10000000); // start over. index = new TagsTableCollectionIndex(); // execute the standard tests on this index. ITagCollectionIndexTests.Test("Table", index, "kempen-big.osm.pbf"); }
/// <summary> /// Executes the tests. /// </summary> public static void Test() { TagsTableCollectionIndex index = new TagsTableCollectionIndex(); // execute the standard tests on this index. ITagCollectionIndexTests.Test("Table", index, 100000, 10000000); // start over. index = new TagsTableCollectionIndex(); // execute the standard tests on this index. ITagCollectionIndexTests.Test("Table", index, "kempen.osm.pbf"); }
/// <summary> /// Tests routing from a serialized routing file. /// </summary> /// <param name="name"></param> /// <param name="stream"></param> /// <param name="testCount"></param> public static void TestRouting(string name, Stream stream, int testCount) { var vehicle = Vehicle.Car; var tagsIndex = new TagsTableCollectionIndex(); // creates a tagged index. // read from the OSM-stream. var source = new OsmSharp.Osm.Streams.Filters.OsmStreamFilterProgress(); source.RegisterSource(new OsmSharp.Osm.PBF.Streams.PBFOsmStreamSource(stream)); var data = CHEdgeGraphOsmStreamTarget.Preprocess(source, new OsmRoutingInterpreter(), vehicle); var router = new CHRouter(); var performanceInfo = new PerformanceInfoConsumer("CHRouting"); performanceInfo.Start(); performanceInfo.Report("Routing {0} routes...", testCount); var successCount = 0; var totalCount = testCount; var latestProgress = -1.0f; while (testCount > 0) { var from = (uint)OsmSharp.Math.Random.StaticRandomGenerator.Get().Generate(data.VertexCount - 1) + 1; var to = (uint)OsmSharp.Math.Random.StaticRandomGenerator.Get().Generate(data.VertexCount - 1) + 1; var route = router.Calculate(data, from, to); if (route != null) { successCount++; } testCount--; // report progress. var progress = (float)System.Math.Round(((double)(totalCount - testCount) / (double)totalCount) * 100); if (progress != latestProgress) { OsmSharp.Logging.Log.TraceEvent("CHRouting", TraceEventType.Information, "Routing... {0}%", progress); latestProgress = progress; } } performanceInfo.Stop(); OsmSharp.Logging.Log.TraceEvent("CHRouting", OsmSharp.Logging.TraceEventType.Information, string.Format("{0}/{1} routes successfull!", successCount, totalCount)); }
public void RoutingRegressionTest9ResolvingReverse() { // build a graph to encode from. var tags = new TagsTableCollectionIndex(); var graphDataSource = new DynamicGraphRouterDataSource <LiveEdge>(tags); var vertex1 = graphDataSource.AddVertex(51.05849821468899f, 3.7240000000000000f); var vertex2 = graphDataSource.AddVertex(51.05849821468899f, 3.7254400000000000f); var vertex3 = graphDataSource.AddVertex(51.05849821468899f, 3.7225627899169926f); var edge = new LiveEdge() // all edges are identical. { Distance = 100, Forward = true, Tags = tags.Add(new TagsCollection( Tag.Create("highway", "tertiary"), Tag.Create("oneway", "yes"))) }; graphDataSource.AddEdge(vertex1, vertex2, edge, null); graphDataSource.AddEdge(vertex3, vertex1, edge, null); // {RectF:[(3,71326552867889,51,048498214689),(3,73326552867889,51,068498214689)]} var edges = graphDataSource.GetEdges(new GeoCoordinateBox( new GeoCoordinate(51.068498214689, 3.73326552867889), new GeoCoordinate(51.048498214689, 3.71326552867889))); while (edges.MoveNext()) { if (edges.Vertex1 == 1 && edges.Vertex2 == 2) { Assert.IsTrue(edges.EdgeData.Forward); } else if (edges.Vertex1 == 2 && edges.Vertex2 == 1) { Assert.IsFalse(edges.EdgeData.Forward); } if (edges.Vertex1 == 1 && edges.Vertex2 == 3) { Assert.IsFalse(edges.EdgeData.Forward); } else if (edges.Vertex1 == 3 && edges.Vertex2 == 1) { Assert.IsTrue(edges.EdgeData.Forward); } } }
/// <summary> /// Creates a router using live interpreted edges. /// </summary> /// <param name="reader">The data to route on.</param> /// <param name="interpreter">The routing interpreter.</param> /// <param name="vehicle">The vehicle profile.</param> /// <returns></returns> public static Router CreateCHFrom(OsmStreamSource reader, IOsmRoutingInterpreter interpreter, Vehicle vehicle) { var tagsIndex = new TagsTableCollectionIndex(); // creates a tagged index. // read from the OSM-stream. DynamicGraphRouterDataSource <CHEdgeData> data = CHEdgeGraphOsmStreamTarget.Preprocess( reader, interpreter, vehicle); // creates the live edge router. var liveEdgeRouter = new TypedRouterCHEdge( data, interpreter, new CHRouter()); return(new Router(liveEdgeRouter)); // create the actual router. }
/// <summary> /// Tests preprocessing data from a PBF file. /// </summary> /// <param name="name"></param> /// <param name="pbfFile"></param> public static void TestSerialization(string name, string pbfFile) { var testFile = new FileInfo(string.Format(@".\TestFiles\{0}", pbfFile)); var stream = testFile.OpenRead(); var source = new PBFOsmStreamSource(stream); var testOutputFile = new FileInfo(@"test.routing"); testOutputFile.Delete(); Stream writeStream = testOutputFile.OpenWrite(); var tagsIndex = new TagsTableCollectionIndex(); var interpreter = new OsmRoutingInterpreter(); var graph = new DynamicGraphRouterDataSource <CHEdgeData>(tagsIndex); var performanceInfo = new PerformanceInfoConsumer("CHSerializerFlatFile.Serialize"); performanceInfo.Start(); performanceInfo.Report("Pulling from {0}...", testFile.Name); var data = CHEdgeGraphOsmStreamTarget.Preprocess( source, new OsmRoutingInterpreter(), Vehicle.Car); var metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); var routingSerializer = new CHEdgeFlatfileSerializer(); routingSerializer.Serialize(writeStream, data, metaData); stream.Dispose(); writeStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("CHSerializerFlatFile", OsmSharp.Logging.TraceEventType.Information, string.Format("Serialized file: {0}KB", testOutputFile.Length / 1024)); performanceInfo.Stop(); performanceInfo = new PerformanceInfoConsumer("CHSerializerFlatFile.Deserialize"); performanceInfo.Start(); performanceInfo.Report("Deserializing again..."); // open file again and read. writeStream = testOutputFile.OpenRead(); var deserializedGraph = routingSerializer.Deserialize(writeStream); performanceInfo.Stop(); }
/// <summary> /// Creates a router using live interpreted edges. /// </summary> /// <param name="reader">The OSM-stream reader.</param> /// <param name="interpreter">The routing interpreter.</param> /// <returns></returns> public static Router CreateLiveFrom(OsmStreamSource reader, IOsmRoutingInterpreter interpreter) { var tagsIndex = new TagsTableCollectionIndex(); // creates a tagged index. // read from the OSM-stream. var memoryData = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex); var targetData = new LiveGraphOsmStreamTarget(memoryData, interpreter, tagsIndex); targetData.RegisterSource(reader); targetData.Pull(); // creates the live edge router. var liveEdgeRouter = new TypedRouterLiveEdge( memoryData, interpreter, new DykstraRoutingLive()); return(new Router(liveEdgeRouter)); // create the actual router. }
/// <summary> /// Tests preprocessing data from a PBF file. /// </summary> /// <param name="name"></param> /// <param name="pbfFile"></param> public static void TestSerialization(string name, string pbfFile) { var testFile = new FileInfo(string.Format(@".\TestFiles\{0}", pbfFile)); var stream = testFile.OpenRead(); var source = new OsmSharp.Osm.Streams.Filters.OsmStreamFilterProgress(); source.RegisterSource(new PBFOsmStreamSource(stream)); var testOutputFile = new FileInfo(@"test.pedestrian.routing"); testOutputFile.Delete(); Stream writeStream = testOutputFile.OpenWrite(); var tagsIndex = new TagsTableCollectionIndex(); var interpreter = new OsmRoutingInterpreter(); var graph = new DynamicGraphRouterDataSource<CHEdgeData>(tagsIndex); var performanceInfo = new PerformanceInfoConsumer("CHSerializerFlatFile.Serialize"); performanceInfo.Start(); performanceInfo.Report("Pulling from {0}...", testFile.Name); var data = CHEdgeGraphOsmStreamTarget.Preprocess( source, new OsmRoutingInterpreter(), Vehicle.Car); var metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); var routingSerializer = new CHEdgeFlatfileSerializer(); routingSerializer.Serialize(writeStream, data, metaData); stream.Dispose(); writeStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("CHSerializerFlatFile", OsmSharp.Logging.TraceEventType.Information, string.Format("Serialized file: {0}KB", testOutputFile.Length / 1024)); performanceInfo.Stop(); performanceInfo = new PerformanceInfoConsumer("CHSerializerFlatFile.Deserialize"); performanceInfo.Start(); performanceInfo.Report("Deserializing again..."); // open file again and read. writeStream = testOutputFile.OpenRead(); var deserializedGraph = routingSerializer.Deserialize(writeStream); performanceInfo.Stop(); }
/// <summary> /// Tests preprocessing data from a PBF file. /// </summary> /// <param name="name"></param> /// <param name="pbfFile"></param> public static void TestSerialization(string name, string pbfFile) { var testFile = new FileInfo(string.Format(@".\TestFiles\{0}", pbfFile)); var stream = testFile.OpenRead(); var source = new PBFOsmStreamSource(stream); var progress = new OsmStreamFilterProgress(); progress.RegisterSource(source); var testOutputFile = new FileInfo(@"test.routing"); testOutputFile.Delete(); Stream writeStream = testOutputFile.OpenWrite(); var tagsIndex = new TagsTableCollectionIndex(); var interpreter = new OsmRoutingInterpreter(); var graph = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex); var performanceInfo = new PerformanceInfoConsumer("LiveSerializerFlatFile.Serialize", 5000); performanceInfo.Start(); performanceInfo.Report("Pulling from {0}...", testFile.Name); // read from the OSM-stream. var memoryData = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex, 100000000); var targetData = new LiveGraphOsmStreamTarget(memoryData, new OsmRoutingInterpreter(), tagsIndex); targetData.RegisterSource(progress); targetData.Pull(); var metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); var routingSerializer = new LiveEdgeFlatfileSerializer(); routingSerializer.Serialize(writeStream, memoryData, metaData); stream.Dispose(); writeStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("CHSerializerFlatFile", OsmSharp.Logging.TraceEventType.Information, string.Format("Serialized file: {0}KB", testOutputFile.Length / 1024)); performanceInfo.Stop(); }
public void TestRoundaboutExit() { var tags = new TagsTableCollectionIndex(); var graph = new DynamicGraphRouterDataSource <LiveEdge>(tags); var vertex1 = graph.AddVertex(51.22069f, 5.88442f); var vertex2 = graph.AddVertex(51.22056f, 5.88426f); var vertex3 = graph.AddVertex(51.22046f, 5.88434f); var vertex4 = graph.AddVertex(51.22059f, 5.88414f); var edge1 = new LiveEdge() { Distance = 100, Forward = true, Tags = tags.Add(new TagsCollection( Tag.Create("ONEWAY", string.Empty), Tag.Create("FRC", "2"), Tag.Create("FOW", "3"))) }; var edge2 = new LiveEdge() { Distance = 100, Forward = true, Tags = tags.Add(new TagsCollection( Tag.Create("ONEWAY", "TF"), Tag.Create("FRC", "2"), Tag.Create("FOW", "4"))) }; var edge3 = new LiveEdge() { Distance = 100, Forward = true, Tags = tags.Add(new TagsCollection( Tag.Create("ONEWAY", "FT"), Tag.Create("FRC", "2"), Tag.Create("FOW", "4"))) }; graph.AddEdge(vertex1, vertex2, edge1, null); graph.AddEdge(vertex2, vertex3, edge2, null); graph.AddEdge(vertex2, vertex4, edge3, null); var encoder = new OpenLR.Referenced.MultiNet.ReferencedMultiNetEncoder(new BasicRouterDataSource <LiveEdge>(graph), new EncoderMock()); Assert.IsTrue(encoder.IsVertexValid(vertex2)); }
public void TestCarriageWaySplit() { var tags = new TagsTableCollectionIndex(); var graph = new DynamicGraphRouterDataSource <LiveEdge>(tags); var vertex1 = graph.AddVertex(51.22218f, 5.87950f); var vertex2 = graph.AddVertex(51.22183f, 5.88044f); var vertex3 = graph.AddVertex(51.22149f, 5.88149f); var vertex4 = graph.AddVertex(51.22144f, 5.88147f); var edge1 = new LiveEdge() { Distance = 100, Forward = true, Tags = tags.Add(new TagsCollection( Tag.Create("ONEWAY", string.Empty), Tag.Create("FRC", "2"), Tag.Create("FOW", "3"))) }; var edge2 = new LiveEdge() { Distance = 100, Forward = true, Tags = tags.Add(new TagsCollection( Tag.Create("ONEWAY", "TF"), Tag.Create("FRC", "2"), Tag.Create("FOW", "2"))) }; var edge3 = new LiveEdge() { Distance = 100, Forward = true, Tags = tags.Add(new TagsCollection( Tag.Create("ONEWAY", "FT"), Tag.Create("FRC", "2"), Tag.Create("FOW", "2"))) }; graph.AddEdge(vertex1, vertex2, edge1, null); graph.AddEdge(vertex2, vertex3, edge2, null); graph.AddEdge(vertex2, vertex4, edge3, null); var encoder = new OpenLR.Referenced.MultiNet.ReferencedMultiNetEncoder(new BasicRouterDataSource <LiveEdge>(graph), new EncoderMock()); Assert.IsFalse(encoder.IsVertexValid(vertex2)); }
/// <summary> /// Builds an in-memory data source from an xml data stream. /// </summary> /// <param name="stream"></param> /// <returns></returns> private DynamicGraphRouterDataSource <CHEdgeData> BuildData(Stream stream) { var interpreter = new OsmRoutingInterpreter(); var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var data = new DynamicGraphRouterDataSource <CHEdgeData>(tagsIndex); var targetData = new CHEdgeGraphOsmStreamTarget( data, interpreter, tagsIndex, Vehicle.Car); var dataProcessorSource = new XmlOsmStreamSource(stream); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); return(data); }
/// <summary> /// Tests preprocessing data from a PBF file. /// </summary> /// <param name="name"></param> /// <param name="pbfFile"></param> public static Stream TestSerialization(string name, string pbfFile) { FileInfo testFile = new FileInfo(string.Format(@".\TestFiles\{0}", pbfFile)); Stream stream = testFile.OpenRead(); PBFOsmStreamSource source = new PBFOsmStreamSource(stream); FileInfo testOutputFile = new FileInfo(@"test.routing"); testOutputFile.Delete(); Stream writeStream = testOutputFile.OpenWrite(); var tagsIndex = new TagsTableCollectionIndex(); var interpreter = new OsmRoutingInterpreter(); var graph = new DynamicGraphRouterDataSource <CHEdgeData>(tagsIndex); CHEdgeGraphFileStreamTarget target = new CHEdgeGraphFileStreamTarget(writeStream, graph, interpreter, tagsIndex, Vehicle.Car); target.RegisterSource(source); PerformanceInfoConsumer performanceInfo = new PerformanceInfoConsumer("CHSerializer"); performanceInfo.Start(); performanceInfo.Report("Pulling from {0}...", testFile.Name); var data = CHEdgeGraphOsmStreamTarget.Preprocess( source, new OsmRoutingInterpreter(), Vehicle.Car); TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); var routingSerializer = new CHEdgeDataDataSourceSerializer(); routingSerializer.Serialize(writeStream, data, metaData); stream.Dispose(); writeStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("CHSerializer", OsmSharp.Logging.TraceEventType.Information, string.Format("Serialized file: {0}KB", testOutputFile.Length / 1024)); performanceInfo.Stop(); return(testOutputFile.OpenRead()); }
public void TestSimpleTagSerializatonNonBeginPosition() { TagsTableCollectionIndex tagsIndex = new TagsTableCollectionIndex(); TagsCollection tagsCollection = new TagsCollection(); tagsCollection.Add("key1", "value1"); uint tagsId = tagsIndex.Add(tagsCollection); ITagsCollectionIndexReadonly tagsIndexReadonly = this.SerializeDeserialize(tagsIndex, 1201); Assert.AreEqual(tagsIndex.Max, tagsIndexReadonly.Max); for (uint idx = 0; idx < tagsIndex.Max; idx++) { ComparisonHelpers.CompareTags(tagsIndex.Get(idx), tagsIndexReadonly.Get(idx)); } }
/// <summary> /// Tests the edge matcher in combination with dykstra routing. /// </summary> /// <param name="name"></param> /// <param name="highway"></param> /// <param name="vehicle"></param> /// <param name="matcher"></param> /// <param name="pointName"></param> /// <param name="notFound"></param> private void TestResolveOnEdgeSingle(string name, string highway, Vehicle vehicle, IEdgeMatcher matcher, string pointName, bool notFound) { var fromName = new GeoCoordinate(51.0003, 4.0007); var toName = new GeoCoordinate(51.0003, 4.0008); var fromNoname = new GeoCoordinate(51.0, 4.0007); var toNoname = new GeoCoordinate(51.0, 4.0008); TagsCollectionBase pointTags = new TagsCollection(); pointTags["name"] = pointName; TagsCollectionBase tags = new TagsCollection(); tags["highway"] = highway; //tags["name"] = name; var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var data = new DynamicGraphRouterDataSource<LiveEdge>(tagsIndex); uint vertexNoname1 = data.AddVertex((float)fromNoname.Latitude, (float)fromNoname.Longitude); uint vertexNoname2 = data.AddVertex((float)toNoname.Latitude, (float)toNoname.Longitude); data.AddEdge(vertexNoname1, vertexNoname2, new LiveEdge() { Forward = true, Tags = tagsIndex.Add(tags) }, null); tags = new TagsCollection(); tags["highway"] = highway; tags["name"] = name; uint vertexName1 = data.AddVertex((float)fromName.Latitude, (float)fromName.Longitude); uint vertexName2 = data.AddVertex((float)toName.Latitude, (float)toName.Longitude); data.AddEdge(vertexName1, vertexName2, new LiveEdge() { Forward = true, Tags = tagsIndex.Add(tags) }, null); IRoutingInterpreter interpreter = new OsmRoutingInterpreter(); // creates the data. IRoutingAlgorithm<LiveEdge> router = new Dykstra(); var nonameLocation = new GeoCoordinate( (fromNoname.Latitude + toNoname.Latitude) / 2.0, (fromNoname.Longitude + toNoname.Longitude) / 2.0); // var nameLocation = new GeoCoordinate( // (fromName.Latitude + toName.Latitude) / 2.0, // (fromName.Longitude + toName.Longitude) / 2.0); const float delta = 0.01f; var result = router.SearchClosest(data, interpreter, vehicle, nonameLocation, delta, matcher, pointTags, null); if (result.Distance < double.MaxValue) { // there is a result. Assert.IsFalse(notFound, "A result was found but was supposed not to be found!"); if (name == pointName) { // the name location was supposed to be found! Assert.IsTrue(result.Vertex1 == vertexName1 || result.Vertex1 == vertexName2); Assert.IsTrue(result.Vertex2 == vertexName1 || result.Vertex2 == vertexName2); } else { // the noname location was supposed to be found! Assert.IsTrue(result.Vertex1 == vertexNoname1 || result.Vertex1 == vertexNoname2); Assert.IsTrue(result.Vertex2 == vertexNoname1 || result.Vertex2 == vertexNoname2); } return; } Assert.IsTrue(notFound, "A result was not found but was supposed to be found!"); }
public void RoutingRegressionTest9ResolvingReverse() { // build a graph to encode from. var tags = new TagsTableCollectionIndex(); var graphDataSource = new DynamicGraphRouterDataSource<LiveEdge>(tags); var vertex1 = graphDataSource.AddVertex(51.05849821468899f, 3.7240000000000000f); var vertex2 = graphDataSource.AddVertex(51.05849821468899f, 3.7254400000000000f); var vertex3 = graphDataSource.AddVertex(51.05849821468899f, 3.7225627899169926f); var edge = new LiveEdge() // all edges are identical. { Distance = 100, Forward = true, Tags = tags.Add(new TagsCollection( Tag.Create("highway", "tertiary"), Tag.Create("oneway", "yes"))) }; graphDataSource.AddEdge(vertex1, vertex2, edge, null); graphDataSource.AddEdge(vertex3, vertex1, edge, null); // {RectF:[(3,71326552867889,51,048498214689),(3,73326552867889,51,068498214689)]} var edges = graphDataSource.GetEdges(new GeoCoordinateBox( new GeoCoordinate(51.068498214689, 3.73326552867889), new GeoCoordinate(51.048498214689, 3.71326552867889))); while(edges.MoveNext()) { if(edges.Vertex1 == 1 && edges.Vertex2 == 2) { Assert.IsTrue(edges.EdgeData.Forward); } else if(edges.Vertex1 == 2 && edges.Vertex2 == 1) { Assert.IsFalse(edges.EdgeData.Forward); } if (edges.Vertex1 == 1 && edges.Vertex2 == 3) { Assert.IsFalse(edges.EdgeData.Forward); } else if (edges.Vertex1 == 3 && edges.Vertex2 == 1) { Assert.IsTrue(edges.EdgeData.Forward); } } }
public void RoutingRegressionTest3() { var interpreter = new OsmRoutingInterpreter(); var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var memoryData = new DynamicGraphRouterDataSource<LiveEdge>(tagsIndex); var targetData = new LiveGraphOsmStreamTarget(memoryData, interpreter, tagsIndex); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream("OsmSharp.Test.Unittests.test_network.osm")); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); var basicRouter = new Dykstra(); var router = Router.CreateLiveFrom(memoryData, basicRouter, interpreter); // build coordinates list of resolved points. var testPoints = new List<GeoCoordinate>(); testPoints.Add(new GeoCoordinate(51.0581719, 3.7201622)); testPoints.Add(new GeoCoordinate(51.0580439, 3.7202134)); testPoints.Add(new GeoCoordinate(51.0580573, 3.7204378)); testPoints.Add(new GeoCoordinate(51.0581862, 3.7203758)); // build a matrix of routes between all points. var referenceRoutes = new Route[testPoints.Count][]; var permuationArray = new int[testPoints.Count]; for (int fromIdx = 0; fromIdx < testPoints.Count; fromIdx++) { permuationArray[fromIdx] = fromIdx; referenceRoutes[fromIdx] = new Route[testPoints.Count]; for (int toIdx = 0; toIdx < testPoints.Count; toIdx++) { // create router from scratch. router = Router.CreateLiveFrom( memoryData, basicRouter, interpreter); // resolve points. var from = router.Resolve(Vehicle.Car, testPoints[fromIdx]); var to = router.Resolve(Vehicle.Car, testPoints[toIdx]); // calculate route. referenceRoutes[fromIdx][toIdx] = router.Calculate(Vehicle.Car, from, to); } } // resolve points in some order and compare the resulting routes. // they should be identical in length except for some numerical rounding errors. var enumerator = new PermutationEnumerable<int>( permuationArray); foreach (int[] permutation in enumerator) { // create router from scratch. router = Router.CreateLiveFrom(memoryData, basicRouter, interpreter); // resolve in the order of the permutation. var resolvedPoints = new RouterPoint[permutation.Length]; for (int idx = 0; idx < permutation.Length; idx++) { resolvedPoints[permutation[idx]] = router.Resolve(Vehicle.Car, testPoints[permutation[idx]]); } for (int fromIdx = 0; fromIdx < testPoints.Count; fromIdx++) { for (int toIdx = 0; toIdx < testPoints.Count; toIdx++) { // calculate route. var route = router.Calculate(Vehicle.Car, resolvedPoints[fromIdx], resolvedPoints[toIdx]); Assert.AreEqual(referenceRoutes[fromIdx][toIdx].TotalDistance, route.TotalDistance, 0.1); } } } }
public void RoutingRegressionTest4() { var interpreter = new OsmRoutingInterpreter(); var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var memoryData = new DynamicGraphRouterDataSource<LiveEdge>(tagsIndex); var targetData = new LiveGraphOsmStreamTarget(memoryData, interpreter, tagsIndex); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream("OsmSharp.Test.Unittests.test_routing_regression1.osm")); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); var basicRouter = new Dykstra(); var router = Router.CreateLiveFrom(memoryData, basicRouter, interpreter); // resolve the three points in question. var point35 = new GeoCoordinate(51.01257, 4.000753); var point35ResolvedCar = router.Resolve(Vehicle.Car, point35); var point35ResolvedBicycle = router.Resolve(Vehicle.Bicycle, point35); }
public void TestSparseRemoval1Routing() { // use one edge definition everywhere. var tagsIndex = new TagsTableCollectionIndex(); var tags = new TagsCollection(new Tag("highway","residential")); var edge = new LiveEdge(); edge.Forward = true; edge.Tags = tagsIndex.Add(tags); var graph = new MemoryGraph<LiveEdge>(); uint vertex1 = graph.AddVertex(51.267797f, 4.8013623f); uint vertex2 = graph.AddVertex(51.267702f, 4.8013396f); uint vertex3 = graph.AddVertex(51.267592f, 4.8013024f); graph.AddEdge(vertex1, vertex2, edge, null); graph.AddEdge(vertex2, vertex3, edge, null); graph.AddEdge(vertex3, vertex2, edge, null); // save vertex coordinates for later use. float latitude, longitude; graph.GetVertex(vertex1, out latitude, out longitude); var vertex1Coordinate = new GeoCoordinate(latitude, longitude); graph.GetVertex(vertex2, out latitude, out longitude); var vertex2Coordinate = new GeoCoordinate(latitude, longitude); graph.GetVertex(vertex3, out latitude, out longitude); var vertex3Coordinate = new GeoCoordinate(latitude, longitude); // execute pre-processor. var preProcessor = new LiveEdgePreprocessor(graph); preProcessor.Start(); // create router. var source = new DynamicGraphRouterDataSource<LiveEdge>( graph, tagsIndex); var router = Router.CreateLiveFrom(source, new OsmRoutingInterpreter()); // test some basic routing requests. // 1 -> 3: 1 -> 2 -> 3. var resolved1 = router.Resolve(Vehicle.Car, vertex1Coordinate); var resolved3 = router.Resolve(Vehicle.Car, vertex3Coordinate); var route = router.Calculate(Vehicle.Car, resolved1, resolved3); // verify the simple route result. Assert.IsNotNull(route); Assert.AreEqual(3, route.Segments.Length); Assert.AreEqual(vertex1Coordinate.Latitude, route.Segments[0].Latitude); Assert.AreEqual(vertex1Coordinate.Longitude, route.Segments[0].Longitude); Assert.AreEqual(vertex2Coordinate.Latitude, route.Segments[1].Latitude); Assert.AreEqual(vertex2Coordinate.Longitude, route.Segments[1].Longitude); Assert.AreEqual(vertex3Coordinate.Latitude, route.Segments[2].Latitude); Assert.AreEqual(vertex3Coordinate.Longitude, route.Segments[2].Longitude); // 1 -> 2: 1 -> 2. router = Router.CreateLiveFrom(source, new OsmRoutingInterpreter()); resolved1 = router.Resolve(Vehicle.Car, vertex1Coordinate); var resolved2 = router.Resolve(Vehicle.Car, vertex2Coordinate); route = router.Calculate(Vehicle.Car, resolved1, resolved2); // verify the simple route result. Assert.IsNotNull(route); Assert.AreEqual(2, route.Segments.Length); Assert.AreEqual(vertex1Coordinate.Latitude, route.Segments[0].Latitude); Assert.AreEqual(vertex1Coordinate.Longitude, route.Segments[0].Longitude); Assert.AreEqual(vertex2Coordinate.Latitude, route.Segments[1].Latitude); Assert.AreEqual(vertex2Coordinate.Longitude, route.Segments[1].Longitude); }
public void RoutingRegressionTest11ResolvingReverse() { // build a graph to encode from. var tags = new TagsTableCollectionIndex(); var graphDataSource = new DynamicGraphRouterDataSource<LiveEdge>(tags); var vertex1 = graphDataSource.AddVertex(51.05849821468899f, 3.7240000000000000f); var vertex2 = graphDataSource.AddVertex(51.05849821468899f, 3.7254400000000000f); var vertex3 = graphDataSource.AddVertex(51.05849821468899f, 3.7225627899169926f); var edgeData = new LiveEdge() // all edges are identical. { Distance = 100, Forward = true, Tags = tags.Add(new TagsCollection( Tag.Create("highway", "tertiary"), Tag.Create("oneway", "yes"))) }; var shape1 = new CoordinateArrayCollection<OsmSharp.Math.Geo.Simple.GeoCoordinateSimple>( new OsmSharp.Math.Geo.Simple.GeoCoordinateSimple[] { new OsmSharp.Math.Geo.Simple.GeoCoordinateSimple() { Latitude = 1, Longitude = 1 }, new OsmSharp.Math.Geo.Simple.GeoCoordinateSimple() { Latitude = 2, Longitude = 2 } }); var shape2 = new CoordinateArrayCollection<OsmSharp.Math.Geo.Simple.GeoCoordinateSimple>( new OsmSharp.Math.Geo.Simple.GeoCoordinateSimple[] { new OsmSharp.Math.Geo.Simple.GeoCoordinateSimple() { Latitude = 3, Longitude = 3 }, new OsmSharp.Math.Geo.Simple.GeoCoordinateSimple() { Latitude = 4, Longitude = 4 } }); graphDataSource.AddEdge(vertex1, vertex2, edgeData, shape1); graphDataSource.AddEdge(vertex3, vertex1, edgeData, shape2); var edges = new List<Edge<LiveEdge>>(graphDataSource.GetEdges(1)); Assert.AreEqual(2, edges.Count); foreach(var edge in edges) { if (edge.Neighbour == 2) { Assert.AreEqual(true, edge.EdgeData.Forward); } else if(edge.Neighbour == 3) { Assert.AreEqual(false, edge.EdgeData.Forward); } } edges = new List<Edge<LiveEdge>>(graphDataSource.GetEdges(2)); Assert.AreEqual(1, edges.Count); Assert.AreEqual(false, edges[0].EdgeData.Forward); edges = new List<Edge<LiveEdge>>(graphDataSource.GetEdges(3)); Assert.AreEqual(1, edges.Count); Assert.AreEqual(true, edges[0].EdgeData.Forward); }
public void RoutingSerializationDataSourceTest() { const string embeddedString = "OsmSharp.Test.Unittests.test_network.osm"; // create the tags index. var tagsIndex = new TagsTableCollectionIndex(); // creates a new interpreter. var interpreter = new OsmRoutingInterpreter(); // do the data processing. var original = new DynamicGraphRouterDataSource<LiveEdge>(tagsIndex); var targetData = new LiveGraphOsmStreamTarget( original, interpreter, tagsIndex, null, false); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedString)); targetData.RegisterSource(dataProcessorSource); targetData.Pull(); // store some lat/lons. var verticesLocations = new List<GeoCoordinate>(); for (uint vertex = 1; vertex <= 5; vertex++) { float latitude, longitude; if(original.GetVertex(vertex, out latitude, out longitude)) { verticesLocations.Add( new GeoCoordinate(latitude, longitude)); } } // create serializer. var routingSerializer = new RoutingDataSourceLiveEdgeSerializer(false); // serialize/deserialize. TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); IBasicRouterDataSource<LiveEdge> deserializedVersion; byte[] byteArray; using (var stream = new MemoryStream()) { try { routingSerializer.Serialize(stream, original, metaData); byteArray = stream.ToArray(); } catch (Exception) { if (Debugger.IsAttached) { Debugger.Break(); } throw; } } using (var stream = new MemoryStream(byteArray)) { try { deserializedVersion = routingSerializer.Deserialize(stream, out metaData, false); } catch (Exception) { if (Debugger.IsAttached) { Debugger.Break(); } throw; } } //Assert.AreEqual(original.VertexCount, deserializedVersion.VertexCount); Assert.AreEqual(original.TagsIndex.Get(0), deserializedVersion.TagsIndex.Get(0)); for (uint vertex = 1; vertex <= 5; vertex++) { float latitude, longitude; if (deserializedVersion.GetVertex(vertex, out latitude, out longitude)) { Assert.AreEqual(verticesLocations[(int)vertex - 1].Latitude, latitude, 0.000001); Assert.AreEqual(verticesLocations[(int)vertex - 1].Longitude, longitude, 0.000001); } } }
public void RoutingSerializationRoutingTest() { const string embeddedString = "OsmSharp.Test.Unittests.test_network.osm"; // create the tags index. var tagsIndex = new TagsTableCollectionIndex(); // creates a new interpreter. var interpreter = new OsmRoutingInterpreter(); // do the data processing. var original = new DynamicGraphRouterDataSource<LiveEdge>(tagsIndex); var targetData = new LiveGraphOsmStreamTarget( original, interpreter, tagsIndex, null, false); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedString)); targetData.RegisterSource(dataProcessorSource); targetData.Pull(); // create serializer. var routingSerializer = new RoutingDataSourceLiveEdgeSerializer(false); // serialize/deserialize. TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); byte[] byteArray; using (var stream = new MemoryStream()) { try { routingSerializer.Serialize(stream, original, metaData); byteArray = stream.ToArray(); } catch (Exception) { if (Debugger.IsAttached) { Debugger.Break(); } throw; } } var deserializedVersion = routingSerializer.Deserialize(new MemoryStream(byteArray), out metaData); Assert.AreEqual(original.TagsIndex.Get(0), deserializedVersion.TagsIndex.Get(0)); // try to do some routing on the deserialized version. var basicRouter = new DykstraRoutingLive(); Router router = Router.CreateLiveFrom(deserializedVersion, basicRouter, interpreter); RouterPoint source = router.Resolve(Vehicle.Car, new GeoCoordinate(51.0578532, 3.7192229)); RouterPoint target = router.Resolve(Vehicle.Car, new GeoCoordinate(51.0576193, 3.7191801)); // calculate the route. Route route = router.Calculate(Vehicle.Car, source, target); Assert.IsNotNull(route); Assert.AreEqual(5, route.Segments.Length); float latitude, longitude; //deserializedVersion.GetVertex(20, out latitude, out longitude); Assert.AreEqual(51.0578537, route.Segments[0].Latitude, 0.00001); Assert.AreEqual(3.71922255, route.Segments[0].Longitude, 0.00001); Assert.AreEqual(RouteSegmentType.Start, route.Segments[0].Type); //deserializedVersion.GetVertex(21, out latitude, out longitude); Assert.AreEqual(51.0578537, route.Segments[1].Latitude, 0.00001); Assert.AreEqual(3.71956515, route.Segments[1].Longitude, 0.00001); Assert.AreEqual(RouteSegmentType.Along, route.Segments[1].Type); //deserializedVersion.GetVertex(16, out latitude, out longitude); Assert.AreEqual(51.05773, route.Segments[2].Latitude, 0.00001); Assert.AreEqual(3.719745, route.Segments[2].Longitude, 0.00001); Assert.AreEqual(RouteSegmentType.Along, route.Segments[2].Type); //deserializedVersion.GetVertex(22, out latitude, out longitude); Assert.AreEqual(51.05762, route.Segments[3].Latitude, 0.00001); Assert.AreEqual(3.71965766, route.Segments[3].Longitude, 0.00001); Assert.AreEqual(RouteSegmentType.Along, route.Segments[3].Type); deserializedVersion.GetVertex(23, out latitude, out longitude); Assert.AreEqual(51.05762, route.Segments[4].Latitude, 0.00001); Assert.AreEqual(3.71917963, route.Segments[4].Longitude, 0.00001); Assert.AreEqual(RouteSegmentType.Stop, route.Segments[4].Type); }
/// <summary> /// Creates a router. /// </summary> /// <param name="interpreter"></param> /// <param name="manifestResourceName"></param> /// <returns></returns> protected override Router CreateRouter(IOsmRoutingInterpreter interpreter, string manifestResourceName) { TagsTableCollectionIndex tagsIndex = new TagsTableCollectionIndex(); // do the data processing. DynamicGraphRouterDataSource<LiveEdge> memoryData = new DynamicGraphRouterDataSource<LiveEdge>(tagsIndex); LiveGraphOsmStreamTarget target_data = new LiveGraphOsmStreamTarget( memoryData, interpreter, tagsIndex, null, false); XmlOsmStreamSource dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(manifestResourceName)); OsmStreamFilterSort sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); target_data.RegisterSource(sorter); target_data.Pull(); IRoutingAlgorithm<LiveEdge> basicRouter = new Dykstra(); return Router.CreateLiveFrom(memoryData, basicRouter, interpreter); }
public void RoutingRegressionTest10ResolvingReverse() { // build a graph to encode from. var tags = new TagsTableCollectionIndex(); var graphDataSource = new DynamicGraphRouterDataSource<LiveEdge>(tags); var vertex1 = graphDataSource.AddVertex(51.05849821468899f, 3.7240000000000000f); var vertex2 = graphDataSource.AddVertex(51.05849821468899f, 3.7254400000000000f); var vertex3 = graphDataSource.AddVertex(51.05849821468899f, 3.7225627899169926f); var edge = new LiveEdge() // all edges are identical. { Distance = 100, Forward = true, Tags = tags.Add(new TagsCollection( Tag.Create("highway", "tertiary"), Tag.Create("oneway", "yes"))) }; var shape1 = new CoordinateArrayCollection<OsmSharp.Math.Geo.Simple.GeoCoordinateSimple>( new OsmSharp.Math.Geo.Simple.GeoCoordinateSimple[] { new OsmSharp.Math.Geo.Simple.GeoCoordinateSimple() { Latitude = 1, Longitude = 1 }, new OsmSharp.Math.Geo.Simple.GeoCoordinateSimple() { Latitude = 2, Longitude = 2 } }); var shape2 = new CoordinateArrayCollection<OsmSharp.Math.Geo.Simple.GeoCoordinateSimple>( new OsmSharp.Math.Geo.Simple.GeoCoordinateSimple[] { new OsmSharp.Math.Geo.Simple.GeoCoordinateSimple() { Latitude = 3, Longitude = 3 }, new OsmSharp.Math.Geo.Simple.GeoCoordinateSimple() { Latitude = 4, Longitude = 4 } }); graphDataSource.AddEdge(vertex1, vertex2, edge, shape1); graphDataSource.AddEdge(vertex3, vertex1, edge, shape2); // {RectF:[(3,71326552867889,51,048498214689),(3,73326552867889,51,068498214689)]} var edges = graphDataSource.GetEdges(new GeoCoordinateBox( new GeoCoordinate(51.068498214689, 3.73326552867889), new GeoCoordinate(51.048498214689, 3.71326552867889))); while (edges.MoveNext()) { if (edges.Vertex1 == 1 && edges.Vertex2 == 2) { Assert.IsTrue(edges.EdgeData.Forward); var shapes = edges.Intermediates.ToSimpleArray(); Assert.AreEqual(2, shapes.Length); Assert.AreEqual(1, shapes[0].Latitude); Assert.AreEqual(1, shapes[0].Longitude); Assert.AreEqual(2, shapes[1].Latitude); Assert.AreEqual(2, shapes[1].Longitude); } else if (edges.Vertex1 == 2 && edges.Vertex2 == 1) { Assert.IsFalse(edges.EdgeData.Forward); var shapes = edges.Intermediates.ToSimpleArray(); Assert.AreEqual(2, shapes.Length); Assert.AreEqual(2, shapes[0].Latitude); Assert.AreEqual(2, shapes[0].Longitude); Assert.AreEqual(1, shapes[1].Latitude); Assert.AreEqual(1, shapes[1].Longitude); } if (edges.Vertex1 == 1 && edges.Vertex2 == 3) { Assert.IsFalse(edges.EdgeData.Forward); var shapes = edges.Intermediates.ToSimpleArray(); Assert.AreEqual(2, shapes.Length); Assert.AreEqual(4, shapes[0].Latitude); Assert.AreEqual(4, shapes[0].Longitude); Assert.AreEqual(3, shapes[1].Latitude); Assert.AreEqual(3, shapes[1].Longitude); } else if (edges.Vertex1 == 3 && edges.Vertex2 == 1) { Assert.IsTrue(edges.EdgeData.Forward); var shapes = edges.Intermediates.ToSimpleArray(); Assert.AreEqual(2, shapes.Length); Assert.AreEqual(3, shapes[0].Latitude); Assert.AreEqual(3, shapes[0].Longitude); Assert.AreEqual(4, shapes[1].Latitude); Assert.AreEqual(4, shapes[1].Longitude); } } }
/// <summary> /// Creates a router. /// </summary> /// <param name="interpreter"></param> /// <param name="manifestResourceName"></param> /// <returns></returns> protected override Router CreateRouter(IOsmRoutingInterpreter interpreter, string manifestResourceName) { TagsTableCollectionIndex tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var data = new DynamicGraphRouterDataSource<CHEdgeData>(tagsIndex); var targetData = new CHEdgeGraphOsmStreamTarget( data, interpreter, tagsIndex, Vehicle.Car); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(manifestResourceName)); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); // do the pre-processing part. var witnessCalculator = new DykstraWitnessCalculator(); var preProcessor = new CHPreProcessor(data, new EdgeDifference(data, witnessCalculator), witnessCalculator); preProcessor.Start(); //IBasicRouter<LiveEdge> basicRouter = new DykstraRoutingLive(memoryData.TagsIndex); return Router.CreateCHFrom(data, new CHRouter(), interpreter); }
/// <summary> /// Creates a router using live interpreted edges. /// </summary> /// <param name="reader">The OSM-stream reader.</param> /// <param name="interpreter">The routing interpreter.</param> /// <returns></returns> public static Router CreateLiveFrom(OsmStreamSource reader, IOsmRoutingInterpreter interpreter) { var tagsIndex = new TagsTableCollectionIndex(); // creates a tagged index. // read from the OSM-stream. var memoryData = new DynamicGraphRouterDataSource<LiveEdge>(tagsIndex); memoryData.DropVertexIndex(); var targetData = new LiveGraphOsmStreamTarget(memoryData, interpreter, tagsIndex); targetData.RegisterSource(reader); targetData.Pull(); memoryData.RebuildVertexIndex(); // creates the live edge router. var liveEdgeRouter = new TypedRouterLiveEdge( memoryData, interpreter, new Dykstra()); return new Router(liveEdgeRouter); // create the actual router. }
/// <summary> /// Tests preprocessing data from a PBF file. /// </summary> /// <param name="name"></param> /// <param name="pbfFile"></param> public static void TestSerialization(string name, string pbfFile) { var testFile = new FileInfo(string.Format(@".\TestFiles\{0}", pbfFile)); var performanceInfo = new PerformanceInfoConsumer("LiveSerializerFlatFile.Serialize", 100000); performanceInfo.Start(); performanceInfo.Report("Pulling from {0}...", testFile.Name); var stream = testFile.OpenRead(); var source = new PBFOsmStreamSource(stream); var progress = new OsmStreamFilterProgress(); progress.RegisterSource(source); var testOutputFile = new FileInfo(@"test.routing"); testOutputFile.Delete(); Stream writeStream = testOutputFile.OpenWrite(); var tagsIndex = new TagsTableCollectionIndex(); var interpreter = new OsmRoutingInterpreter(); var graph = new DynamicGraphRouterDataSource<LiveEdge>(tagsIndex); var routingSerializer = new LiveEdgeFlatfileSerializer(); // read from the OSM-stream. using (var fileFactory = new MemoryMappedFileFactory(@"d:\temp\")) { using (var memoryMappedGraph = new MemoryMappedGraph<LiveEdge>(10000, fileFactory)) { using (var coordinates = new HugeCoordinateIndex(fileFactory, 10000)) { var memoryData = new DynamicGraphRouterDataSource<LiveEdge>(memoryMappedGraph, tagsIndex); var targetData = new LiveGraphOsmStreamTarget(memoryData, new OsmRoutingInterpreter(), tagsIndex, coordinates); targetData.RegisterSource(progress); targetData.Pull(); performanceInfo.Stop(); performanceInfo = new PerformanceInfoConsumer("LiveSerializerFlatFile.Serialize", 100000); performanceInfo.Start(); performanceInfo.Report("Writing file for {0}...", testFile.Name); var metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); routingSerializer.Serialize(writeStream, memoryData, metaData); } } } stream.Dispose(); writeStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("LiveSerializerFlatFile", OsmSharp.Logging.TraceEventType.Information, string.Format("Serialized file: {0}KB", testOutputFile.Length / 1024)); performanceInfo.Stop(); performanceInfo = new PerformanceInfoConsumer("LiveSerializerFlatFile.Serialize", 100000); performanceInfo.Start(); performanceInfo.Report("Reading file for {0}...", testFile.Name); var testInputFile = new FileInfo(@"europe-latest.osm.pbf.routing"); Stream readStream = testInputFile.OpenRead(); var deserializedGraph = routingSerializer.Deserialize(readStream, false); readStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("LiveSerializerFlatFile", OsmSharp.Logging.TraceEventType.Information, string.Format("Read: {0}KB", testInputFile.Length / 1024)); OsmSharp.Logging.Log.TraceEvent("LiveSerializerFlatFile", Logging.TraceEventType.Information, deserializedGraph.ToInvariantString()); performanceInfo.Stop(); }
public void TestRandomPartialTagSerializaton() { TagsTableCollectionIndex tagsIndex = new TagsTableCollectionIndex(); TagsCollection tagsCollection = new TagsCollection(); for (int i = 0; i < 100; i++) { int tagCollectionSize = OsmSharp.Math.Random.StaticRandomGenerator.Get().Generate(10) + 1; for (int idx = 0; idx < tagCollectionSize; idx++) { int tagValue = OsmSharp.Math.Random.StaticRandomGenerator.Get().Generate(10); tagsCollection.Add( string.Format("key_{0}", tagValue), string.Format("value_{0}", tagValue)); } uint tagsId = tagsIndex.Add(tagsCollection); } uint from = 40; uint to = 50; ITagsCollectionIndexReadonly tagsIndexReadonly = this.SerializeDeserialize(tagsIndex, from, to); Assert.AreEqual(System.Math.Min(to, tagsIndex.Max), tagsIndexReadonly.Max); for (uint idx = 0; idx < tagsIndex.Max; idx++) { if (idx >= from && idx < to) { ComparisonHelpers.CompareTags(tagsIndex.Get(idx), tagsIndexReadonly.Get(idx)); } else { Assert.IsNull(tagsIndexReadonly.Get(idx)); } } from = 0; to = 100; tagsIndexReadonly = this.SerializeDeserialize(tagsIndex, from, to); Assert.AreEqual(System.Math.Min(to, tagsIndex.Max), tagsIndexReadonly.Max); for (uint idx = 0; idx < tagsIndex.Max; idx++) { if (idx >= from && idx < to) { ComparisonHelpers.CompareTags(tagsIndex.Get(idx), tagsIndexReadonly.Get(idx)); } else { Assert.IsNull(tagsIndexReadonly.Get(idx)); } } from = 10; to = 1000; tagsIndexReadonly = this.SerializeDeserialize(tagsIndex, from, to); Assert.AreEqual(System.Math.Min(to, tagsIndex.Max), tagsIndexReadonly.Max); for (uint idx = 0; idx < tagsIndex.Max; idx++) { if (idx >= from && idx < to) { ComparisonHelpers.CompareTags(tagsIndex.Get(idx), tagsIndexReadonly.Get(idx)); } else { Assert.IsNull(tagsIndexReadonly.Get(idx)); } } }
/// <summary> /// Creates a router. /// </summary> /// <param name="interpreter"></param> /// <param name="manifestResourceName"></param> /// <returns></returns> protected override Router CreateRouter(IOsmRoutingInterpreter interpreter, string manifestResourceName) { var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var source = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(manifestResourceName)); var data = CHEdgeGraphOsmStreamTarget.Preprocess( source, new OsmRoutingInterpreter(), Vehicle.Car); // serialize. var memoryStream = new MemoryStream(); TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); var routingSerializer = new CHEdgeDataDataSourceSerializer(); routingSerializer.Serialize(memoryStream, data, metaData); memoryStream.Seek(0, SeekOrigin.Begin); var deserialized = routingSerializer.Deserialize(memoryStream); return Router.CreateCHFrom(deserialized, new CHRouter(), new OsmRoutingInterpreter()); }
/// <summary> /// Creates a router using live interpreted edges. /// </summary> /// <param name="reader">The data to route on.</param> /// <param name="interpreter">The routing interpreter.</param> /// <param name="vehicle">The vehicle profile.</param> /// <returns></returns> public static Router CreateCHFrom(OsmStreamSource reader, IOsmRoutingInterpreter interpreter, Vehicle vehicle) { var tagsIndex = new TagsTableCollectionIndex(); // creates a tagged index. // read from the OSM-stream. var data = CHEdgeGraphOsmStreamTarget.Preprocess( reader, interpreter, vehicle); // creates the live edge router. var liveEdgeRouter = new TypedRouterCHEdge( data, interpreter, new CHRouter()); return new Router(liveEdgeRouter); // create the actual router. }