All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.telenav.mesakit.navigation.routing.bidijkstra.BiDijkstraRoutingRequest Maven / Gradle / Ivy

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// © 2011-2021 Telenav, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

package com.telenav.mesakit.navigation.routing.bidijkstra;

import com.telenav.kivakit.core.value.count.Count;
import com.telenav.mesakit.graph.Vertex;
import com.telenav.mesakit.map.measurements.geographic.Distance;
import com.telenav.mesakit.navigation.routing.RoutingDebugger;
import com.telenav.mesakit.navigation.routing.RoutingLimiter;
import com.telenav.mesakit.navigation.routing.RoutingRequest;
import com.telenav.mesakit.navigation.routing.cost.CostFunction;

public class BiDijkstraRoutingRequest extends RoutingRequest
{
    /** The number of meets that should be found */
    private Count meets;

    /** Maximum multiple of the first meet for future meets before search stops */
    private double maximumFirstMeetCostMultiple = 1.5;

    /** The forward heuristic cost function */
    private CostFunction forwardHeuristicCostFunction;

    /** The backward heuristic cost function */
    private CostFunction backwardHeuristicCostFunction;

    public BiDijkstraRoutingRequest(Vertex start, Vertex end)
    {
        super(start, end);
    }

    protected BiDijkstraRoutingRequest(BiDijkstraRoutingRequest that, RoutingLimiter limiter,
                                       RoutingDebugger debugger)
    {
        super(that, limiter, debugger);
        meets = that.meets;
        forwardHeuristicCostFunction = that.forwardHeuristicCostFunction;
        backwardHeuristicCostFunction = that.backwardHeuristicCostFunction;
    }

    public CostFunction backwardHeuristicCostFunction()
    {
        return backwardHeuristicCostFunction;
    }

    @Override
    public String description()
    {
        return "BiDijkstra";
    }

    public CostFunction forwardHeuristicCostFunction()
    {
        return forwardHeuristicCostFunction;
    }

    public double maximumFirstMeetCostMultiple()
    {
        return maximumFirstMeetCostMultiple;
    }

    public Count meets()
    {
        if (meets == null)
        {
            var distance = distance();
            if (distance.isLessThan(Distance.miles(50)))
            {
                meets = Count.count(200);
            }
            else if (distance.isLessThan(Distance.miles(300)))
            {
                meets = Count.count(500);
            }
            else
            {
                meets = Count.count(1_000);
            }
        }
        return meets;
    }

    public BiDijkstraRoutingRequest withBackwardHeuristicCostFunction(CostFunction backwardHeuristicCostFunction)
    {
        if (backwardHeuristicCostFunction != null)
        {
            var request = new BiDijkstraRoutingRequest(this, null, null);
            request.backwardHeuristicCostFunction = backwardHeuristicCostFunction;
            return request;
        }
        return this;
    }

    public BiDijkstraRoutingRequest withDebugger(RoutingDebugger debugger)
    {
        return new BiDijkstraRoutingRequest(this, null, debugger);
    }

    public BiDijkstraRoutingRequest withForwardHeuristicCostFunction(CostFunction forwardHeuristicCostFunction)
    {
        if (forwardHeuristicCostFunction != null)
        {
            var router = new BiDijkstraRoutingRequest(this, null, null);
            router.forwardHeuristicCostFunction = forwardHeuristicCostFunction;
            return router;
        }
        return this;
    }

    public BiDijkstraRoutingRequest withLimiter(RoutingLimiter limiter)
    {
        return new BiDijkstraRoutingRequest(this, limiter, null);
    }

    public BiDijkstraRoutingRequest withMaximumFirstMeetCostMultiple(double maximumFirstMeetCostMultiple)
    {
        var router = new BiDijkstraRoutingRequest(this, null, null);
        router.maximumFirstMeetCostMultiple = this.maximumFirstMeetCostMultiple;
        return router;
    }

    public BiDijkstraRoutingRequest withMeets(Count meets)
    {
        var router = new BiDijkstraRoutingRequest(this, null, null);
        router.meets = meets;
        return router;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy