@Override public boolean getBool(int key, boolean _default) { return edges.get(current).getBool(key, _default); }
@Override public long calcMillis(EdgeIteratorState edgeState, boolean reverse, int prevOrNextEdgeId) { // TODO move this to AbstractWeighting? long time = 0; boolean unfavoredEdge = edgeState.getBool(EdgeIteratorState.K_UNFAVORED_EDGE, false); if (unfavoredEdge) time += headingPenaltyMillis; return time + super.calcMillis(edgeState, reverse, prevOrNextEdgeId); }
@Override public long calcMillis(EdgeIteratorState edgeState, boolean reverse, int prevOrNextEdgeId) { // TODO to avoid expensive reverse flags include oneway accessibility // but how to include e.g. maxspeed as it depends on direction? Does highway depend on direction? // reverse = edge.isReverse()? !reverse : reverse; double speed = weightingConfig.getSpeed(edgeState); if (speed == 0) return Long.MAX_VALUE; // TODO inner city guessing -> lit, maxspeed <= 50, residential etc => create new encoder.isInnerCity(edge) // See #472 use edge.getDouble((encoder), K_MAXSPEED_MOTORVEHICLE_FORWARD, _default) or edge.getMaxSpeed(...) instead? // encoder could be made optional via passing to EdgeExplorer double maxspeed = gEncoder.getMaxspeed(edgeState, accessType, reverse); if (maxspeed > 0 && speed > maxspeed) speed = maxspeed; // TODO test performance difference for rounding long timeInMillis = (long) (edgeState.getDistance() / speed * SPEED_CONV); // add direction penalties at start/stop/via points boolean unfavoredEdge = edgeState.getBool(EdgeIteratorState.K_UNFAVORED_EDGE, false); if (unfavoredEdge) timeInMillis += headingPenaltyMillis; // TODO avoid a certain (or multiple) bounding boxes (less efficient for just a few edges) or a list of edgeIDs (not good for large areas) // bbox.contains(nodeAccess.getLatitude(edge.getBaseNode()), nodeAccess.getLongitude(edge.getBaseNode())) time+=avoidPenalty; // TODO surfaces can reduce average speed // TODO prefer or avoid bike and hike routes if (timeInMillis < 0) throw new IllegalStateException("Some problem with weight calculation: time:" + timeInMillis + ", speed:" + speed); return timeInMillis; }
@Override public double calcWeight(EdgeIteratorState edge, boolean reverse, int prevOrNextEdgeId) { double speed = reverse ? flagEncoder.getReverseSpeed(edge.getFlags()) : flagEncoder.getSpeed(edge.getFlags()); if (speed == 0) return Double.POSITIVE_INFINITY; double time = edge.getDistance() / speed * SPEED_CONV; // add direction penalties at start/stop/via points boolean unfavoredEdge = edge.getBool(EdgeIteratorState.K_UNFAVORED_EDGE, false); if (unfavoredEdge) time += headingPenalty; return time; }
@Override public boolean getBool(int key, boolean _default) { return edges.get(current).getBool(key, _default); }
@Override public boolean getBool(int key, boolean _default) { return edges.get(current).getBool(key, _default); }
@Override public long calcMillis(EdgeIteratorState edgeState, boolean reverse, int prevOrNextEdgeId) { // TODO move this to AbstractWeighting? long time = 0; boolean unfavoredEdge = edgeState.getBool(EdgeIteratorState.K_UNFAVORED_EDGE, false); if (unfavoredEdge) time += headingPenaltyMillis; return time + super.calcMillis(edgeState, reverse, prevOrNextEdgeId); }
@Override public long calcMillis(EdgeIteratorState edgeState, boolean reverse, int prevOrNextEdgeId) { // TODO move this to AbstractWeighting? long time = 0; boolean unfavoredEdge = edgeState.getBool(EdgeIteratorState.K_UNFAVORED_EDGE, false); if (unfavoredEdge) time += headingPenaltyMillis; return time + super.calcMillis(edgeState, reverse, prevOrNextEdgeId); }
@Override public long calcMillis(EdgeIteratorState edgeState, boolean reverse, int prevOrNextEdgeId) { // TODO to avoid expensive reverse flags include oneway accessibility // but how to include e.g. maxspeed as it depends on direction? Does highway depend on direction? // reverse = edge.isReverse()? !reverse : reverse; double speed = weightingConfig.getSpeed(edgeState); if (speed == 0) return Long.MAX_VALUE; // TODO inner city guessing -> lit, maxspeed <= 50, residential etc => create new encoder.isInnerCity(edge) // See #472 use edge.getDouble((encoder), K_MAXSPEED_MOTORVEHICLE_FORWARD, _default) or edge.getMaxSpeed(...) instead? // encoder could be made optional via passing to EdgeExplorer double maxspeed = gEncoder.getMaxspeed(edgeState, accessType, reverse); if (maxspeed > 0 && speed > maxspeed) speed = maxspeed; // TODO test performance difference for rounding long timeInMillis = (long) (edgeState.getDistance() / speed * SPEED_CONV); // add direction penalties at start/stop/via points boolean unfavoredEdge = edgeState.getBool(EdgeIteratorState.K_UNFAVORED_EDGE, false); if (unfavoredEdge) timeInMillis += headingPenaltyMillis; // TODO avoid a certain (or multiple) bounding boxes (less efficient for just a few edges) or a list of edgeIDs (not good for large areas) // bbox.contains(nodeAccess.getLatitude(edge.getBaseNode()), nodeAccess.getLongitude(edge.getBaseNode())) time+=avoidPenalty; // TODO surfaces can reduce average speed // TODO prefer or avoid bike and hike routes if (timeInMillis < 0) throw new IllegalStateException("Some problem with weight calculation: time:" + timeInMillis + ", speed:" + speed); return timeInMillis; }
boolean unfavoredEdge = edgeState.getBool(EdgeIteratorState.K_UNFAVORED_EDGE, false); if (unfavoredEdge) timeInMillis += headingPenaltyMillis;
@Override public double calcWeight(EdgeIteratorState edge, boolean reverse, int prevOrNextEdgeId) { double speed = reverse ? flagEncoder.getReverseSpeed(edge.getFlags()) : flagEncoder.getSpeed(edge.getFlags()); if (speed == 0) return Double.POSITIVE_INFINITY; double time = edge.getDistance() / speed * SPEED_CONV; // add direction penalties at start/stop/via points boolean unfavoredEdge = edge.getBool(EdgeIteratorState.K_UNFAVORED_EDGE, false); if (unfavoredEdge) time += headingPenalty; return time; }
@Override public double calcWeight(EdgeIteratorState edge, boolean reverse, int prevOrNextEdgeId) { double speed = reverse ? flagEncoder.getReverseSpeed(edge.getFlags()) : flagEncoder.getSpeed(edge.getFlags()); if (speed == 0) return Double.POSITIVE_INFINITY; double time = edge.getDistance() / speed * SPEED_CONV; // add direction penalties at start/stop/via points boolean unfavoredEdge = edge.getBool(EdgeIteratorState.K_UNFAVORED_EDGE, false); if (unfavoredEdge) time += headingPenalty; return time; }