private KaMapCacheMapReader( String map, String group, String units, int metaTileWidth, int metaTileHeight, RenderingContext context, PJsonObject params) { super(context, params); this.map = map; this.group = group; this.units = units; this.metaTileWidth = metaTileWidth; this.metaTileHeight = metaTileHeight; PJsonArray maxExtent = params.getJSONArray("maxExtent"); PJsonArray tileSize = params.getJSONArray("tileSize"); tileCacheLayerInfo = new TileCacheLayerInfo( params.getJSONArray("resolutions"), tileSize.getInt(0), tileSize.getInt(1), maxExtent.getFloat(0), maxExtent.getFloat(1), maxExtent.getFloat(2), maxExtent.getFloat(3), params.getString("extension")); }
private WMTSMapReader(String layer, RenderingContext context, PJsonObject params) { super(context, params); this.layer = layer; this.capabilitiesInfo = WMTSServiceInfo.getLayerInfo(baseUrl, layer, context); // Optional (but mandatory if matrixIds is not provided) PJsonArray maxExtent = params.optJSONArray(TILE_FULL_EXTENT, params.optJSONArray(MAX_EXTENT)); // Optional (but mandatory if matrixIds is not provided) PJsonArray tileSize = params.optJSONArray(TILE_SIZE); opacity = params.optFloat(OPACITY, 1.0F); version = params.optString(VERSION, "1.0.0"); requestEncoding = WMTSRequestEncoding.valueOf( params.optString(REQUEST_ENCODING, WMTSRequestEncoding.REST.name())); // Optional (but mandatory if matrixIds is not provided) tileOrigin = params.optJSONArray(TILE_ORIGIN); style = params.optString(STYLE, ""); // Optional dimensions = params.optJSONArray(DIMENSIONS); // Optional dimensionsParams = params.optJSONObject(PARAMS); matrixSet = params.getString(MATRIX_SET); // Optional (but mandatory if matrixIds is not provided) zoomOffset = params.optInt(ZOOM_OFFSET); // Optional matrixIds = params.optJSONArray(MATRIX_IDS); // Optional (but mandatory if matrixIds is not provided) formatSuffix = params.optString(FORMAT_SUFFIX, params.optString(EXTENSION)); // Optional (but mandatory if matrixIds is provided and requestEncoding is KVP) format = params.optString(FORMAT); if (tileOrigin == null && matrixIds == null) { throw new IllegalArgumentException( "Either " + TILE_ORIGIN + " or " + MATRIX_IDS + " is required."); } if (zoomOffset == null && matrixIds == null) { throw new IllegalArgumentException( "Either " + ZOOM_OFFSET + " or " + MATRIX_IDS + " is required."); } if (formatSuffix == null && matrixIds == null) { throw new IllegalArgumentException( "Either " + EXTENSION + " (or " + FORMAT_SUFFIX + ") or " + MATRIX_IDS + " is required."); } if (matrixIds == null) { tileCacheLayerInfo = new WMTSLayerInfo( params.getJSONArray(RESOLUTIONS), tileSize.getInt(0), tileSize.getInt(1), maxExtent.getFloat(0), maxExtent.getFloat(1), maxExtent.getFloat(2), maxExtent.getFloat(3), formatSuffix); } }
@Override protected void renderTiles( TileRenderer formatter, Transformer transformer, URI commonUri, ParallelMapTileLoader parallelMapTileLoader) throws IOException, URISyntaxException { if (matrixIds != null) { double diff = Double.POSITIVE_INFINITY; double targetResolution = transformer.getGeoW() / transformer.getStraightBitmapW(); for (int i = 0; i < matrixIds.size(); i++) { PJsonObject matrixId = matrixIds.getJSONObject(i); float resolution = matrixId.getFloat(RESOLUTION); double delta = Math.abs(1 - resolution / targetResolution); if (delta < diff) { diff = delta; matrix = matrixId; } } float resolution = matrix.getFloat(RESOLUTION); PJsonArray tileSize = matrix.getJSONArray(TILE_SIZE); PJsonArray topLeftCorner = matrix.getJSONArray(TOP_LEFT_CORNER); PJsonArray matrixSize = matrix.getJSONArray(MATRIX_SIZE); tileCacheLayerInfo = new TileCacheLayerInfo( String.valueOf(resolution), tileSize.getInt(0), tileSize.getInt(1), topLeftCorner.getFloat(0), topLeftCorner.getFloat(1) - tileSize.getInt(1) * matrixSize.getInt(1) * resolution, topLeftCorner.getFloat(0) + tileSize.getInt(0) * matrixSize.getInt(0) * resolution, topLeftCorner.getFloat(1), format); } super.renderTiles(formatter, transformer, commonUri, parallelMapTileLoader); }