private boolean locationItemCoversInitialShardBounds(final LocationItem locationItem) { return this.policy.getInitialShardsBounds() .fullyGeometricallyEncloses(locationItem.getLocation()); }
boolean locationItemCovered(final LocationItem item) { final Location location = item.getLocation(); final MultiPolygon initialShardsBounds = this.policy.getInitialShardsBounds(); if (!this.policy.isExtendIndefinitely() && !initialShardsBounds.fullyGeometricallyEncloses(location)) { // If the policy is to not extend indefinitely, then assume that the loading is not // necessary. return true; } final Iterable<? extends Shard> neededShards = this.sharding.shardsCovering(location); for (final Shard neededShard : neededShards) { if (!this.loadedShards.containsKey(neededShard)) { newLocation(location, item); return false; } } return true; }
@Override public boolean multiPolygonEntityIntersecting(final MultiPolygon multiPolygon, final AtlasEntity entity) { if (entity instanceof LineItem) { return multiPolygon.overlaps(((LineItem) entity).asPolyLine()); } if (entity instanceof LocationItem) { return multiPolygon .fullyGeometricallyEncloses(((LocationItem) entity).getLocation()); } if (entity instanceof Area) { return multiPolygon.overlaps(((Area) entity).asPolygon()); } if (entity instanceof Relation) { return ((Relation) entity).members().stream().map(RelationMember::getEntity) .anyMatch(relationEntity -> this .multiPolygonEntityIntersecting(multiPolygon, relationEntity)); } else { return false; } }
@Override public boolean multiPolygonEntityIntersecting(final MultiPolygon multiPolygon, final AtlasEntity entity) { if (entity instanceof LineItem) { return multiPolygon.fullyGeometricallyEncloses(((LineItem) entity).asPolyLine()); } if (entity instanceof LocationItem) { return multiPolygon .fullyGeometricallyEncloses(((LocationItem) entity).getLocation()); } if (entity instanceof Area) { return multiPolygon.fullyGeometricallyEncloses(((Area) entity).asPolygon()); } if (entity instanceof Relation) { return ((Relation) entity).members().stream().map(RelationMember::getEntity) .anyMatch(relationEntity -> this .multiPolygonEntityIntersecting(multiPolygon, relationEntity)); } else { return false; } }
if (fullyGeometricallyEncloses(location))
+ "(89.25 89.75, 89.75 89.75, 89.75 89.25, 89.25 89.25, 89.25 89.75)))"); Assert.assertTrue(multiPolygon1.fullyGeometricallyEncloses(multiPolygon2)); Assert.assertFalse(multiPolygon2.fullyGeometricallyEncloses(multiPolygon1)); Assert.assertFalse(multiPolygon1.fullyGeometricallyEncloses(multiPolygon3)); Assert.assertFalse(multiPolygon1.fullyGeometricallyEncloses(multiPolygon4)); Assert.assertFalse(multiPolygon1.fullyGeometricallyEncloses(multiPolygon5)); Assert.assertFalse(multiPolygon5.fullyGeometricallyEncloses(multiPolygon1)); Assert.assertFalse( multiPolygon1.fullyGeometricallyEncloses(multiPolygon2.merge(multiPolygon5))); Assert.assertTrue(multiPolygon1.fullyGeometricallyEncloses(multiPolygon6)); Assert.assertFalse(multiPolygon1.fullyGeometricallyEncloses(multiPolygon7)); Assert.assertFalse(multiPolygon1.fullyGeometricallyEncloses(polyLine1)); Assert.assertTrue(multiPolygon1.fullyGeometricallyEncloses(polyLine2)); Assert.assertFalse(multiPolygon1.fullyGeometricallyEncloses(polygon1));
@Test public void testCoversPolyLine() { final MultiPolygon multiPolygon = MultiPolygon .wkt("MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40))," + "((20 35, 10 30, 10 10, 30 5, 45 20, 20 35)," + "(30 20, 20 15, 20 25, 30 20)))"); final PolyLine nonCoveredLine = new PolyLine(Location.forString("19.507134, 23.999584"), Location.forString("32.062144, 32.049430")); Assert.assertFalse(multiPolygon.fullyGeometricallyEncloses(nonCoveredLine)); final PolyLine coveredLine = new PolyLine(Location.forString("32.095270, 19.955880"), Location.forString("22.175213, 36.610574")); Assert.assertTrue(multiPolygon.fullyGeometricallyEncloses(coveredLine)); final PolyLine outside = PolyLine.TEST_POLYLINE; Assert.assertFalse(multiPolygon.fullyGeometricallyEncloses(outside)); final PolyLine jumpyLine = new PolyLine(Location.forString("32.095270, 19.955880"), Location.forString("39.927387, 32.842205")); Assert.assertFalse(multiPolygon.fullyGeometricallyEncloses(jumpyLine)); }
.convert(relation); if (object.intersects(relationPolygon) || relationPolygon.fullyGeometricallyEncloses(object.asPolyLine()))