/// <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); }
/// <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> /// Builds the data. /// </summary> /// <param name="interpreter"></param> /// <param name="embeddedString"></param> /// <returns></returns> public override IRoutingAlgorithmData <CHEdgeData> BuildData(IOsmRoutingInterpreter interpreter, string embeddedString) { string key = string.Format("CHEdgeDifference.Routing.IRoutingAlgorithmData<CHEdgeData>.OSM.{0}", embeddedString); var data = StaticDictionary.Get <IRoutingAlgorithmData <CHEdgeData> >( key); if (data == null) { var tagsIndex = new TagsIndex(); // do the data processing. var memoryData = new RouterDataSource <CHEdgeData>(new DirectedGraph <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(); data = memoryData; StaticDictionary.Add <IRoutingAlgorithmData <CHEdgeData> >(key, data); } return(data); }
/// <summary> /// Returns a new router. /// </summary> /// <param name="interpreter"></param> /// <param name="embeddedName"></param> /// <returns></returns> public override Router BuildRouter(IOsmRoutingInterpreter interpreter, string embeddedName) { if (_data == null) { _data = new Dictionary <string, RouterDataSource <CHEdgeData> >(); } RouterDataSource <CHEdgeData> data = null; if (!_data.TryGetValue(embeddedName, out data)) { var tagsIndex = new TagsIndex(); // do the data processing. data = new RouterDataSource <CHEdgeData>(new DirectedGraph <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(); _data[embeddedName] = data; } return(Router.CreateCHFrom(data, new CHRouter(), interpreter)); }
/// <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); }
/// <summary> /// Returns a new router. /// </summary> /// <param name="interpreter"></param> /// <param name="embeddedName"></param> /// <returns></returns> public override Router BuildRouter(IOsmRoutingInterpreter interpreter, string embeddedName) { if (_data == null) { _data = new Dictionary<string, RouterDataSource<CHEdgeData>>(); } RouterDataSource<CHEdgeData> data = null; if (!_data.TryGetValue(embeddedName, out data)) { var tagsIndex = new TagsIndex(); // do the data processing. data = new RouterDataSource<CHEdgeData>(new DirectedGraph<CHEdgeData>(), tagsIndex); var targetData = new CHEdgeGraphOsmStreamTarget( data, interpreter, tagsIndex, Vehicle.Car); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(string.Format( "OsmSharp.Routing.Test.data.{0}", embeddedName))); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); _data[embeddedName] = data; } return Router.CreateCHFrom(data, new CHRouter(), interpreter); }
/// <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 TagsIndex(); // do the data processing. _data = new RouterDataSource <CHEdgeData>(new DirectedGraph <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 EdgeDifferenceContractedSearchSpace(_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) { SimpleTagsIndex tagsIndex = new SimpleTagsIndex(); // 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> /// 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 SimpleTagsIndex(); // 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> /// Builds the data source. /// </summary> /// <returns></returns> private DynamicGraphRouterDataSource <CHEdgeData> BuildData(IOsmRoutingInterpreter interpreter) { DynamicGraphRouterDataSource <CHEdgeData> data = null; if (data == null) { 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("OsmSharp.Test.Unittests.test_network.osm")); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); } return(data); }
/// <summary> /// Creates a router. /// </summary> /// <param name="interpreter"></param> /// <param name="manifestResourceName"></param> /// <returns></returns> protected override Router CreateRouter(IOsmRoutingInterpreter interpreter, string manifestResourceName) { TagsIndex tagsIndex = new TagsIndex(); // do the data processing. var data = new RouterDataSource<CHEdgeData>(new DirectedGraph<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); }
/// <summary> /// Creates a router. /// </summary> /// <param name="interpreter"></param> /// <param name="manifestResourceName"></param> /// <returns></returns> protected override Router CreateRouter(IOsmRoutingInterpreter interpreter, string manifestResourceName) { SimpleTagsIndex tagsIndex = new SimpleTagsIndex(); // do the data processing. var data = new DynamicGraphRouterDataSource<CHEdgeData>(tagsIndex); var targetData = new CHEdgeGraphOsmStreamTarget( data, interpreter, data.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(data); 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(data), interpreter); }
/// <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 SimpleTagsIndex(); // 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> /// Builds the data source. /// </summary> /// <returns></returns> private DynamicGraphRouterDataSource<CHEdgeData> BuildData(IOsmRoutingInterpreter interpreter) { DynamicGraphRouterDataSource<CHEdgeData> data = null; if (data == null) { var tagsIndex = new SimpleTagsIndex(); // 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("OsmSharp.Test.Unittests.test_network.osm")); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); } return data; }
/// <summary> /// Executes the CH contractions while verifying each step. /// </summary> /// <param name="stream"></param> public void DoTestCHSparseVerifiedContraction(Stream stream) { _pathsBeforeContraction = new Dictionary<uint, Dictionary<uint, Dictionary<uint, PathSegment<long>>>>(); _interpreter = new OsmRoutingInterpreter(); var tagsIndex = new TagsIndex(); // do the data processing. _data = new RouterDataSource<CHEdgeData>(new DirectedGraph<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 EdgeDifferenceContractedSearchSpace(_data, witnessCalculator), witnessCalculator); //preProcessor.OnBeforeContractionEvent += new CHPreProcessor.VertexDelegate(pre_processor_OnBeforeContractionEvent); //preProcessor.OnAfterContractionEvent += new CHPreProcessor.VertexDelegate(pre_processor_OnAfterContractionEvent); //preProcessor.Start(); }
/// <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 SimpleTagsIndex(); // 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> /// 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 EdgeDifferenceContractedSearchSpace(_data, witnessCalculator), witnessCalculator); preProcessor.OnBeforeContractionEvent += new CHPreProcessor.VertexDelegate(pre_processor_OnBeforeContractionEvent); preProcessor.OnAfterContractionEvent += new CHPreProcessor.VertexDelegate(pre_processor_OnAfterContractionEvent); preProcessor.Start(); }
public void SortDirectedHilbertRealBigTest() { var embeddedString = "OsmSharp.Routing.Test.data.test_network_big.osm"; var n = GraphExtensions.DefaultHilbertSteps; // do the data processing without preprocessing. var interpreter = new OsmRoutingInterpreter(); var tagsIndex = new TagsIndex(); var unsortedData = new RouterDataSource<CHEdgeData>(new DirectedGraph<CHEdgeData>(), tagsIndex); var targetData = new CHEdgeGraphOsmStreamTarget(unsortedData, interpreter, tagsIndex, OsmSharp.Routing.Vehicles.Vehicle.Car, (g) => { return null; }); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedString)); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); // do the data processing with only hilbert sorting preprocessing. interpreter = new OsmRoutingInterpreter(); tagsIndex = new TagsIndex(); var data = new RouterDataSource<CHEdgeData>(new DirectedGraph<CHEdgeData>(), tagsIndex); targetData = new CHEdgeGraphOsmStreamTarget(data, interpreter, tagsIndex, OsmSharp.Routing.Vehicles.Vehicle.Car, (g) => { return new HilbertSortingPreprocessor<CHEdgeData>(g); }); dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedString)); sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); // test if sorted. for (uint sortedVertex = 1; sortedVertex < data.VertexCount; sortedVertex++) { var coordinate = data.GetLocation(sortedVertex); var neighbours = new Dictionary<GeoCoordinateSimple, CHEdgeData>(); foreach (var edge in data.GetEdges(sortedVertex)) { neighbours[data.GetLocation(edge.Neighbour)] = edge.EdgeData; } for (uint unsortedVertex = 1; unsortedVertex < unsortedData.VertexCount; unsortedVertex++) { var unsortedCoordinate = unsortedData.GetLocation(unsortedVertex); if (coordinate.Latitude == unsortedCoordinate.Latitude && coordinate.Longitude == unsortedCoordinate.Longitude) { // this is the same vertex, all vertices is the test network have different coordinates. // compare their neighbours. var unsortedNeighbours = new Dictionary<GeoCoordinateSimple, CHEdgeData>(); foreach (var edge in unsortedData.GetEdges(unsortedVertex)) { unsortedNeighbours[unsortedData.GetLocation(edge.Neighbour)] = edge.EdgeData; } Assert.AreEqual(neighbours.Count, unsortedNeighbours.Count); foreach (var neighbour in neighbours) { Assert.IsTrue(unsortedNeighbours.ContainsKey(neighbour.Key)); var value = unsortedNeighbours[neighbour.Key]; Assert.AreEqual(neighbour.Value.Weight, value.Weight); Assert.AreEqual(neighbour.Value.Forward, value.Forward); Assert.AreEqual(neighbour.Value.RepresentsNeighbourRelations, value.RepresentsNeighbourRelations); Assert.AreEqual(neighbour.Value.Tags, value.Tags); } break; } } } }