@Test public void testAsGeoJsonGeometry() { 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 String geoJson = "{\"type\":\"MultiPolygon\",\"coordinates\":[[[[40.0,40.0],[20.0,45.0],[45.0,30.0],[40.0,40.0]]],[[[20.0,35.0],[10.0,30.0],[10.0,10.0],[30.0,5.0],[45.0,20.0],[20.0,35.0]],[[30.0,20.0],[20.0,15.0],[20.0,25.0],[30.0,20.0]]]]}"; final JsonObject geometry = multiPolygon.asGeoJsonGeometry(); Assert.assertEquals(geoJson, geometry.toString()); } }
@Test public void testMultiPolygonShards() { 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 Set<Shard> coveredShards = StreamSupport .stream(new SlippyTileSharding(8).shards(multiPolygon).spliterator(), false) .collect(Collectors.toSet()); Assert.assertFalse(coveredShards.contains(SlippyTile.forName("8-145-113"))); Assert.assertTrue(coveredShards.contains(SlippyTile.forName("8-146-111"))); Assert.assertFalse(coveredShards.contains(SlippyTile.forName("8-167-108"))); Assert.assertTrue(coveredShards.contains(SlippyTile.forName("8-152-97"))); }
@Test public void testOverlap() { final MultiPolygon multiPolygon1 = MultiPolygon.wkt("MULTIPOLYGON (" + "((0 50, 50 50, 50 0, 0 0, 0 50)," + "(5 45, 45 45, 45 5, 5 5, 5 45)))"); final MultiPolygon multiPolygon2 = MultiPolygon .wkt("MULTIPOLYGON (" + "((10 35, 35 35, 35 10, 10 10, 10 35)," + "(15 30, 30 30, 30 15, 15 15, 15 30)))"); final MultiPolygon multiPolygon3 = 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)))"); Assert.assertFalse(multiPolygon1.overlaps(multiPolygon2)); Assert.assertFalse(multiPolygon2.overlaps(multiPolygon1)); Assert.assertTrue(multiPolygon2.overlaps(multiPolygon3)); Assert.assertTrue(multiPolygon3.overlaps(multiPolygon2)); }
@Test public void testFullyGeometricallyEnclosingMultiPolygon() { final MultiPolygon multiPolygon1 = MultiPolygon .wkt("MULTIPOLYGON (" + "((-10 10, 10 10, 10 -10, -10 -10, -10 10)," + "(-6 6, 6 6, 6 -6, -6 -6, -6 6)))"); final MultiPolygon multiPolygon2 = MultiPolygon.wkt("MULTIPOLYGON (" + "((-4 4, 4 4, 4 -4, -4 -4, -4 4)," + "(-3 3, 3 3, 3 -3, -3 -3, -3 3)))"); final Polygon polygon1 = Polygon.wkt("POLYGON " + "((-8 8, 8 8, 8 -8, -8 -8, -8 8))"); final Polygon polygon2 = Polygon.wkt("POLYGON " + "((-5 5, 5 5, 5 -5, -5 -5, -5 5))"); Assert.assertFalse(polygon2.fullyGeometricallyEncloses(multiPolygon1)); Assert.assertTrue(polygon1.fullyGeometricallyEncloses(multiPolygon2)); Assert.assertFalse(polygon1.fullyGeometricallyEncloses(multiPolygon1)); Assert.assertTrue(polygon2.fullyGeometricallyEncloses(multiPolygon2)); }
.wkt("MULTIPOLYGON (" + "((-10 10, 10 10, 10 -10, -10 -10, -10 10)," + "(-5 5, 5 5, 5 -5, -5 -5, -5 5)))"); final MultiPolygon multiPolygon2 = MultiPolygon.wkt("MULTIPOLYGON (" + "((-8 8, 8 8, 8 -8, -8 -8, -8 8)," + "(-6 6, 6 6, 6 -6, -6 -6, -6 6)))"); final MultiPolygon multiPolygon3 = MultiPolygon.wkt("MULTIPOLYGON (" + "((-8 8, 8 8, 8 -8, -8 -8, -8 8)," + "(-4 4, 4 4, 4 -4, -4 -4, -4 4)))"); final MultiPolygon multiPolygon4 = MultiPolygon .wkt("MULTIPOLYGON (" + "((-8 8, 8 8, 8 -8, -8 -8, -8 8)))"); final MultiPolygon multiPolygon5 = MultiPolygon.wkt("MULTIPOLYGON (" + "((-4 4, 4 4, 4 -4, -4 -4, -4 4)," + "(-3 3, 3 3, 3 -3, -3 -3, -3 3)))"); final MultiPolygon multiPolygon6 = MultiPolygon .wkt("MULTIPOLYGON (" + "((8 9, 9 9, 9 8, 8 8, 8 9)," + "(8.25 8.75, 8.75 8.75, 8.75 8.25, 8.25 8.25, 8.25 8.75)))"); final MultiPolygon multiPolygon7 = MultiPolygon .wkt("MULTIPOLYGON (" + "((89 90, 90 90, 90 89, 89 89, 89 90)," + "(89.25 89.75, 89.75 89.75, 89.75 89.25, 89.25 89.25, 89.25 89.75)))");
.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)))");
.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)))");
@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)); }