private StreetTraversalPermission getPermissionsForEntity( OSMWithTags entity, StreetTraversalPermission def) { Map<String, String> tags = entity.getTags(); StreetTraversalPermission permission = null; String highway = tags.get("highway"); String cycleway = tags.get("cycleway"); String access = tags.get("access"); String motorcar = tags.get("motorcar"); String bicycle = tags.get("bicycle"); String foot = tags.get("foot"); /* * Only a few tags are examined here, because we only care about modes supported by OTP * (wheelchairs are not of concern here) * * Only a few values are checked for, all other values are presumed to be permissive (=> * This may not be perfect, but is closer to reality, since most people don't follow the * rules perfectly ;-) */ if (access != null) { if ("no".equals(access) || "license".equals(access)) { // this can actually be overridden permission = StreetTraversalPermission.NONE; if (entity.doesTagAllowAccess("motorcar")) { permission = permission.add(StreetTraversalPermission.CAR); } if (entity.doesTagAllowAccess("bicycle")) { permission = permission.add(StreetTraversalPermission.BICYCLE); } if (entity.doesTagAllowAccess("foot")) { permission = permission.add(StreetTraversalPermission.PEDESTRIAN); } } else { permission = def; } } else if (motorcar != null || bicycle != null || foot != null) { permission = def; } if (motorcar != null) { if ("no".equals(motorcar) || "license".equals(motorcar)) { permission = permission.remove(StreetTraversalPermission.CAR); } else { permission = permission.add(StreetTraversalPermission.CAR); } } if (bicycle != null) { if ("no".equals(bicycle) || "license".equals(bicycle)) { permission = permission.remove(StreetTraversalPermission.BICYCLE); } else { permission = permission.add(StreetTraversalPermission.BICYCLE); } } if (foot != null) { if ("no".equals(foot) || "license".equals(foot)) { permission = permission.remove(StreetTraversalPermission.PEDESTRIAN); } else { permission = permission.add(StreetTraversalPermission.PEDESTRIAN); } } if (highway != null) { if ("construction".equals(highway)) { permission = StreetTraversalPermission.NONE; } } else { if ("construction".equals(cycleway)) { permission = StreetTraversalPermission.NONE; } } if (permission == null) return def; return permission; }