protected double getSpeedFromFlags(ReaderWay way) { long allowed = encoder.acceptBit; long flags = encoder.handleWayTags(way, allowed, 0); return encoder.getSpeed(flags); }
@Test @Override public void testService() { ReaderWay way = new ReaderWay(1); way.setTag("highway", "service"); assertEquals(12, encoder.getSpeed(way)); assertPriority(UNCHANGED.getValue(), way); way.setTag("service", "parking_aisle"); assertEquals(6, encoder.getSpeed(way)); assertPriority(AVOID_IF_POSSIBLE.getValue(), way); }
@Test public void testService() { ReaderWay way = new ReaderWay(1); way.setTag("highway", "service"); assertEquals(14, encoder.getSpeed(way)); assertPriority(PREFER.getValue(), way); way.setTag("service", "parking_aisle"); assertEquals(6, encoder.getSpeed(way)); assertPriority(AVOID_IF_POSSIBLE.getValue(), way); }
@Test public void testPreferenceForSlowSpeed() { ReaderWay osmWay = new ReaderWay(1); osmWay.setTag("highway", "tertiary"); assertEquals(30, encoder.getSpeed(encoder.setSpeed(0, encoder.applyMaxSpeed(osmWay, 49))), 1e-1); assertPriority(PREFER.getValue(), osmWay); }
@Test public void testApplyWayTags() { Graph graph = initExampleGraph(); EdgeIteratorState edge = GHUtility.getEdge(graph, 0, 1); ReaderWay way = new ReaderWay(1); encoder.applyWayTags(way, edge); long flags = edge.getFlags(); // decrease speed assertEquals(2, encoder.getSpeed(flags), 1e-1); // increase speed but use maximum speed (calculated was 24) assertEquals(18, encoder.getReverseSpeed(flags), 1e-1); }
@Test public void testGetSpeed() { long result = encoder.setProperties(10, true, true); assertEquals(10, encoder.getSpeed(result), 1e-1); ReaderWay way = new ReaderWay(1); way.setTag("highway", "primary"); assertEquals(18, encoder.getSpeed(way)); assertPriority(REACH_DEST.getValue(), way); assertEquals(16, encoder.getSpeed(way)); assertPriority(PREFER.getValue(), way); assertEquals(4, encoder.getSpeed(way)); assertPriority(AVOID_IF_POSSIBLE.getValue(), way); assertEquals(18, encoder.getSpeed(way)); assertPriority(PREFER.getValue(), way); assertEquals(4, encoder.getSpeed(way)); assertPriority(AVOID_IF_POSSIBLE.getValue(), way); way.clearTags(); assertEquals(18, encoder.getSpeed(way)); assertPriority(PREFER.getValue(), way); assertEquals(18, encoder.getSpeed(way)); assertPriority(VERY_NICE.getValue(), way); way.setTag("highway", "path"); way.setTag("surface", "ground");
@Override public long handleWayTags(ReaderWay way, long allowed, long relationFlags) { if (!isAccept(allowed)) return 0; long flags = 0; double wayTypeSpeed = getSpeed(way); if (!isFerry(allowed)) { wayTypeSpeed = applyMaxSpeed(way, wayTypeSpeed); flags = handleSpeed(way, wayTypeSpeed, flags); flags = handleBikeRelated(way, flags, relationFlags > UNCHANGED.getValue()); boolean isRoundabout = way.hasTag("junction", "roundabout") || way.hasTag("junction", "circular"); if (isRoundabout) { flags = setBool(flags, K_ROUNDABOUT, true); } } else { double ferrySpeed = getFerrySpeed(way); flags = handleSpeed(way, ferrySpeed, flags); flags |= directionBitMask; } int priorityFromRelation = 0; if (relationFlags != 0) priorityFromRelation = (int) relationCodeEncoder.getValue(relationFlags); flags = priorityWayEncoder.setValue(flags, handlePriority(way, wayTypeSpeed, priorityFromRelation)); return flags; }
@Test public void testSetSpeed0_issue367() { long flags = encoder.setProperties(10, true, true); flags = encoder.setSpeed(flags, 0); assertEquals(0, encoder.getSpeed(flags), .1); assertEquals(10, encoder.getReverseSpeed(flags), .1); assertFalse(encoder.isForward(flags)); assertTrue(encoder.isBackward(flags)); }
@Test public void testMaxSpeed() { ReaderWay way = new ReaderWay(1); way.setTag("highway", "secondary"); way.setTag("maxspeed", "10"); long allowed = encoder.acceptWay(way); long encoded = encoder.handleWayTags(way, allowed, 0); assertEquals(10, encoder.getSpeed(encoded), 1e-1); assertPriority(VERY_NICE.getValue(), way); way = new ReaderWay(1); way.setTag("highway", "tertiary"); way.setTag("maxspeed", "90"); assertEquals(20, encoder.getSpeed(encoder.setSpeed(0, encoder.applyMaxSpeed(way, 20))), 1e-1); assertPriority(UNCHANGED.getValue(), way); way = new ReaderWay(1); way.setTag("highway", "track"); way.setTag("maxspeed", "90"); assertEquals(20, encoder.getSpeed(encoder.setSpeed(0, encoder.applyMaxSpeed(way, 20))), 1e-1); assertPriority(UNCHANGED.getValue(), way); way = new ReaderWay(1); way.setTag("highway", "residential"); way.setTag("maxspeed", "15"); assertEquals(15, encoder.getSpeed(encoder.setSpeed(0, encoder.applyMaxSpeed(way, 15))), 1.0); allowed = encoder.acceptWay(way); encoded = encoder.handleWayTags(way, allowed, 0); assertEquals(15, encoder.getSpeed(encoded), 1.0); assertPriority(VERY_NICE.getValue(), way); }
@Test public void testGetSpeed() { long result = encoder.setProperties(10, true, true); assertEquals(10, encoder.getSpeed(result), 1e-1); ReaderWay way = new ReaderWay(1); way.setTag("highway", "primary"); assertEquals(18, encoder.getSpeed(way)); assertPriority(REACH_DEST.getValue(), way); assertEquals(18, encoder.getSpeed(way)); assertPriority(AVOID_IF_POSSIBLE.getValue(), way); assertEquals(PUSHING_SECTION_SPEED, encoder.getSpeed(way)); assertPriority(AVOID_IF_POSSIBLE.getValue(), way); assertEquals(PUSHING_SECTION_SPEED, encoder.getSpeed(way)); assertPriority(AVOID_IF_POSSIBLE.getValue(), way); way.setTag("highway", "secondary"); way.setTag("bicycle", "dismount"); assertEquals(PUSHING_SECTION_SPEED, encoder.getSpeed(way)); assertPriority(REACH_DEST.getValue(), way); way.setTag("highway", "footway"); way.setTag("bicycle", "yes"); assertEquals(PUSHING_SECTION_SPEED, encoder.getSpeed(way)); assertPriority(PREFER.getValue(), way); way.setTag("segregated", "no"); assertEquals(PUSHING_SECTION_SPEED, encoder.getSpeed(way)); assertPriority(PREFER.getValue(), way);
osmWay.setTag("highway", "tertiary"); osmWay.setTag("maxspeed", "50"); assertEquals(20, encoder.getSpeed(encoder.setSpeed(0, encoder.applyMaxSpeed(osmWay, 20))), 1e-1); assertPriority(PREFER.getValue(), osmWay); assertEquals(20, encoder.getSpeed(encoder.setSpeed(0, encoder.applyMaxSpeed(osmWay, 20))), 1e-1); assertPriority(PREFER.getValue(), osmWay); assertEquals(20, encoder.getSpeed(encoder.setSpeed(0, encoder.applyMaxSpeed(osmWay, 20))), 1e-1); assertPriority(PREFER.getValue(), osmWay); assertEquals(20, encoder.getSpeed(encoder.setSpeed(0, encoder.applyMaxSpeed(osmWay, 20))), 1e-1); assertPriority(UNCHANGED.getValue(), osmWay); assertEquals(20, encoder.getSpeed(encoder.setSpeed(0, encoder.applyMaxSpeed(osmWay, 20))), 1e-1); assertPriority(UNCHANGED.getValue(), osmWay); assertEquals(20, encoder.getSpeed(encoder.setSpeed(0, encoder.applyMaxSpeed(osmWay, 20))), 1e-1); assertPriority(REACH_DEST.getValue(), osmWay); assertEquals(20, encoder.getSpeed(encoder.setSpeed(0, encoder.applyMaxSpeed(osmWay, 20))), 1e-1); assertPriority(AVOID_AT_ALL_COSTS.getValue(), osmWay); osmWay.setTag("tunnel", "yes"); osmWay.setTag("maxspeed", "80"); assertEquals(20, encoder.getSpeed(encoder.setSpeed(0, encoder.applyMaxSpeed(osmWay, 20))), 1e-1); assertPriority(AVOID_AT_ALL_COSTS.getValue(), osmWay); osmWay.setTag("tunnel", "yes");
assertEquals(18, encoder.getSpeed(flags), 1e-1); assertPriority(PriorityCode.PREFER.getValue(), osmWay); assertEquals("small way, unpaved", getWayTypeFromFlags(osmWay)); relFlags = encoder.handleRelationTags(osmRel, 0); flags = encoder.handleWayTags(osmWay, allowed, relFlags); assertEquals(18, encoder.getSpeed(flags), 1e-1); assertPriority(PriorityCode.PREFER.getValue(), osmWay); assertEquals("small way, unpaved", getWayTypeFromFlags(osmWay)); flags = encoder.handleWayTags(osmWay, allowed, relFlags); assertPriority(PriorityCode.PREFER.getValue(), osmWay); assertEquals(18, encoder.getSpeed(flags), 1e-1); flags = encoder.handleWayTags(osmWay, allowed, relFlags); assertPriority(PriorityCode.PREFER.getValue(), osmWay); assertEquals(18, encoder.getSpeed(flags), 1e-1); relFlags = encoder.handleRelationTags(osmRel, 0); flags = encoder.handleWayTags(osmWay, allowed, relFlags); assertEquals(18, encoder.getSpeed(flags), 1e-1); assertPriority(PriorityCode.PREFER.getValue(), osmWay); assertEquals("", getWayTypeFromFlags(osmWay));
long relFlags = encoder.handleRelationTags(osmRel, 0); long flags = encoder.handleWayTags(osmWay, allowed, relFlags); assertEquals(2, encoder.getSpeed(flags), 1e-1); assertPriority(AVOID_AT_ALL_COSTS.getValue(), osmWay, relFlags); assertEquals("small way, unpaved", getWayTypeFromFlags(osmWay, relFlags)); relFlags = encoder.handleRelationTags(osmRel, 0); flags = encoder.handleWayTags(osmWay, allowed, relFlags); assertEquals(2, encoder.getSpeed(flags), 1e-1); assertPriority(AVOID_AT_ALL_COSTS.getValue(), osmWay, relFlags); relFlags = encoder.handleRelationTags(osmRel, 0); flags = encoder.handleWayTags(osmWay, allowed, relFlags); assertEquals(2, encoder.getSpeed(flags), 1e-1); assertPriority(AVOID_AT_ALL_COSTS.getValue(), osmWay, relFlags); relFlags = encoder.handleRelationTags(osmRel, 0); flags = encoder.handleWayTags(osmWay, allowed, relFlags); assertEquals(20, encoder.getSpeed(flags), 1e-1); assertPriority(PREFER.getValue(), osmWay, relFlags); assertEquals("cycleway", getWayTypeFromFlags(osmWay, relFlags)); relFlags = encoder.handleRelationTags(osmRel, 0); flags = encoder.handleWayTags(osmWay, allowed, relFlags); assertEquals(10, encoder.getSpeed(flags), 1e-1); assertPriority(AVOID_AT_ALL_COSTS.getValue(), osmWay, relFlags); assertEquals("small way, unpaved", getWayTypeFromFlags(osmWay, relFlags)); relFlags = encoder.handleRelationTags(osmRel, 0);
assertEquals(12, encoder.getSpeed(flags), 1e-1); assertPriority(UNCHANGED.getValue(), osmWay, relFlags); relFlags = encoder.handleRelationTags(osmRel, 0); flags = encoder.handleWayTags(osmWay, allowed, relFlags); assertEquals(12, encoder.getSpeed(flags), 1e-1); assertPriority(PREFER.getValue(), osmWay, relFlags); osmRel.setTag("network", "lcn"); relFlags = encoder.handleRelationTags(osmRel, 0); flags = encoder.handleWayTags(osmWay, allowed, relFlags); assertEquals(12, encoder.getSpeed(flags), 1e-1); assertPriority(PREFER.getValue(), osmWay, relFlags);
@Test public void testGetSpeed() { long result = encoder.setProperties(10, true, true); assertEquals(10, encoder.getSpeed(result), 1e-1); ReaderWay way = new ReaderWay(1); way.setTag("highway", "track"); way.setTag("tracktype", "grade3"); // use pushing section assertEquals(PUSHING_SECTION_SPEED, getSpeedFromFlags(way), 1e-1); // Even if it is part of a cycle way way.setTag("bicycle", "yes"); assertEquals(PUSHING_SECTION_SPEED, getSpeedFromFlags(way), 1e-1); way.clearTags(); way.setTag("highway", "steps"); assertEquals(2, getSpeedFromFlags(way), 1e-1); way.clearTags(); way.setTag("highway", "primary"); assertEquals(20, getSpeedFromFlags(way), 1e-1); way.clearTags(); way.setTag("highway", "primary"); way.setTag("surface", "paved"); assertEquals(20, getSpeedFromFlags(way), 1e-1); way.clearTags(); way.setTag("highway", "primary"); way.setTag("surface", "unknownpavement"); assertEquals(PUSHING_SECTION_SPEED, getSpeedFromFlags(way), 1e-1); }
@Override public long handleWayTags(ReaderWay way, long allowed, long relationFlags) { if (!isAccept(allowed)) return 0; long flags = 0; double wayTypeSpeed = getSpeed(way); if (!isFerry(allowed)) { wayTypeSpeed = applyMaxSpeed(way, wayTypeSpeed); flags = handleSpeed(way, wayTypeSpeed, flags); flags = handleBikeRelated(way, flags, relationFlags > UNCHANGED.getValue()); boolean isRoundabout = way.hasTag("junction", "roundabout"); if (isRoundabout) { flags = setBool(flags, K_ROUNDABOUT, true); } } else { double ferrySpeed = getFerrySpeed(way, highwaySpeeds.get("living_street"), highwaySpeeds.get("track"), highwaySpeeds.get("primary")); flags = handleSpeed(way, ferrySpeed, flags); flags |= directionBitMask; } int priorityFromRelation = 0; if (relationFlags != 0) priorityFromRelation = (int) relationCodeEncoder.getValue(relationFlags); flags = priorityWayEncoder.setValue(flags, handlePriority(way, wayTypeSpeed, priorityFromRelation)); return flags; }
double wayTypeSpeed = getSpeed(way); if (!isFerry(allowed))
@Override public long handleWayTags(ReaderWay way, long allowed, long relationFlags) { if (!isAccept(allowed)) return 0; long flags = 0; double wayTypeSpeed = getSpeed(way); if (!isFerry(allowed)) { wayTypeSpeed = applyMaxSpeed(way, wayTypeSpeed); flags = handleSpeed(way, wayTypeSpeed, flags); flags = handleBikeRelated(way, flags, relationFlags > UNCHANGED.getValue()); boolean isRoundabout = way.hasTag("junction", "roundabout") || way.hasTag("junction", "circular"); if (isRoundabout) { flags = setBool(flags, K_ROUNDABOUT, true); } } else { double ferrySpeed = getFerrySpeed(way); flags = handleSpeed(way, ferrySpeed, flags); flags |= directionBitMask; } int priorityFromRelation = 0; if (relationFlags != 0) priorityFromRelation = (int) relationCodeEncoder.getValue(relationFlags); flags = priorityWayEncoder.setValue(flags, handlePriority(way, wayTypeSpeed, priorityFromRelation)); return flags; }