Ejemplo n.º 1
0
        /// <summary>
        /// Creates a new preprocessor.
        /// </summary>
        public DefaultPreprocessor(GraphBase <CHEdgeData> graph)
        {
            var witnessCalculator = new DykstraWitnessCalculator();
            var edgeDifference    = new EdgeDifferenceContractedSearchSpace(graph, witnessCalculator);

            _preprocessor = new CHPreprocessor(graph, edgeDifference, witnessCalculator);
        }
        public void TestPriorityCalculation1NoWitnesses()
        {
            var graph   = new DirectedGraph <CHEdgeData>();
            var vertex1 = graph.AddVertex(1, 0);
            var vertex2 = graph.AddVertex(2, 0);
            var vertex3 = graph.AddVertex(3, 0);

            graph.AddEdge(vertex1, vertex3, new CHEdgeData(1, true, true, true, 10));
            graph.AddEdge(vertex3, vertex1, new CHEdgeData(1, false, true, true, 10));
            graph.AddEdge(vertex2, vertex3, new CHEdgeData(1, true, true, true, 10));
            graph.AddEdge(vertex3, vertex2, new CHEdgeData(1, false, true, true, 10));

            var witnessCalculator  = new DykstraWitnessCalculator(int.MaxValue);
            var priorityCalculator = new EdgeDifferenceContractedSearchSpace(graph, witnessCalculator);

            int newEdges, removedEdges, contracted, depth;

            priorityCalculator.Calculate(vertex1, out newEdges, out removedEdges, out depth, out contracted);
            Assert.AreEqual(0, newEdges);
            Assert.AreEqual(1, removedEdges);
            Assert.AreEqual(0, depth);
            Assert.AreEqual(0, contracted);
            priorityCalculator.Calculate(vertex2, out newEdges, out removedEdges, out depth, out contracted);
            Assert.AreEqual(0, newEdges);
            Assert.AreEqual(1, removedEdges);
            Assert.AreEqual(0, depth);
            Assert.AreEqual(0, contracted);
            priorityCalculator.Calculate(vertex3, out newEdges, out removedEdges, out depth, out contracted);
            Assert.AreEqual(2, newEdges);
            Assert.AreEqual(2, removedEdges);
            Assert.AreEqual(0, depth);
            Assert.AreEqual(0, contracted);
        }
        /// <summary>
        /// Returns the preprocessor.
        /// </summary>
        /// <returns></returns>
        public override Graph.PreProcessor.IPreProcessor GetPreprocessor()
        {
            var witnessCalculator = new DykstraWitnessCalculator();
            var edgeDifference    = new EdgeDifferenceContractedSearchSpace(this.Graph, witnessCalculator);

            return(new CHPreProcessor(this.Graph, edgeDifference, witnessCalculator));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Preprocesses the data from the given OsmStreamReader and converts it directly to a routable data source.
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="tagsIndex"></param>
        /// <param name="interpreter"></param>
        /// <param name="vehicle"></param>
        /// <returns></returns>
        public static DynamicGraphRouterDataSource <CHEdgeData> Preprocess(OsmStreamSource reader,
                                                                           ITagsCollectionIndex tagsIndex, IOsmRoutingInterpreter interpreter, Vehicle vehicle)
        {
            // pull in the data.
            var graph      = new DynamicGraphRouterDataSource <CHEdgeData>(new MemoryDirectedGraph <CHEdgeData>(), tagsIndex);
            var targetData = new CHEdgeGraphOsmStreamTarget(
                graph, interpreter, tagsIndex, vehicle);

            targetData.RegisterSource(reader);
            targetData.Pull();

            // compress the graph.
            var witnessCalculator = new DykstraWitnessCalculator();
            var edgeDifference    = new EdgeDifferenceContractedSearchSpace(graph, witnessCalculator);
            var preProcessor      = new CHPreProcessor(graph, edgeDifference, witnessCalculator);

            preProcessor.Start();

            return(graph);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Flushes all data.
        /// </summary>
        public override void Flush()
        {
            base.Flush();

            // compress the graph.
            INodeWitnessCalculator witnessCalculator = new DykstraWitnessCalculator();
            var edgeDifference = new EdgeDifferenceContractedSearchSpace(
                _graph, witnessCalculator);
            var preProcessor = new CHPreProcessor(
                _graph, edgeDifference, witnessCalculator);

            preProcessor.Start();

            // create tags.
            TagsCollectionBase metaTags = new TagsCollection();

            // create serializer.
            var routingSerializer = new CHEdgeDataDataSourceSerializer();

            routingSerializer.Serialize(_graphStream, _graph, metaTags);
            _graphStream.Flush();
        }