/** * Checks if an {@link AtlasObject} has a tag defining the minimum height of a building. * * @param object * {@link AtlasObject} to check * @return true if {@code object} has a tag defining the minimum height of a building */ private boolean hasMinKey(final AtlasObject object) { return Validators.hasValuesFor(object, BuildingMinLevelTag.class) || Validators.hasValuesFor(object, MinHeightTag.class); }
/** * Convenience method that returns a filter for a {@link Taggable} that evaluates if all passed * in tag types are present * * @param tagTypes * the type of tags to check * @return a filter for a Taggable entity that evaluates if if contains all specified tag types */ public static Predicate<Taggable> hasValuesFor(final Class<?>... tagTypes) { if (tagTypes.length == 0) { return taggable -> false; } return taggable -> hasValuesFor(taggable, tagTypes); }
@Override protected void handle(final Atlas atlas, final CommandMap command) { final Predicate<Taggable> missingISOCountryTag = Validators .hasValuesFor(ISOCountryTag.class).negate(); StreamSupport.stream(atlas.items().spliterator(), true).filter(missingISOCountryTag) .forEach(this::log); }
@Override protected void handle(final Atlas atlas, final CommandMap command) { final Predicate<Taggable> filter = Validators.hasValuesFor(BuildingPartTag.class); StreamSupport.stream(atlas.items().spliterator(), true).filter(filter) .forEach(AtlasFindBuildingPartsSubCommand::output); } }
/** * Checks if an {@link Edge} has values that indicate it is crossable by another edge. * * @param edge * {@link Edge} to be checked * @return true if it is a bridge or tunnel, or has a layer tag */ private boolean ignoreBridgeTunnelCrossings(final Edge edge) { return Validators.hasValuesFor(edge, LayerTag.class) || BridgeTag.isBridge(edge) || TunnelTag.isTunnel(edge); }
/** * Looking for (highway=pedestrian or highway=footway) and (building = * or area=yes) tag * combination. These are pedestrian plazas and can contain valid road intersections. * * @param taggable * The taggable object being test * @return Whether the taggable object is a highway area or not */ public static boolean isHighwayArea(final Taggable taggable) { return Validators.isOfType(taggable, HighwayTag.class, HighwayTag.PEDESTRIAN, HighwayTag.FOOTWAY) && (Validators.isOfType(taggable, AreaTag.class, AreaTag.YES) || Validators.hasValuesFor(taggable, BuildingTag.class)); }
/** * Checks to see whether the atlas object has the prerequisites to be evaluated. It uses a * function {@link BaseCheck#isFlagged(Object)} that looks through a list of elements that have * been flagged by the check algorithm, and if the check has already looked at a specific * feature it can skip it here. This is useful if you are walking the graph in your check * algorithm and then can flag each feature that you visit while walking the graph. * * @param object * the {@link AtlasObject} you are checking * @return {@code true} if object should be checked */ @Override public boolean validCheckForObject(final AtlasObject object) { // Master edges with building tags or with eligible highway tags return object instanceof Edge && ((Edge) object).isMasterEdge() && (Validators.hasValuesFor(object, BuildingTag.class) || ((Edge) object) .highwayTag().isMoreImportantThanOrEqualTo(this.minimumHighwayType)) // Areas || object instanceof Area // Lines excluding ineligible highway tags || object instanceof Line // Exclude waterway tags && !Validators.hasValuesFor(object, WaterwayTag.class); }
/** * This function will validate if the supplied atlas object is valid for the check. * * @param object * the atlas object supplied by the Atlas-Checks framework for evaluation * @return {@code true} if this object should be checked */ @Override public boolean validCheckForObject(final AtlasObject object) { // Valid objects are items that were OSM nodes or ways (Equivalent to Atlas nodes, points, // edges, lines and areas) return !(object instanceof Relation) && !this.isFlagged(object.getOsmIdentifier()) && ((object.getTags().containsKey(ISOCountryTag.KEY) // Must have an ISO code that is in checkNameCountries... && this.checkNameCountries .contains(object.tag(ISOCountryTag.KEY).toUpperCase()) // And have a name tag && Validators.hasValuesFor(object, NameTag.class)) // Or it must have a specific language name tag from languageNameTags || this.languageNameTags.stream() .anyMatch(key -> object.getOsmTags().containsKey(key))); }
private static Predicate<Edge> ignoreTags() { return edge -> !(Validators.isOfType(edge, CoveredTag.class, CoveredTag.YES) || Validators.isOfType(edge, TunnelTag.class, TunnelTag.BUILDING_PASSAGE, TunnelTag.YES) || Validators.isOfType(edge, AreaTag.class, AreaTag.YES) || YES_VALUE.equals(edge.tag(INDOOR_KEY)) || HIGHWAY_SERVICE_TAG.test(edge) && Validators.isOfType(edge, ServiceTag.class, ServiceTag.DRIVEWAY) || edge.connectedNodes().stream().anyMatch(node -> Validators.isOfType(node, EntranceTag.class, EntranceTag.YES) || Validators.isOfType(node, AmenityTag.class, AmenityTag.PARKING_ENTRANCE) // Ignore edges with nodes containing Barrier tags || Validators.hasValuesFor(node, BarrierTag.class))); }
@Test public void testUnionOfFilters() { final Predicate<Taggable> unionTocheck = Validators.hasValuesFor(WaterTag.class) .and(Validators.hasValuesFor(NaturalTag.class)); Assert.assertTrue(unionTocheck .test(new TestTaggable(WaterTag.CANAL, NaturalTag.BAY, HighwayTag.BUS_STOP))); Assert.assertFalse( unionTocheck.test(new TestTaggable(HighwayTag.BUS_STOP, NaturalTag.BAY))); }
/** * This function will validate if the supplied atlas object is valid for the check. * * @param object * the atlas object supplied by the Atlas-Checks framework for evaluation * @return {@code true} if this object should be checked */ @Override public boolean validCheckForObject(final AtlasObject object) { return Validators.hasValuesFor(object, LanesTag.class) && HighwayTag.isCarNavigableHighway(object) && object instanceof Edge && ((Edge) object).isMasterEdge() && !this.lanesFilter.test(object) && !this.isFlagged(object.getOsmIdentifier()); }
@Test public void oneOfOne() { Assert.assertTrue( Validators.hasValuesFor(new TestTaggable(NameTag.KEY, "yes!"), NameTag.class)); }
@Test public void degenerateCase() { Assert.assertTrue(Validators.hasValuesFor(new TestTaggable(NameTag.KEY, "yes!"))); }
@Test public void testManyOfManyFilter() { final Predicate<Taggable> checkMe = Validators.hasValuesFor(WaterTag.class, NaturalTag.class); Assert.assertTrue(checkMe .test(new TestTaggable(WaterTag.CANAL, NaturalTag.BAY, HighwayTag.BUS_STOP))); Assert.assertFalse(checkMe.test(new TestTaggable(HighwayTag.BUS_STOP, NaturalTag.BAY))); }
@Test public void testOneOfOneFilter() { final Predicate<Taggable> checkMe = Validators.hasValuesFor(NameTag.class); Assert.assertTrue(checkMe.test(new TestTaggable(NameTag.KEY, "someName"))); Assert.assertFalse(checkMe.test(new TestTaggable(WaterTag.CANAL))); }
@Test public void twoOfThreeEnums() { Assert.assertFalse( Validators.hasValuesFor(new TestTaggable(WaterTag.CANAL, NaturalTag.WATER), NaturalTag.class, HighwayTag.class, WaterTag.class)); } }
@Test public void oneOfOneEnum() { Assert.assertTrue( Validators.hasValuesFor(new TestTaggable(WaterTag.CANAL), WaterTag.class)); }
@Test public void threeOfThreeEnums() { Assert.assertTrue(Validators.hasValuesFor( new TestTaggable(WaterTag.CANAL, NaturalTag.WATER, HighwayTag.ESCAPE), NaturalTag.class, HighwayTag.class, WaterTag.class)); }
@Test public void threeOfTwoEnums() { Assert.assertTrue(Validators.hasValuesFor( new TestTaggable(WaterTag.CANAL, NaturalTag.WATER, HighwayTag.ESCAPE), NaturalTag.class, WaterTag.class)); }
@Test public void testPbfWithIncompleteRelations() { // This PBF has several interesting use cases. 1. It will have relations of relations. 2. // Some of the member relations will be outside of the PBF and will be missing. final String path = RawAtlasGeneratorTest.class.getResource("7-105-51.osm.pbf").getPath(); final RawAtlasGenerator rawAtlasGenerator = new RawAtlasGenerator(new File(path)); final Atlas atlas = rawAtlasGenerator.build(); // Verify Atlas Entities assertBasicRawAtlasPrinciples(atlas); Assert.assertEquals(457837, atlas.numberOfPoints()); Assert.assertEquals(45839, atlas.numberOfLines()); Assert.assertEquals(347, atlas.numberOfRelations()); Assert.assertEquals(49, Iterables.size(atlas.points( point -> Validators.hasValuesFor(point, SyntheticDuplicateOsmNodeTag.class)))); }