import java.util.Vector; public class Route { private double[] currentLocation; //Lat-Long coordinates for current location private Vector> routeSequences; //3D array for routes. 1st dim selects route, 2nd dim selects route point, 3rd dim selects lat/long/speed/tolls (indices 0-2) private int routeSelected; private boolean tollsFlag; //stores user setting for whether to avoid tolls private boolean hwyFlag; //stores user preference for whether to avoid major highways public Vector timeEstimate; //time estimate in seconds public Vector tollsAmount; //stores toll amount if toll roads are used public Destination currentDestination; //uses user-created class Destination private void updateCurrentLocation() { //execute api call out to GPS service to obtain current location //current location will be hardcoded for testing double[] tmpLoc = {28.1700863880887, -80.67088403224037}; currentLocation = tmpLoc; } private void calculateRoutes() { //execute api call out to routing service to get route info //ideally a query would go out using multiple pathfiding algorithms to get route options updateCurrentLocation(); HelperFunctions apiCallToRouting = new HelperFunctions(); //route option 1 routeSequences.add(apiCallToRouting.routingAPI(currentLocation, currentDestination.getDestinationCoordinates(), tollsFlag, hwyFlag)); timeEstimate[0] = estimateTime(routeSequences.get(0)); estimateTolls(routeSequences.get(0)); //route option 2 routeSequences.add(apiCallToRouting.routingAPI(currentLocation, currentDestination.getDestinationCoordinates(), tollsFlag, hwyFlag)); timeEstimate[1] = estimateTime(routeSequences.get(1)); estimateTolls(routeSequences.get(1)); //route option 3 routeSequences.add(apiCallToRouting.routingAPI(currentLocation, currentDestination.getDestinationCoordinates(), tollsFlag, hwyFlag)); timeEstimate[2] = estimateTime(routeSequences.get(2)); estimateTolls(routeSequences.get(2)); } public int enumRoutes() { return routeSequences.length; } public void selectRoute(int userSelection) { routeSelected = userSelection; } public int getRouteSelected() {return routeSelected;} public float estimateTolls(double[][] route) { float runningTolls = 0; for (int i = 0; i <= route.length; i++) { runningTolls += route[i][3]; } return runningTolls; } public double estimateTime(Vector route) { //calculates distances between route segments, divided by speed in MPH //the API would return expected speed due to traffic conditions as part of the speed (index 2) in the route array double runningTime = 0; //steps through subsequence route points to get distances, calculates time based on speed estimate, and accumulates on runningTime for (String[] el : route) { runningTime += Double.parseDouble(el[1])/Double.parseDouble(el[2]); } return runningTime; } }