/** * Gathers a tile from the cache, if available * * @param key * @param request */ public synchronized RenderedImage getTile(MetaTileKey key, GetMapRequest request) { CacheElement ce = (CacheElement) tileCache.get(key); if (ce == null) { return null; } return getTile(key, request, ce.tiles); }
String mapDefinition = buildMapDefinition(request.getRawKvp()); ReferencedEnvelope bbox = new ReferencedEnvelope(request.getBbox(), request.getCrs()); Point2D origin = request.getTilesOrigin(); new MapKey(mapDefinition, normalize(bbox.getWidth() / request.getWidth()), origin); Point tileCoords = getTileCoordinates(bbox, origin); Point metaTileCoords = getMetaTileCoordinates(tileCoords); ReferencedEnvelope metaTileEnvelope = getMetaTileEnvelope(bbox, tileCoords, metaTileCoords); MetaTileKey key = new MetaTileKey(mapKey, metaTileCoords, metaTileEnvelope);
QuickTileCache.MetaTileKey key = tileCache.getMetaTileKey(request); RenderedImage tile = tileCache.getTile(key, request); List<GridCoverage2D> renderedCoverages = null; tileCache.storeTiles(key, tiles); tile = tileCache.getTile(key, request, tiles); renderedCoverages = metaTileMap.getRenderedCoverages();
@Test public void testInnerTileOffsets() { Envelope meta = new Envelope(1215736.8585492, 1215744.0245205, 5455471.361398601, 5455478.5273699); Envelope box1 = new Envelope(1215736.8585492, 1215739.2472063, 5455476.1387128, 5455478.5273699); Envelope box2 = new Envelope(1215739.2472063, 1215741.6358635, 5455476.1387128, 5455478.5273699); assertEquals(new Point(0, 2), cache.getTileOffsetsInMeta(box1, meta)); assertEquals(new Point(1, 2), cache.getTileOffsetsInMeta(box2, meta)); } }
@Test public void testMetaCoordinates() { Point orig = new Point(0, 0); assertEquals(orig, cache.getMetaTileCoordinates(orig)); Point t10 = new Point(1, 0); assertEquals(orig, cache.getMetaTileCoordinates(t10)); Point t01 = new Point(1, 0); assertEquals(orig, cache.getMetaTileCoordinates(t01)); Point t33 = new Point(3, 3); assertEquals(new Point(3, 3), cache.getMetaTileCoordinates(t33)); Point tm1m1 = new Point(-1, -1); assertEquals(new Point(-3, -3), cache.getMetaTileCoordinates(tm1m1)); Point tm3m3 = new Point(-3, -3); assertEquals(new Point(-3, -3), cache.getMetaTileCoordinates(tm3m3)); Point tm4m4 = new Point(-4, -4); assertEquals(new Point(-6, -6), cache.getMetaTileCoordinates(tm4m4)); Point t4m4 = new Point(4, -4); assertEquals(new Point(3, -6), cache.getMetaTileCoordinates(t4m4)); Point tm44 = new Point(-4, 4); assertEquals(new Point(-6, 3), cache.getMetaTileCoordinates(tm44)); }
@Test public void testTileCoordinatesNaturalOrigin() { Point2D origin = new Point2D.Double(0, 0); Envelope env = new Envelope(30, 60, 30, 60); Point tc = cache.getTileCoordinates(env, origin); assertEquals(new Point(1, 1), tc); env = new Envelope(-30, 0, -30, 0); tc = cache.getTileCoordinates(env, origin); assertEquals(new Point(-1, -1), tc); }
/** * @param key * @param request * @param tiles */ public RenderedImage getTile(MetaTileKey key, GetMapRequest request, RenderedImage[] tiles) { Envelope bbox = request.getBbox(); if (CRS.getAxisOrder(request.getCrs()) == AxisOrder.NORTH_EAST) { bbox = new Envelope(bbox.getMinY(), bbox.getMaxY(), bbox.getMinX(), bbox.getMaxX()); } Point tileCoord = getTileOffsetsInMeta(bbox, key.getMetaTileEnvelope()); return tiles[tileCoord.x + (tileCoord.y * key.getMetaFactor())]; }