private Direction decryptNonTransit(Leg leg) { Direction direction = new Direction(); // // http://opentripplanner.usf.edu/opentripplanner-api-webapp/ws/plan?optimize=QUICK&time=09:24pm&arriveBy=false&wheelchair=false&maxWalkDistance=7600.0&fromPlace=28.033389%2C+-82.521034&toPlace=28.064709%2C+-82.471618&date=03/07/12&mode=WALK,TRAM,SUBWAY,RAIL,BUS,FERRY,CABLE_CAR,GONDOLA,FUNICULAR,TRANSIT,TRAINISH,BUSISH // Get appropriate action and icon String action = "Walk"; int icon = R.drawable.mode_walk; TraverseMode mode = TraverseMode.valueOf((String) leg.mode); if (mode.compareTo(TraverseMode.BICYCLE) == 0) { action = "Bike"; icon = R.drawable.mode_bicycle; } else if (mode.compareTo(TraverseMode.CAR) == 0) { action = "Drive"; icon = R.drawable.icon; } direction.setIcon(icon); // Main direction Place fromPlace = leg.from; Place toPlace = leg.to; String mainDirectionText = action; mainDirectionText += fromPlace.name == null ? "" : " from " + fromPlace.name; mainDirectionText += toPlace.name == null ? "" : " to " + toPlace.name; mainDirectionText += toPlace.stopId == null ? "" : " (" + toPlace.stopId.getAgencyId() + " " + toPlace.stopId.getId() + ")"; // double duration = DateTimeConversion.getDuration(leg.startTime, leg.endTime); double totalDistance = leg.distance; DecimalFormat twoDForm = new DecimalFormat("#.##"); totalDistance = Double.valueOf(twoDForm.format(totalDistance)); mainDirectionText += "\n[" + totalDistance + "meters ]"; // Double.toString(duration); direction.setDirectionText(mainDirectionText); // Sub-direction List<WalkStep> walkSteps = leg.getSteps(); if (walkSteps == null) return direction; ArrayList<Direction> subDirections = new ArrayList<Direction>(walkSteps.size()); for (WalkStep step : walkSteps) { Direction dir = new Direction(); String subDirectionText = ""; double distance = step.distance; // Distance traveled [distance] distance = Double.valueOf(twoDForm.format(distance)); dir.setDistanceTraveled(distance); RelativeDirection relativeDir = step.relativeDirection; String streetName = step.streetName; AbsoluteDirection absoluteDir = step.absoluteDirection; String exit = step.exit; boolean isStayOn = (step.stayOn == null ? false : step.stayOn); boolean isBogusName = (step.bogusName == null ? false : step.bogusName); double lon = step.lon; double lat = step.lat; String elevation = step.elevation; List<Alerts> alert = step.alerts; // Walk East if (relativeDir == null) { subDirectionText += action + " "; subDirectionText += absoluteDir.name() + " "; } // (Turn left)/(Continue) else { if (!isStayOn) { RelativeDirection rDir = RelativeDirection.valueOf(relativeDir.name()); // Do not need TURN Continue if (rDir.compareTo(RelativeDirection.CONTINUE) != 0 && rDir.compareTo(RelativeDirection.CIRCLE_CLOCKWISE) != 0 && rDir.compareTo(RelativeDirection.CIRCLE_COUNTERCLOCKWISE) != 0) { subDirectionText += "Turn "; } subDirectionText += relativeDir.name() + " "; } else { subDirectionText += relativeDir.name() + " "; } } // (on ABC) // if(!isBogusName) { // subDirectionText += "on "+ streetName + " "; // } subDirectionText += "on " + streetName + " "; subDirectionText += "\n[" + Double.toString(distance) + "meters ]"; dir.setDirectionText(subDirectionText); dir.setIcon(icon); // Add new sub-direction subDirections.add(dir); } direction.setSubDirections(subDirections); return direction; }
public static String getLocalizedRelativeDir(RelativeDirection relDir, Resources resources) { if (relDir != null) { if (relDir.equals(RelativeDirection.CIRCLE_CLOCKWISE)) { return resources.getString(R.string.step_by_step_non_transit_dir_relative_circle_clockwise); } else if (relDir.equals(RelativeDirection.CIRCLE_COUNTERCLOCKWISE)) { return resources.getString( R.string.step_by_step_non_transit_dir_relative_circle_counterclockwise); } else if (relDir.equals(RelativeDirection.CONTINUE)) { return resources.getString(R.string.step_by_step_non_transit_dir_relative_continue); } else if (relDir.equals(RelativeDirection.DEPART)) { return resources.getString(R.string.step_by_step_non_transit_dir_relative_depart); } else if (relDir.equals(RelativeDirection.ELEVATOR)) { return resources.getString(R.string.step_by_step_non_transit_dir_relative_elevator); } else if (relDir.equals(RelativeDirection.HARD_LEFT)) { return resources.getString(R.string.step_by_step_non_transit_dir_relative_hard_left); } else if (relDir.equals(RelativeDirection.HARD_RIGHT)) { return resources.getString(R.string.step_by_step_non_transit_dir_relative_hard_right); } else if (relDir.equals(RelativeDirection.LEFT)) { return resources.getString(R.string.step_by_step_non_transit_dir_relative_left); } else if (relDir.equals(RelativeDirection.RIGHT)) { return resources.getString(R.string.step_by_step_non_transit_dir_relative_right); } else if (relDir.equals(RelativeDirection.SLIGHTLY_LEFT)) { return resources.getString(R.string.step_by_step_non_transit_dir_relative_slightly_left); } else if (relDir.equals(RelativeDirection.SLIGHTLY_RIGHT)) { return resources.getString(R.string.step_by_step_non_transit_dir_relative_slightly_right); } else if (relDir.equals(RelativeDirection.UTURN_LEFT)) { return resources.getString(R.string.step_by_step_non_transit_dir_relative_uturn_left); } else if (relDir.equals(RelativeDirection.UTURN_RIGHT)) { return resources.getString(R.string.step_by_step_non_transit_dir_relative_uturn_right); } } return null; }
public static int getRelativeDirectionIcon(RelativeDirection relDir, Resources resources) { if (relDir.equals(RelativeDirection.CIRCLE_CLOCKWISE)) { return R.drawable.ic_rotary_clockwise; } else if (relDir.equals(RelativeDirection.CIRCLE_COUNTERCLOCKWISE)) { return R.drawable.ic_rotary_counterclockwise; } else if (relDir.equals(RelativeDirection.CONTINUE)) { return R.drawable.ic_continue; } else if (relDir.equals(RelativeDirection.DEPART)) { return R.drawable.ic_depart; } else if (relDir.equals(RelativeDirection.ELEVATOR)) { return R.drawable.ic_elevator; } else if (relDir.equals(RelativeDirection.HARD_LEFT)) { return R.drawable.ic_turn_sharp_left; } else if (relDir.equals(RelativeDirection.HARD_RIGHT)) { return R.drawable.ic_turn_sharp_right; } else if (relDir.equals(RelativeDirection.LEFT)) { return R.drawable.ic_turn_left; } else if (relDir.equals(RelativeDirection.RIGHT)) { return R.drawable.ic_turn_right; } else if (relDir.equals(RelativeDirection.SLIGHTLY_LEFT)) { return R.drawable.ic_turn_slight_left; } else if (relDir.equals(RelativeDirection.SLIGHTLY_RIGHT)) { return R.drawable.ic_turn_slight_right; } else if (relDir.equals(RelativeDirection.UTURN_LEFT)) { return R.drawable.ic_uturn_left; } else if (relDir.equals(RelativeDirection.UTURN_RIGHT)) { return R.drawable.ic_uturn_right; } else { Log.d(TAG, "No icon for direction: " + relDir); return -1; } }
private Direction generateNonTransitDirections(Leg leg) { Direction direction = new Direction(); // http://opentripplanner.usf.edu/opentripplanner-api-webapp/ws/plan?optimize=QUICK&time=09:24pm&arriveBy=false&wheelchair=false&maxWalkDistance=7600.0&fromPlace=28.033389%2C+-82.521034&toPlace=28.064709%2C+-82.471618&date=03/07/12&mode=WALK,TRAM,SUBWAY,RAIL,BUS,FERRY,CABLE_CAR,GONDOLA,FUNICULAR,TRANSIT,TRAINISH,BUSISH // Get appropriate action and icon String action = applicationContext .getResources() .getString(R.string.step_by_step_non_transit_mode_walk_action); TraverseMode mode = TraverseMode.valueOf((String) leg.mode); int icon = getModeIcon(new TraverseModeSet(mode)); if (mode.compareTo(TraverseMode.BICYCLE) == 0) { action = applicationContext .getResources() .getString(R.string.step_by_step_non_transit_mode_bicycle_action); } else if (mode.compareTo(TraverseMode.CAR) == 0) { action = applicationContext .getResources() .getString(R.string.step_by_step_non_transit_mode_car_action); } direction.setIcon(icon); // Main direction Place fromPlace = leg.from; Place toPlace = leg.to; String mainDirectionText = action; mainDirectionText += fromPlace.name == null ? "" : " " + applicationContext .getResources() .getString(R.string.step_by_step_non_transit_from) + " " + getLocalizedStreetName(fromPlace.name, applicationContext.getResources()); mainDirectionText += toPlace.name == null ? "" : " " + applicationContext.getResources().getString(R.string.step_by_step_non_transit_to) + " " + getLocalizedStreetName(toPlace.name, applicationContext.getResources()); String extraStopInformation = toPlace.stopCode; long legDuration; SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext); if (prefs.getInt(OTPConstants.PREFERENCE_KEY_API_VERSION, OTPConstants.API_VERSION_V1) == OTPConstants.API_VERSION_V1) { legDuration = leg.duration; } else { legDuration = leg.duration / 1000; } if (!TextUtils.isEmpty(extraStopInformation)) { mainDirectionText += " (" + extraStopInformation + ")"; } mainDirectionText += "\n[" + ConversionUtils.getFormattedDistance(leg.distance, applicationContext) + " - " + ConversionUtils.getFormattedDurationTextNoSeconds( legDuration, false, applicationContext) + " ]"; direction.setDirectionText(mainDirectionText); // Sub-direction List<WalkStep> walkSteps = leg.getSteps(); if (walkSteps == null) { return direction; } ArrayList<Direction> subDirections = new ArrayList<Direction>(walkSteps.size()); for (WalkStep step : walkSteps) { int subdirection_icon = -1; Direction dir = new Direction(); String subDirectionText = ""; double distance = step.distance; RelativeDirection relativeDir = step.relativeDirection; String relativeDirString = getLocalizedRelativeDir(relativeDir, applicationContext.getResources()); String streetName = step.streetName; AbsoluteDirection absoluteDir = step.absoluteDirection; String absoluteDirString = getLocalizedAbsoluteDir(absoluteDir, applicationContext.getResources()); String exit = step.exit; boolean isStayOn = (step.stayOn == null ? false : step.stayOn); boolean isBogusName = (step.bogusName == null ? false : step.bogusName); double lon = step.lon; double lat = step.lat; String streetConnector = applicationContext .getResources() .getString(R.string.step_by_step_non_transit_connector_street_name); // Elevation[] elevation = step.getElevation(); //Removed elevation for now, since we're not // doing anything with it and it causes version issues between OTP server APIs v0.9.1-SNAPSHOT // and v0.9.2-SNAPSHOT List<Alerts> alert = step.alerts; // Walk East if (relativeDir == null) { subDirectionText += action + " " + applicationContext .getResources() .getString(R.string.step_by_step_non_transit_heading) + " "; subDirectionText += absoluteDirString + " "; } // (Turn left)/(Continue) else { RelativeDirection rDir = RelativeDirection.valueOf(relativeDir.name()); subdirection_icon = getRelativeDirectionIcon(rDir, applicationContext.getResources()); // Do not need TURN Continue if (rDir.compareTo(RelativeDirection.RIGHT) == 0 || rDir.compareTo(RelativeDirection.LEFT) == 0) { subDirectionText += applicationContext.getResources().getString(R.string.step_by_step_non_transit_turn) + " "; } subDirectionText += relativeDirString + " "; if (rDir.compareTo(RelativeDirection.CIRCLE_CLOCKWISE) == 0 || rDir.compareTo(RelativeDirection.CIRCLE_COUNTERCLOCKWISE) == 0) { if (step.exit != null) { try { String ordinal = getOrdinal(Integer.parseInt(step.exit), applicationContext.getResources()); if (ordinal != null) { subDirectionText += ordinal + " "; } else { subDirectionText += applicationContext .getResources() .getString(R.string.step_by_step_non_transit_roundabout_number) + " " + ordinal + " "; } } catch (NumberFormatException e) { // If is not a step_by_step_non_transit_roundabout_number and is not null is better to // try to display it subDirectionText += step.exit + " "; } subDirectionText += applicationContext .getResources() .getString(R.string.step_by_step_non_transit_roundabout_exit) + " "; streetConnector = applicationContext .getResources() .getString(R.string.step_by_step_non_transit_connector_street_name_roundabout); } } } subDirectionText += streetConnector + " " + getLocalizedStreetName(streetName, applicationContext.getResources()) + " "; subDirectionText += "\n[" + ConversionUtils.getFormattedDistance(distance, applicationContext) + " ]"; dir.setDirectionText(subDirectionText); dir.setIcon(subdirection_icon); // Add new sub-direction subDirections.add(dir); } direction.setSubDirections(subDirections); return direction; }