In one of my encoders I would like to get the RoadClass of the current ReaderWay in the method EncodingManager.Access getAccess(ReaderWay way)
. However, TagParsers are called after getAccess.
My current solution would be to do something like:
public class OSMRoadClassParser implements TagParser {
[...]
@Override
public IntsRef handleWayTags(IntsRef edgeFlags, ReaderWay readerWay, boolean ferry, IntsRef relationFlags) {
if (ferry)
return edgeFlags;
String roadClassTag = readerWay.getTag("highway");
if (roadClassTag == null)
return edgeFlags;
RoadClass roadClass = getRoadClass(roadClassTag);
if (roadClass != OTHER)
roadClassEnc.setEnum(false, edgeFlags, roadClass);
return edgeFlags;
}
public static RoadClass getRoadClass(String roadClassTag) {
RoadClass roadClass = RoadClass.find(roadClassTag);
if (roadClass == OTHER && roadClassTag.endsWith("_link"))
roadClass = RoadClass.find(roadClassTag.substring(0, roadClassTag.length() - 5));
return roadClass;
}
}
This allows me to call OSMRoadClassParser.getRoadClass(way.getTag("highway", ""))
in my encoder.
A similar “issue” exists for the CarFlagEncoder and fords:
// do not drive street cars into fords
if (isBlockFords() && ("ford".equals(highwayValue) || way.hasTag("ford")))
return EncodingManager.Access.CAN_SKIP;
Here it might be convenient to do something like OSMRoadEnvironmentParser.getRoadEnvironment(way) == FORD
.