public static JGrassRegion getJGrassRegionFromGridCoverage(GridCoverage2D gridCoverage2D) throws InvalidGridGeometryException, TransformException { Envelope2D env = gridCoverage2D.getEnvelope2D(); GridEnvelope2D worldToGrid = gridCoverage2D.getGridGeometry().worldToGrid(env); double xRes = env.getWidth() / worldToGrid.getWidth(); double yRes = env.getHeight() / worldToGrid.getHeight(); JGrassRegion region = new JGrassRegion(env.getMinX(), env.getMaxX(), env.getMinY(), env.getMaxY(), xRes, yRes); return region; }
/** * @see net.refractions.udig.render.internal.wmsc.basic#renderTile(Graphics2D graphics, WMTTile * tile, CoordinateReferenceSystem crs, RasterSymbolizer style) * @param graphics * @param tile * @param style * @throws FactoryException * @throws TransformException * @throws RenderException */ private void renderTile( Graphics2D graphics, WMTTile tile, RasterSymbolizer style, WMTRenderJob renderJob) throws Exception { if (tile == null || tile.getBufferedImage() == null) { return; } // create a gridcoverage from the tile image GridCoverageFactory factory = new GridCoverageFactory(); // get the tile bounds in the CRS the tiles were drawn in ReferencedEnvelope tileBndsMercatorRef = renderJob.projectTileToTileProjectedCrs(tile.getExtent()); GridCoverage2D coverage = (GridCoverage2D) factory.create( "GridCoverage", tile.getBufferedImage(), tileBndsMercatorRef); // $NON-NLS-1$ Envelope2D coveragebounds = coverage.getEnvelope2D(); // bounds of tile ReferencedEnvelope bnds = new ReferencedEnvelope( coveragebounds.getMinX(), coveragebounds.getMaxX(), coveragebounds.getMinY(), coveragebounds.getMaxY(), renderJob.getCrsTilesProjected()); // reproject tile bounds to map CRS bnds = renderJob.projectTileProjectedToMapCrs(bnds); // determine screen coordinates of tiles Point upperLeft = getContext().worldToPixel(new Coordinate(bnds.getMinX(), bnds.getMinY())); Point bottomRight = getContext().worldToPixel(new Coordinate(bnds.getMaxX(), bnds.getMaxY())); Rectangle tileSize = new Rectangle(upperLeft); tileSize.add(bottomRight); // render try { CoordinateReferenceSystem crs = getContext().getCRS(); AffineTransform worldToScreen = RendererUtilities.worldToScreenTransform(bnds, tileSize, crs); GridCoverageRenderer paint = new GridCoverageRenderer(crs, bnds, tileSize, worldToScreen); paint.paint(graphics, coverage, style); if (TESTING) { // if(true){ /* for testing draw border around tiles */ graphics.setColor(Color.BLACK); graphics.drawLine( (int) tileSize.getMinX(), (int) tileSize.getMinY(), (int) tileSize.getMinX(), (int) tileSize.getMaxY()); graphics.drawLine( (int) tileSize.getMinX(), (int) tileSize.getMinY(), (int) tileSize.getMaxX(), (int) tileSize.getMinY()); graphics.drawLine( (int) tileSize.getMaxX(), (int) tileSize.getMinY(), (int) tileSize.getMaxX(), (int) tileSize.getMaxY()); graphics.drawLine( (int) tileSize.getMinX(), (int) tileSize.getMaxY(), (int) tileSize.getMaxX(), (int) tileSize.getMaxY()); graphics.drawString( tile.getId(), ((int) tileSize.getMaxX() - 113), ((int) tileSize.getMaxY() - 113)); } } catch (Throwable t) { WMTPlugin.log("Error Rendering tile. Painting Tile " + tile.getId(), t); // $NON-NLS-1$ } }