/** * @param gridSetId * @param gridLoc * @return * @throws GeoWebCacheException */ public BoundingBox boundsFromIndex(String gridSetId, long[] gridLoc) { return getGridSubset(gridSetId).boundsFromIndex(gridLoc); }
/** * Apply security filters to a conveyor. * * @param tile * @throws SecurityException if any of the filter throw it */ public void checkSecurity(final ConveyorTile tile) throws SecurityException, GeoWebCacheException { final TileLayer layer = tile.getLayer(); final GridSubset gridSubset = tile.getGridSubset(); final BoundingBox bounds; final SRS srs; if (Objects.nonNull(gridSubset)) { bounds = gridSubset.boundsFromIndex(tile.getTileIndex()); srs = gridSubset.getSRS(); } else { bounds = null; srs = null; } checkSecurity(layer, bounds, srs); }
public void makeRequest(ConveyorTile tile, Resource target) throws GeoWebCacheException { WMSLayer layer = (WMSLayer) tile.getLayer(); GridSubset gridSubset = layer.getGridSubset(tile.getGridSetId()); Map<String, String> wmsParams = layer.getWMSRequestTemplate(tile.getMimeType(), WMSLayer.RequestType.MAP); wmsParams.put("FORMAT", tile.getMimeType().getFormat()); wmsParams.put("SRS", layer.backendSRSOverride(gridSubset.getSRS())); wmsParams.put("HEIGHT", String.valueOf(gridSubset.getTileHeight())); wmsParams.put("WIDTH", String.valueOf(gridSubset.getTileWidth())); // strBuilder.append("&TILED=").append(requestTiled); BoundingBox bbox = gridSubset.boundsFromIndex(tile.getTileIndex()); wmsParams.put("BBOX", bbox.toString()); Map<String, String> filteringParameters = tile.getFilteringParameters(); if (filteringParameters.isEmpty()) { filteringParameters = layer.getDefaultParameterFilters(); } wmsParams.putAll(filteringParameters); if (tile.getMimeType() == XMLMime.kml) { // This is a hack for GeoServer to produce regionated KML, // but it is unlikely to do much harm, especially since nobody // else appears to produce regionated KML at this point wmsParams.put("format_options", "mode:superoverlay;overlaymode:auto"); } MimeType mimeType = tile.getMimeType(); makeRequest(tile, layer, wmsParams, mimeType, target); }
private String buildGetMap(final boolean directWMSIntegrationEndpoint, final String queryLayerName, final String gridsetId, String styles, final TileLayer tileLayer) { final GridSubset gridSubset = tileLayer.getGridSubset(gridsetId); long[] coverage = gridSubset.getCoverage(0); long[] tileIndex = { coverage[0], coverage[1], coverage[4] }; BoundingBox bounds = gridSubset.boundsFromIndex(tileIndex); final String endpoint = directWMSIntegrationEndpoint ? "wms" : "gwc/service/wms"; StringBuilder sb = new StringBuilder(endpoint); sb.append("?service=WMS&request=GetMap&version=1.1.1&format=image/png"); sb.append("&layers=").append(queryLayerName); sb.append("&srs=").append(gridSubset.getSRS()); sb.append("&width=").append(gridSubset.getGridSet().getTileWidth()); sb.append("&height=").append(gridSubset.getGridSet().getTileHeight()); sb.append("&styles="); if (styles != null) { sb.append(styles); } sb.append("&bbox=").append(bounds.toString()); return sb.toString(); }
BoundingBox bbox = convTile.getGridSubset().boundsFromIndex(convTile.getTileIndex()); data = layer.getFeatureInfo(
bounds = tileLayer.getGridSubset(expectedGridset).boundsFromIndex(tileIndex); kvp.put("bbox", new String[] {bounds.toString()});
@Test public void testNoFilterPass() throws Exception { SecurityDispatcher secDispatcher = new SecurityDispatcher(); secDispatcher.setApplicationContext(extensions.getMockContext()); ConveyorTile conv = EasyMock.createMock("conv", ConveyorTile.class); TileLayer layer = EasyMock.createMock("layer", TileLayer.class); GridSubset subset = EasyMock.createMock("subset", GridSubset.class); SRS srs = EasyMock.createMock("srs", SRS.class); BoundingBox bbox = new BoundingBox(10, 20, 30, 40); EasyMock.expect(conv.getLayer()).andStubReturn(layer); EasyMock.expect(conv.getGridSubset()).andStubReturn(subset); EasyMock.expect(conv.getTileIndex()).andStubReturn(new long[] {1, 2, 3}); EasyMock.expect(subset.boundsFromIndex(EasyMock.aryEq(new long[] {1, 2, 3}))) .andStubReturn(bbox); EasyMock.expect(subset.getSRS()).andStubReturn(srs); EasyMock.replay(conv, layer, subset, srs); secDispatcher.checkSecurity(conv); EasyMock.verify(conv, layer, subset, srs); } }
@Override public boolean lookup(final long tileX, final long tileY, final int level) { final long[] levelCoverage = getGridCoverages()[level]; final long minxTileX = levelCoverage[0]; final long maxTileX = levelCoverage[2]; final long minTileY = levelCoverage[1]; final long maxTileY = levelCoverage[3]; if (tileX < minxTileX || tileX > maxTileX || tileY < minTileY || tileY > maxTileY) { return false; } long[] tileIndex = new long[] {tileX, tileY, level}; Envelope tileBounds = toEnvelope(gridSubset.boundsFromIndex(tileIndex)); /* * Instead of "resampling"/buffering the geometry which can be time/heap consuming, increase * the size of the tile bounds by the length of a tile on each direction */ tileBounds.expandBy(tileBounds.getWidth(), tileBounds.getHeight()); Geometry expandedTileBoundsGeom = geometryMask.getFactory().toGeometry(tileBounds); boolean intersects = geometryMask.intersects(expandedTileBoundsGeom); return intersects; }
@Test public void testOneFilterPass() throws Exception { SecurityDispatcher secDispatcher = new SecurityDispatcher(); secDispatcher.setApplicationContext(extensions.getMockContext()); ConveyorTile conv = EasyMock.createMock("conv", ConveyorTile.class); TileLayer layer = EasyMock.createMock("layer", TileLayer.class); GridSubset subset = EasyMock.createMock("subset", GridSubset.class); SRS srs = EasyMock.createMock("srs", SRS.class); BoundingBox bbox = new BoundingBox(10, 20, 30, 40); SecurityFilter filter = EasyMock.createMock("filter", SecurityFilter.class); extensions.addBean("testSecurityFilter", filter, SecurityFilter.class); EasyMock.expect(conv.getLayer()).andStubReturn(layer); EasyMock.expect(conv.getGridSubset()).andStubReturn(subset); EasyMock.expect(conv.getTileIndex()).andStubReturn(new long[] {1, 2, 3}); EasyMock.expect(subset.boundsFromIndex(EasyMock.aryEq(new long[] {1, 2, 3}))) .andStubReturn(bbox); EasyMock.expect(subset.getSRS()).andStubReturn(srs); filter.checkSecurity(layer, bbox, srs); EasyMock.expectLastCall().once(); EasyMock.replay(conv, layer, subset, srs, filter); secDispatcher.checkSecurity(conv); EasyMock.verify(conv, layer, subset, srs, filter); }
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()); }
@Test public void testOneFilterFail() throws Exception { SecurityDispatcher secDispatcher = new SecurityDispatcher(); secDispatcher.setApplicationContext(extensions.getMockContext()); ConveyorTile conv = EasyMock.createMock("conv", ConveyorTile.class); TileLayer layer = EasyMock.createMock("layer", TileLayer.class); GridSubset subset = EasyMock.createMock("subset", GridSubset.class); SRS srs = EasyMock.createMock("srs", SRS.class); BoundingBox bbox = new BoundingBox(10, 20, 30, 40); SecurityFilter filter = EasyMock.createMock("filter", SecurityFilter.class); extensions.addBean("testSecurityFilter", filter, SecurityFilter.class); EasyMock.expect(conv.getLayer()).andStubReturn(layer); EasyMock.expect(conv.getGridSubset()).andStubReturn(subset); EasyMock.expect(conv.getTileIndex()).andStubReturn(new long[] {1, 2, 3}); EasyMock.expect(subset.boundsFromIndex(EasyMock.aryEq(new long[] {1, 2, 3}))) .andStubReturn(bbox); EasyMock.expect(subset.getSRS()).andStubReturn(srs); filter.checkSecurity(layer, bbox, srs); EasyMock.expectLastCall().andThrow(new SecurityException()).once(); EasyMock.replay(conv, layer, subset, srs, filter); exception.expect(instanceOf(SecurityException.class)); try { secDispatcher.checkSecurity(conv); } finally { EasyMock.verify(conv, layer, subset, srs, filter); } }
EasyMock.expect(conv.getGridSubset()).andStubReturn(subset); EasyMock.expect(conv.getTileIndex()).andStubReturn(new long[] {1, 2, 3}); EasyMock.expect(subset.boundsFromIndex(EasyMock.aryEq(new long[] {1, 2, 3}))) .andStubReturn(bbox); EasyMock.expect(subset.getSRS()).andStubReturn(srs);
@Test public void testTwoFilterPass() throws Exception { SecurityDispatcher secDispatcher = new SecurityDispatcher(); secDispatcher.setApplicationContext(extensions.getMockContext()); ConveyorTile conv = EasyMock.createMock("conv", ConveyorTile.class); TileLayer layer = EasyMock.createMock("layer", TileLayer.class); GridSubset subset = EasyMock.createMock("subset", GridSubset.class); SRS srs = EasyMock.createMock("srs", SRS.class); BoundingBox bbox = new BoundingBox(10, 20, 30, 40); SecurityFilter filter1 = EasyMock.createMock("filter1", SecurityFilter.class); SecurityFilter filter2 = EasyMock.createMock("filter2", SecurityFilter.class); extensions.addBean("testSecurityFilter1", filter1, SecurityFilter.class); extensions.addBean("testSecurityFilter2", filter2, SecurityFilter.class); EasyMock.expect(conv.getLayer()).andStubReturn(layer); EasyMock.expect(conv.getGridSubset()).andStubReturn(subset); EasyMock.expect(conv.getTileIndex()).andStubReturn(new long[] {1, 2, 3}); EasyMock.expect(subset.boundsFromIndex(EasyMock.aryEq(new long[] {1, 2, 3}))) .andStubReturn(bbox); EasyMock.expect(subset.getSRS()).andStubReturn(srs); filter1.checkSecurity(layer, bbox, srs); EasyMock.expectLastCall().once(); filter2.checkSecurity(layer, bbox, srs); EasyMock.expectLastCall().once(); EasyMock.replay(conv, layer, subset, srs, filter1, filter2); secDispatcher.checkSecurity(conv); EasyMock.verify(conv, layer, subset, srs, filter1, filter2); }
bounds = tileLayer.getGridSubset(expectedGridset).boundsFromIndex(tileIndex);
public void test6gridLoctoBounds4326() throws Exception { BoundingBox bbox = new BoundingBox(-124.73, 24.96, -66.97, 49.37); GridSubset grid = GridSubsetFactory.createGridSubSet(gridSetBroker.getWorldEpsg4326(), bbox, 0, 10); long[] gridLoc1 = {1, 1, 1}; BoundingBox box1 = grid.boundsFromIndex(gridLoc1); boolean box1_comparison = box1.equals(new BoundingBox(-90.0, 0.0, 0.0, 90.0)); assertTrue(box1_comparison); boolean box1_kml = box1.toKMLLatLonBox() .equals( "<LatLonBox><north>90.0</north><south>0.0</south>" + "<east>0.0</east><west>-90.0</west></LatLonBox>"); assertTrue(box1_kml); long[] gridLoc2 = {5, 1, 2}; BoundingBox box2 = grid.boundsFromIndex(gridLoc2); boolean box2_comparison = box2.equals(new BoundingBox(45.0, -45.0, 90.0, 0.0)); assertTrue(box2_comparison); boolean box2_kml = box2.toKMLLatLonAltBox() .equals( "<LatLonAltBox><north>0.0</north><south>-45.0</south>" + "<east>90.0</east><west>45.0</west></LatLonAltBox>"); assertTrue(box2_kml); }
public void testTopLeftNaive() throws Exception { // This mimics the Spearfish layer BoundingBox bbox = new BoundingBox(-180.0, -90.0, 180.0, 90.0); BoundingBox gridBase = new BoundingBox(-180.0, -90.0, 180.0, 90.0); GridSet gridSet = GridSetFactory.createGridSet( "bogus", SRS.getSRS(4326), gridBase, true, 30, null, 0.00028, 256, 256, false); GridSubset gridSubset = GridSubsetFactory.createGridSubSet(gridSet, bbox, 0, 20); // Check the actual max bounds long[] solution = {0, 0, 0}; long[] closest = gridSubset.closestIndex(new BoundingBox(-180.0, -90.0, 0.0, 90.0)); assertTrue(Arrays.equals(solution, closest)); long[] solution2 = {1, 0, 0}; closest = gridSubset.closestIndex(new BoundingBox(0.0, -90.0, 180.0, 90.0)); assertTrue(Arrays.equals(solution2, closest)); long[] t1 = {0, 0, 1}; // 90x90 degrees BoundingBox test1 = gridSubset.boundsFromIndex(t1); assertTrue(Math.abs(test1.getMinX() + 180.0) < 0.01); assertTrue(Math.abs(test1.getMinY() + 90.0) < 0.01); assertTrue(Math.abs(test1.getMaxY()) < 0.01); }
BoundingBox bboxSolution = new BoundingBox(599484.8750000002, 4912451.9275, 611635.5437500004, 4924602.59625); assertTrue(bboxSolution.equals(gridSubset.boundsFromIndex(gridLoc)));
BoundingBox bboxSolution = new BoundingBox(599484.8750000002, 4912451.9275, 611635.5437500004, 4924602.59625); assertTrue(bboxSolution.equals(gridSubset.boundsFromIndex(gridLoc)));
bounds = tileLayer.getGridSubset("EPSG:900913").boundsFromIndex(new long[] { 0, 0, 1 });