@Test public void testReduceToMaxSpeed() { ReaderWay way = new ReaderWay(12); way.setTag("maxspeed", "90"); assertEquals(12, encoder.applyMaxSpeed(way, 12), 1e-2); }
@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); }
@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; }
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");
@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); }
@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; }
if (!isFerry(allowed)) wayTypeSpeed = applyMaxSpeed(way, wayTypeSpeed); flags = handleSpeed(way, wayTypeSpeed, flags); flags = handleBikeRelated(way, flags, relationFlags > UNCHANGED.getValue());
@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; }