public boolean lookup(long[] idx) { return lookup(idx[0], idx[1], (int) idx[2]); }
public boolean lookup(final long x, final long y, final int z) { long tileX = x; long tileY = y; int level = z; long[] coverage = getGridCoverages()[level]; if (tileX < coverage[0] || tileX > coverage[2] || tileY < coverage[1] || tileY > coverage[3]) { return false; } if (level > maxMaskLevel) { // downsample long[] requestedCoverage = fullCoverage[level]; long[] lastMaskedCoverage = fullCoverage[maxMaskLevel]; double requestedW = requestedCoverage[2] - requestedCoverage[0]; double requestedH = requestedCoverage[3] - requestedCoverage[1]; double availableW = lastMaskedCoverage[2] - lastMaskedCoverage[0]; double availableH = lastMaskedCoverage[3] - lastMaskedCoverage[1]; tileX = Math.round(tileX * (availableW / requestedW)); tileY = Math.round(tileY * (availableH / requestedH)); // tileX = Math.max(Math.min(tileX, lastMaskedCoverage[2]), lastMaskedCoverage[0]); // tileY = Math.max(Math.min(tileY, lastMaskedCoverage[3]), lastMaskedCoverage[1]); level = maxMaskLevel; } return isTileSet(tileX, tileY, level); }
RasterMaskTestUtils.buildSampleFilterMatrix(layer, gridsetId, maxMaskLevel); RasterMask tileRangeMask = new RasterMask(mask.getByLevelMasks(), fullCoverage, mask.getCoveredBounds()); assertEquals(false, tileRangeMask.lookup(0, 0, 5)); assertEquals(false, tileRangeMask.lookup(0, 31, 5)); assertEquals(false, tileRangeMask.lookup(63, 31, 5)); assertEquals(true, tileRangeMask.lookup(63, 0, 5)); assertEquals(true, tileRangeMask.lookup(32, 23, 5)); // point location assertEquals(true, tileRangeMask.lookup(31, 23, 5)); // point's left assertEquals(true, tileRangeMask.lookup(33, 23, 5)); // point's right assertEquals(true, tileRangeMask.lookup(32, 24, 5)); // point's top assertEquals(true, tileRangeMask.lookup(32, 22, 5)); // point's bottom assertEquals(true, tileRangeMask.lookup(31, 24, 5)); // point's top left assertEquals(true, tileRangeMask.lookup(33, 24, 5)); // point's top right assertEquals(true, tileRangeMask.lookup(31, 22, 5)); // point's bottom left assertEquals(true, tileRangeMask.lookup(33, 22, 5)); // point's bottom right
/** */ public void testDiscontinuousTileRange() throws Exception { rasterMask = createMock(RasterMask.class); expect(rasterMask.getGridCoverages()).andReturn(gridCoverages); // mock up RasterMask to return TRUE only for tiles 0,0,0 and 1,1,1 expect(rasterMask.lookup(eq(0L), eq(0L), eq(0))).andReturn(Boolean.TRUE); expect(rasterMask.lookup(eq(0L), eq(0L), eq(1))).andReturn(Boolean.FALSE); expect(rasterMask.lookup(eq(1L), eq(0L), eq(1))).andReturn(Boolean.FALSE); expect(rasterMask.lookup(eq(0L), eq(1L), eq(1))).andReturn(Boolean.FALSE); expect(rasterMask.lookup(eq(1L), eq(1L), eq(1))).andReturn(Boolean.TRUE); replay(rasterMask); final int zoomStart = 0; final int zoomStop = 1; final int[] metaTilingFactors = {1, 1}; final int nThreads = 1; long tilesProcessed = traverseTileRangeIter( nThreads, gridCoverages, zoomStart, zoomStop, metaTilingFactors); final long expected = 2; assertEquals(expected, tilesProcessed); verify(rasterMask); }
RasterMask rasterMask = new RasterMask(byLevelMasks, fullCoverage, coveredBounds);
private boolean isTileSet(long tileX, long tileY, int level) { long[] coverage = getGridCoverages()[level]; if (tileX < coverage[0] || tileX > coverage[2] || tileY < coverage[1] || tileY > coverage[3]) { return false; } /* * Use getRaster instead of getData(), getData() returns a copy */ final Raster raster = byLevelMasks[level].getRaster(); // Changing index to top left hand origin long rasx = tileX; long rasy = (raster.getHeight() - 1) - tileY; if (rasx < 0 || rasy < 0 || rasx >= raster.getWidth() || rasy >= raster.getHeight()) { // coverage might include meta tiling factors but raster doesn't! return false; } int sample = raster.getSample((int) rasx, (int) rasy, 0); return sample != noDataValue; } }
RasterMaskTestUtils.buildSampleFilterMatrix(layer, gridsetId); RasterMask tileRangeMask = new RasterMask(mask.getByLevelMasks(), fullCoverage, mask.getCoveredBounds()); assertEquals(true, tileRangeMask.lookup(0, 0, 0)); assertEquals(true, tileRangeMask.lookup(1, 0, 0)); assertEquals(true, tileRangeMask.lookup(1, 1, 1)); assertEquals(true, tileRangeMask.lookup(1, 0, 1)); assertEquals(false, tileRangeMask.lookup(0, 0, 2)); assertEquals(false, tileRangeMask.lookup(0, 1, 2)); assertEquals(true, tileRangeMask.lookup(1, 0, 2)); assertEquals(false, tileRangeMask.lookup(0, 3, 2)); assertEquals(true, tileRangeMask.lookup(7, 0, 2)); assertEquals(false, tileRangeMask.lookup(0, 0, 9)); // lower left assertEquals(false, tileRangeMask.lookup(0, 511, 9)); // upper left assertEquals(false, tileRangeMask.lookup(1023, 511, 9)); // upper right assertEquals(true, tileRangeMask.lookup(1023, 0, 9)); // lower right assertEquals(true, tileRangeMask.lookup(511, 127, 9)); // point location assertEquals(true, tileRangeMask.lookup(255, 127, 9)); assertEquals(true, tileRangeMask.lookup(767, 383, 9)); assertEquals(true, tileRangeMask.lookup(511, 255, 9));
RasterMask rasterMask = new RasterMask(byLevelMasks, fullCoverage, coveredBounds);
public void testTileIsPresentBuffering() throws Exception { GeometryRasterMaskBuilder mask = RasterMaskTestUtils.buildSampleFilterMatrix(layer, gridsetId); RasterMask tileRangeMask = new RasterMask(mask.getByLevelMasks(), fullCoverage, mask.getCoveredBounds()); // level 5 (coverage is 0, 0, 63, 31) /** * 2010-02-15 , arneke: * * <p>The raster is 64 pixels wide, 32 pixels tall. The feature is at 0deg,45deg, which on * the 360,180 canvas should correspond to 4 tiles (smack in the middle) which means 31,32 * in the X direction, 23,24 in the Y direction * * <p>We only guarantee one tile buffering, so I'm not sure why we are testing all the tests * below, some of which fail. I've just commented them out to get the build back to normal. */ assertEquals(true, tileRangeMask.lookup(32, 23, 5)); // point location assertEquals(true, tileRangeMask.lookup(31, 23, 5)); // point's left // assertEquals(true, tileRangeMask.lookup(33, 23, 5));// point's right assertEquals(true, tileRangeMask.lookup(32, 24, 5)); // point's top // assertEquals(true, tileRangeMask.lookup(32, 22, 5));// point's bottom assertEquals(true, tileRangeMask.lookup(31, 24, 5)); // point's top left // assertEquals(true, tileRangeMask.lookup(33, 24, 5));// point's top right // assertEquals(true, tileRangeMask.lookup(31, 22, 5));// point's bottom left // assertEquals(true, tileRangeMask.lookup(33, 22, 5));// point's bottom right }