BinaryOperationTileView<T> binaryOpView = new BinaryOperationTileView<>( numerator, denominator, BinaryOperator.OPERATOR_TYPE.DIVIDE, 1.0); return new UnaryOperationTileView<>(UnaryOperator.OPERATOR_TYPE.LOG_10, binaryOpView, -(Math.log10(_averageRange)));
public BinaryOperationTileView(TileData<List<T>> tileData1, TileData<List<T>> tileData2, BinaryOperator.OPERATOR_TYPE op, Number errorValue) { _errorValue = errorValue; _tileData1 = tileData1; _tileData2 = tileData2; _op = new BinaryOperator(op); if ( getDefinition().getXBins() != _tileData1.getDefinition().getXBins() || getDefinition().getYBins() != _tileData1.getDefinition().getYBins()) { throw new IllegalArgumentException("Constructor for BinaryOperationTileBucketView: " + "arguments are invalid. Tiles to compare are incompatible"); } }
@Test public void testOperationTileBucketView () { int startA = 0, endA = 1; int startB = 0, endB = 3; // since we modify the tile, we won't use a static class tile TileData<List<Double>> sourceListTile = new DenseTileData<>(new TileIndex(1, 1, 1, 2, 2), Arrays.asList(Arrays.asList( 2.0, 2.0, 4.0, 4.0), Arrays.asList( 4.0, 4.0, 8.0, 8.0), Arrays.asList( 6.0, 6.0, 12.0, 12.0), Arrays.asList( 8.0, 8.0, 16.0, 16.0))); AverageTileBucketView<Double> averageTile = new AverageTileBucketView<Double>(sourceListTile, startA, endA); AverageTileBucketView<Double> compareTile = new AverageTileBucketView<Double>(sourceListTile, startB, endB); BinaryOperationTileView<Double> underTest = new BinaryOperationTileView<Double>(averageTile, compareTile, BinaryOperator.OPERATOR_TYPE.DIVIDE, 1.0); Assert.assertEquals(1, underTest.getDefinition().getLevel()); Assert.assertEquals(1, underTest.getDefinition().getX()); Assert.assertEquals(1, underTest.getDefinition().getY()); Assert.assertEquals(2, underTest.getDefinition().getXBins()); Assert.assertEquals(2, underTest.getDefinition().getYBins()); for (int y=0; y<underTest.getDefinition().getYBins(); y++) { for (int x=0; x<underTest.getDefinition().getXBins(); x++) { List<Double> bin = underTest.getBin(x,y); Double binValue = bin.get(0); Assert.assertEquals( 1/1.5, binValue, 0.01); } } } }
@Override public TileData<T> combine(TileData<T> data, TileIndex index, int coarseness, JSONObject tileProperties) throws IOException, JSONException { TileData normalizingData = TileIOUtils.tileDataForIndex(index, _dataId, _serializer, _pyramidIO, coarseness, tileProperties); // Need to make sure TileData is of type List<?> for use with BinaryOperationTileView if (!(data.getDefaultValue() instanceof List<?>)) { data = new ListTileView(data); } if (!(normalizingData.getDefaultValue() instanceof List<?>)) { normalizingData = new ListTileView(normalizingData); } // Both datasets need to have the same number of buckets for BinaryOperationTileView int normalizeSize = getBucketCount((TileData<List<?>>)normalizingData); int dataSize = getBucketCount((TileData<List<?>>)data); if (dataSize < normalizeSize) { data = new ScaledTileView(data, normalizeSize); } else if (normalizeSize < dataSize) { normalizingData = new ScaledTileView(normalizingData, dataSize); } return new BinaryOperationTileView( data, normalizingData, BinaryOperator.OPERATOR_TYPE.DIVIDE, 0.0); } }