protected String tileMapName(TileLayer tl, GridSubset gridSub, MimeType mimeType) { try { String name = URLEncoder.encode(tl.getName(), "UTF-8"); String gridSubset = URLEncoder.encode(gridSub.getName(), "UTF-8"); return name + "@" + gridSubset + "@" + mimeType.getFileExtension(); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } }
/** * Performs a lookup against an internal raster. * * @param grid * @param idx * @return */ private boolean lookup(GridSubset grid, long[] idx) { BufferedImage mat = matrices.get(grid.getName())[(int) idx[2]]; long[] gridCoverage = grid.getCoverage((int) idx[2]); // Changing index to top left hand origin long x = idx[0] - gridCoverage[0]; long y = gridCoverage[3] - idx[1]; return (mat.getRaster().getSample((int) x, (int) y, 0) == 0); }
/** Loops over all the zoom levels and initializes the lookup images. */ public void initialize(TileLayer layer) throws GeoWebCacheException { if (preload != null && preload) { for (String gridSetId : layer.getGridSubsets()) { GridSubset grid = layer.getGridSubset(gridSetId); for (int i = 0; i <= zoomStop; i++) { try { setMatrix(layer, grid.getName(), i, false); } catch (Exception e) { log.error( "Failed to load matrix for " + this.getName() + ", " + grid.getName() + ", " + i + " : " + e.getMessage()); } } } } }
BufferedImage mat = matrices.get(grid.getName())[(int) idx[2]];
private void truncate(final TileLayer layer, final BoundingBox bounds, final GridSubset gridSubset, String formatName, Map<String, String> parameters) { final int threadCount = 1; int zoomStart; int zoomStop; zoomStart = gridSubset.getZoomStart(); zoomStop = gridSubset.getZoomStop(); final TYPE taskType = TRUNCATE; SeedRequest req = new SeedRequest(layer.getName(), bounds, gridSubset.getName(), threadCount, zoomStart, zoomStop, formatName, taskType, parameters); GWCTask[] tasks; try { TileRange tr = TileBreeder.createTileRange(req, layer); boolean filterUpdate = false; tasks = tileBreeder.createTasks(tr, taskType, threadCount, filterUpdate); } catch (GeoWebCacheException e) { throw new RuntimeException(e); } tileBreeder.dispatchTasks(tasks); }
private WMSLayer createWMSLayer(BoundingBox layerBounds) { String[] urls = {"http://localhost:38080/wms"}; List<String> formatList = new LinkedList<String>(); formatList.add("image/png"); Hashtable<String, GridSubset> grids = new Hashtable<String, GridSubset>(); GridSubset grid = GridSubsetFactory.createGridSubSet(gridSetBroker.getWorldEpsg4326()); grids.put(grid.getName(), grid); int[] metaWidthHeight = {3, 3}; WMSLayer layer = new WMSLayer( "test:layer", urls, "aStyle", "test:layer", formatList, grids, null, metaWidthHeight, "vendorparam=true", false, null); layer.initialize(gridSetBroker); return layer; }
public static WMSLayer createWMSLayer( String format, GridSetBroker gridSetBroker, int metaTileFactorX, int metaTileFactorY, BoundingBox boundingBox) { String[] urls = {"http://localhost:38080/wms"}; List<String> formatList = Collections.singletonList(format); Hashtable<String, GridSubset> grids = new Hashtable<String, GridSubset>(); GridSubset grid = GridSubsetFactory.createGridSubSet( gridSetBroker.getWorldEpsg4326(), boundingBox, 0, 10); grids.put(grid.getName(), grid); int[] metaWidthHeight = {metaTileFactorX, metaTileFactorY}; WMSLayer layer = new WMSLayer( "test:layer", urls, "aStyle", "test:layer", formatList, grids, null, metaWidthHeight, "vendorparam=true", false, null); layer.initialize(gridSetBroker); return layer; }
layer.getName(), bounds, gridSubset.getName(), threadCount, zoomStart,
private void layerGridSubSets(XMLBuilder xml, TileLayer layer) throws IOException { for (String gridSetId : layer.getGridSubsets()) { GridSubset gridSubset = layer.getGridSubset(gridSetId); xml.indentElement("TileMatrixSetLink"); xml.simpleElement("TileMatrixSet", gridSubset.getName(), true); if (!gridSubset.fullGridSetCoverage()) { String[] levelNames = gridSubset.getGridNames(); long[][] wmtsLimits = gridSubset.getWMTSCoverages(); xml.indentElement("TileMatrixSetLimits"); for (int i = 0; i < levelNames.length; i++) { xml.indentElement("TileMatrixLimits"); xml.simpleElement("TileMatrix", levelNames[i], true); xml.simpleElement("MinTileRow", Long.toString(wmtsLimits[i][1]), true); xml.simpleElement("MaxTileRow", Long.toString(wmtsLimits[i][3]), true); xml.simpleElement("MinTileCol", Long.toString(wmtsLimits[i][0]), true); xml.simpleElement("MaxTileCol", Long.toString(wmtsLimits[i][2]), true); xml.endElement(); } xml.endElement(); } xml.endElement("TileMatrixSetLink"); } } /**
final String gridSetId = gridSubset.getName(); final String prefix = this.rootCacheDir.getAbsolutePath(); String format = "image/png";
10); grids.put(grid.getName(), grid); int[] metaWidthHeight = {3, 3};
maxCacheLevel); grids.put(grid.getName(), grid); int[] metaWidthHeight = {3, 3};
throw new GeoWebCacheException( "The resolution is not decreasing by a factor of two for " + this.getName()); } else { long[] coverage = getCoverage(idx + 1);
private void setCacheMetadataHeaders(RawMap map, ConveyorTile cachedTile, TileLayer layer) { long[] tileIndex = cachedTile.getTileIndex(); CacheResult cacheResult = cachedTile.getCacheResult(); GridSubset gridSubset = layer.getGridSubset(cachedTile.getGridSetId()); BoundingBox tileBounds = gridSubset.boundsFromIndex(tileIndex); String cacheResultHeader = cacheResult == null ? "UNKNOWN" : cacheResult.toString(); map.setResponseHeader("geowebcache-layer", layer.getName()); map.setResponseHeader("geowebcache-cache-result", cacheResultHeader); map.setResponseHeader("geowebcache-tile-index", Arrays.toString(tileIndex)); map.setResponseHeader("geowebcache-tile-bounds", tileBounds.toString()); map.setResponseHeader("geowebcache-gridset", gridSubset.getName()); map.setResponseHeader("geowebcache-crs", gridSubset.getSRS().toString()); }
private void setCacheMetadataHeaders(RawMap map, ConveyorTile cachedTile, TileLayer layer) { long[] tileIndex = cachedTile.getTileIndex(); CacheResult cacheResult = cachedTile.getCacheResult(); GridSubset gridSubset = layer.getGridSubset(cachedTile.getGridSetId()); BoundingBox tileBounds = gridSubset.boundsFromIndex(tileIndex); String cacheResultHeader = cacheResult == null ? "UNKNOWN" : cacheResult.toString(); map.setResponseHeader("geowebcache-layer", layer.getName()); map.setResponseHeader("geowebcache-cache-result", cacheResultHeader); map.setResponseHeader("geowebcache-tile-index", Arrays.toString(tileIndex)); map.setResponseHeader("geowebcache-tile-bounds", tileBounds.toString()); map.setResponseHeader("geowebcache-gridset", gridSubset.getName()); map.setResponseHeader("geowebcache-crs", gridSubset.getSRS().toString()); }
/** Builds an XMLGridSubset out of a {@link GridSubset} */ public XMLGridSubset(GridSubset sset) { setGridSetName(sset.getName()); setExtent( sset.getOriginalExtent() == null ? null : new BoundingBox(sset.getOriginalExtent())); setZoomStart(sset.getZoomStart()); setZoomStop(sset.getZoomStop()); setMinCachedLevel(sset.getMinCachedZoom()); setMaxCachedLevel(sset.getMaxCachedZoom()); }
null); grids.put(grid.getName(), grid);
private void writeSiteMap() throws GeoWebCacheException, IOException { TileLayer layer = tile.getLayer(); GridSubset gridSubset = layer.getGridSubset(gridSetBroker.WORLD_EPSG4326.getName()); writeSiteMapHeader(); long[] gridRect = gridSubset.getCoverageBestFit(); // Check whether we need two tiles for world bounds or not if(gridRect[4] > 0 && (gridRect[2] != gridRect[0] || gridRect[3] != gridRect[1])) { throw new GeoWebCacheException( layer.getName() + " is too big for the sub grid set for " + gridSubset.getName() + ", allow for smaller zoom levels."); } else if(gridRect[0] != gridRect[2]) { long[] gridLocWest = {0,0,0}; long[] gridLocEast = {1,0,0}; writeSiteMapLoop(gridLocWest); writeSiteMapLoop(gridLocEast); } else { long[] gridLoc = {gridRect[0], gridRect[1], gridRect[4]}; writeSiteMapLoop(gridLoc); } writeSiteMapFooter(); }
private void writeSiteMap() throws GeoWebCacheException, IOException { TileLayer layer = tile.getLayer(); GridSubset gridSubset = layer.getGridSubset(gridSetBroker.getWorldEpsg4326().getName()); writeSiteMapHeader(); long[] gridRect = gridSubset.getCoverageBestFit(); // Check whether we need two tiles for world bounds or not if (gridRect[4] > 0 && (gridRect[2] != gridRect[0] || gridRect[3] != gridRect[1])) { throw new GeoWebCacheException( layer.getName() + " is too big for the sub grid set for " + gridSubset.getName() + ", allow for smaller zoom levels."); } else if (gridRect[0] != gridRect[2]) { long[] gridLocWest = {0, 0, 0}; long[] gridLocEast = {1, 0, 0}; writeSiteMapLoop(gridLocWest); writeSiteMapLoop(gridLocEast); } else { long[] gridLoc = {gridRect[0], gridRect[1], gridRect[4]}; writeSiteMapLoop(gridLoc); } writeSiteMapFooter(); }