public void TestCHContractionTest1() { // // (-1/1)---------(-3/2)--------(-5/3) // // build the data. DynamicGraphRouterDataSource<CHEdgeData> data = this.BuildData( Assembly.GetExecutingAssembly().GetManifestResourceStream( "OsmSharp.Test.Unittests.Routing.CH.Contraction.contraction_test1.osm")); // build the witness calculator. INodeWitnessCalculator witness_calculator = new DykstraWitnessCalculator(); // test the ordering operators. SparseOrdering sparse_ordering = new SparseOrdering( data); Assert.AreEqual(-1, sparse_ordering.Calculate(2)); EdgeDifference edge_difference_ordering = new EdgeDifference( data, witness_calculator); Assert.AreEqual(0, edge_difference_ordering.Calculate(2)); // do the actual contraction. CHPreProcessor pre_processor = new CHPreProcessor( data, edge_difference_ordering, witness_calculator); pre_processor.Contract(2); // check the neighbours of each vertex. HashSet<uint> neighbours = this.BuildNeighboursSet(data.GetArcs(2)); Assert.IsTrue(neighbours.Contains(1)); Assert.IsTrue(neighbours.Contains(3)); neighbours = this.BuildNeighboursSet(data.GetArcs(1)); Assert.IsTrue(neighbours.Contains(3)); Assert.IsFalse(neighbours.Contains(2)); neighbours = this.BuildNeighboursSet(data.GetArcs(3)); Assert.IsTrue(neighbours.Contains(1)); Assert.IsFalse(neighbours.Contains(2)); }
/// <summary> /// Builds the edge difference. /// </summary> private CHPreProcessor BuildCHPreProcessor(IOsmRoutingInterpreter interpreter) { DynamicGraphRouterDataSource<CHEdgeData> data = this.BuildData(interpreter); // do the pre-processing part. INodeWitnessCalculator witnessCalculator = new DykstraWitnessCalculator(); var edgeDifference = new EdgeDifference( data, witnessCalculator); var preProcessor = new CHPreProcessor( data, edgeDifference, witnessCalculator); return preProcessor; }
/// <summary> /// Flushes all data. /// </summary> public override void Flush() { base.Flush(); // compress the graph. INodeWitnessCalculator witnessCalculator = new DykstraWitnessCalculator(); var edgeDifference = new EdgeDifference( _graph, witnessCalculator); var preProcessor = new CHPreProcessor( _graph, edgeDifference, witnessCalculator); preProcessor.Start(); // create tags. TagsCollectionBase metaTags = new TagsCollection(); // create serializer. var routingSerializer = new CHEdgeDataDataSourceSerializer(true); routingSerializer.Serialize(_graphStream, _graph, metaTags); _graphStream.Flush(); }