/** * Renders features based on the map layers and their styles as specified in the map context * using <code>setContext</code>. * * <p>This version of the method assumes that the area of the visible part of the map and the * size of the output area are known. The transform between the two is calculated internally. * * @param graphics The graphics object to draw to. * @param paintArea The size of the output area in output units (eg: pixels). * @param mapArea the map's visible area (viewport) in map coordinates. */ public void paint(Graphics2D graphics, Rectangle paintArea, ReferencedEnvelope mapArea) { if (mapArea == null || paintArea == null) { LOGGER.info("renderer passed null arguments"); return; } // Other arguments get checked later paint( graphics, paintArea, mapArea, RendererUtilities.worldToScreenTransform(mapArea, paintArea)); }
/** * Renders features based on the map layers and their styles as specified in the map context * using <code>setContext</code>. * * <p>This version of the method assumes that the area of the visible part of the map and the * size of the output area are known. The transform between the two is calculated internally. * * @param graphics The graphics object to draw to. * @param paintArea The size of the output area in output units (eg: pixels). * @param mapArea the map's visible area (viewport) in map coordinates. * @deprecated Use paint(Graphics2D graphics, Rectangle paintArea, ReferencedEnvelope mapArea) * or paint(Graphics2D graphics, Rectangle paintArea, ReferencedEnvelope mapArea, * AffineTransform worldToScreen) instead. */ public void paint(Graphics2D graphics, Rectangle paintArea, Envelope mapArea) { if (mapArea == null || paintArea == null) { LOGGER.info("renderer passed null arguments"); return; } // Other arguments get checked later paint( graphics, paintArea, mapArea, RendererUtilities.worldToScreenTransform(mapArea, paintArea)); }
@Test public void testReprojectGoogleMercatorTouchDateline() throws Exception { CoordinateReferenceSystem googleMercator = CRS.decode("EPSG:3857"); ReferencedEnvelope mapExtent = new ReferencedEnvelope(20037508.34, 40075016.68, 0, 20037508.34, googleMercator); Rectangle screenSize = new Rectangle(256, 256); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer(googleMercator, mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = new StyleBuilder().createRasterSymbolizer(); RenderedImage image = renderer.renderImage( worldReader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.RED, 256, 256); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/googleMercatorTouchDateline.png"); ImageAssert.assertEquals(reference, image, 10); }
@Test public void testNullSymbolizer() throws Exception { CoordinateReferenceSystem googleMercator = CRS.decode("EPSG:3857"); ReferencedEnvelope mapExtent = new ReferencedEnvelope( -20037508.34, 20037508.34, -20037508.34, 20037508.34, googleMercator); Rectangle screenSize = new Rectangle(200, (int) (mapExtent.getHeight() / mapExtent.getWidth() * 200)); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer(googleMercator, mapExtent, screenSize, w2s); GridCoverage2D coverage = worldReader.read(null); RenderedImage image = renderer.renderImage( coverage, null, Interpolation.getInstance(Interpolation.INTERP_BICUBIC), Color.RED, 256, 256); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/googleMercatorBicubic.png"); ImageAssert.assertEquals(reference, image, 0); }
@Test public void testPolarTouchDateline() throws Exception { // we request a small area, oversampling, and the output has some white pixels in a corner CoordinateReferenceSystem crs = CRS.decode("EPSG:3031", true); // across the dateline, not including the pole ReferencedEnvelope mapExtent = new ReferencedEnvelope(-1250000, 0, -10000000, -8750000, crs); Rectangle screenSize = new Rectangle(256, 256); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer( mapExtent.getCoordinateReferenceSystem(), mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = buildRainColorMap(); RenderedImage image = renderer.renderImage( rainReader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.RED, 256, 256); assertNotNull(image); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/polar_touchdateline.png"); ImageAssert.assertEquals(reference, image, 0); }
@Test public void testPolarCutUpperCorner() throws Exception { // We request a small area, oversampling, and the output has some white pixels in the up // corner CoordinateReferenceSystem crs = CRS.decode("EPSG:3031", true); ReferencedEnvelope mapExtent = new ReferencedEnvelope(-625000, 0, -10000000, -9375000, crs); Rectangle screenSize = new Rectangle(256, 256); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer( mapExtent.getCoordinateReferenceSystem(), mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = buildRainColorMap(); RenderedImage image = renderer.renderImage( rainReader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.RED, 256, 256); assertNotNull(image); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/polar_whitecorner_up.png"); ImageAssert.assertEquals(reference, image, 0); }
@Test public void testPolarCutLowCorner() throws Exception { // we request a small area, oversampling, and the output has some white pixels in a corner CoordinateReferenceSystem crs = CRS.decode("EPSG:3031", true); // across the dateline, not including the pole ReferencedEnvelope mapExtent = new ReferencedEnvelope(-2500000, -1250000, -10000000, -8750000, crs); Rectangle screenSize = new Rectangle(256, 256); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer( mapExtent.getCoordinateReferenceSystem(), mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = buildRainColorMap(); RenderedImage image = renderer.renderImage( rainReader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.RED, 256, 256); assertNotNull(image); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/polar_whitecorner.png"); ImageAssert.assertEquals(reference, image, 0); }
@Test public void testCrashOutsideValidArea() throws Exception { ReferencedEnvelope mapExtent = new ReferencedEnvelope( 0.00023726353151687, 180.00025801626, -269.99984914217, -89.999828389438, DefaultGeographicCRS.WGS84); Rectangle screenSize = new Rectangle(256, 256); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer(DefaultGeographicCRS.WGS84, mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = new StyleBuilder().createRasterSymbolizer(); RenderedImage image = renderer.renderImage( worldReader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.RED, 256, 256); assertNull(image); }
@Test public void testIndexedWithNoBackground() throws Exception { CoordinateReferenceSystem googleMercator = CRS.decode("EPSG:3857"); ReferencedEnvelope mapExtent = new ReferencedEnvelope( -20037508.34, 20037508.34, -20037508.34, 20037508.34, googleMercator); Rectangle screenSize = new Rectangle(200, (int) (mapExtent.getHeight() / mapExtent.getWidth() * 200)); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer(googleMercator, mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = new StyleBuilder().createRasterSymbolizer(); RenderedImage image = renderer.renderImage( worldPaletteReader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_BICUBIC), null, 256, 256); assertNotNull(image); }
@Test public void testAcrossDatelineBicubic() throws Exception { ReferencedEnvelope mapExtent = new ReferencedEnvelope(10, 350, -90, 90, DefaultGeographicCRS.WGS84); Rectangle screenSize = new Rectangle(500, (int) (mapExtent.getHeight() / mapExtent.getWidth() * 500)); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer(DefaultGeographicCRS.WGS84, mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = new StyleBuilder().createRasterSymbolizer(); RenderedImage image = renderer.renderImage( worldReader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_BICUBIC), Color.RED, 256, 256); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/wrapDatelineBicubic.png"); ImageAssert.assertEquals(reference, image, 0); }
@Test public void testInterpolationBicubic() throws Exception { CoordinateReferenceSystem googleMercator = CRS.decode("EPSG:3857"); ReferencedEnvelope mapExtent = new ReferencedEnvelope( -20037508.34, 20037508.34, -20037508.34, 20037508.34, googleMercator); Rectangle screenSize = new Rectangle(200, (int) (mapExtent.getHeight() / mapExtent.getWidth() * 200)); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer(googleMercator, mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = new StyleBuilder().createRasterSymbolizer(); GridCoverage2D coverage = worldReader.read(null); RenderedImage image = renderer.renderImage( coverage, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_BICUBIC), Color.RED, 256, 256); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/googleMercatorBicubic.png"); ImageAssert.assertEquals(reference, image, 0); }
@Test public void testAcrossDatelineBilinear() throws Exception { ReferencedEnvelope mapExtent = new ReferencedEnvelope(10, 350, -90, 90, DefaultGeographicCRS.WGS84); Rectangle screenSize = new Rectangle(500, (int) (mapExtent.getHeight() / mapExtent.getWidth() * 500)); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer(DefaultGeographicCRS.WGS84, mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = new StyleBuilder().createRasterSymbolizer(); RenderedImage image = renderer.renderImage( worldReader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.RED, 256, 256); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/wrapDatelineNearest.png"); ImageAssert.assertEquals(reference, image, 20); }
@Test public void testReprojectGoogleMercator() throws Exception { CoordinateReferenceSystem googleMercator = CRS.decode("EPSG:3857"); ReferencedEnvelope mapExtent = new ReferencedEnvelope( -20037508.34, 20037508.34, -20037508.34, 20037508.34, googleMercator); Rectangle screenSize = new Rectangle(200, (int) (mapExtent.getHeight() / mapExtent.getWidth() * 200)); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer(googleMercator, mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = new StyleBuilder().createRasterSymbolizer(); GridCoverage2D coverage = worldReader.read(null); RenderedImage image = renderer.renderImage( coverage, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.RED, 256, 256); // always set ROI on reprojection assertThat(image.getProperty("roi"), instanceOf(ROI.class)); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/googleMercator.png"); ImageAssert.assertEquals(reference, image, 0); }
@Test public void testCoverage_0_360() throws Exception { CoordinateReferenceSystem crs = CRS.decode("EPSG:4326", true); ReferencedEnvelope mapExtent = new ReferencedEnvelope(100, 260, -90, 90, crs); Rectangle screenSize = new Rectangle(400, (int) (mapExtent.getHeight() / mapExtent.getWidth() * 400)); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer( mapExtent.getCoordinateReferenceSystem(), mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = new StyleBuilder().createRasterSymbolizer(); RenderedImage image = renderer.renderImage( worldReader_0_360, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.BLACK, 256, 256); assertNotNull(image); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/world_0_360.png"); ImageAssert.assertEquals(reference, image, 10); }
/** Test that rendering of sampleGrib.tif on longitude (304,310) results in cropping. */ @Test public void testSampleGribCropLongitude() throws Exception { CoordinateReferenceSystem crs = CRS.decode("EPSG:4326", true); ReferencedEnvelope mapExtent = new ReferencedEnvelope(304, 310, 2, 10, crs); Rectangle screenSize = new Rectangle(400, (int) (mapExtent.getHeight() / mapExtent.getWidth() * 400)); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer( mapExtent.getCoordinateReferenceSystem(), mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = new StyleBuilder().createRasterSymbolizer(); RenderedImage image = renderer.renderImage( sampleGribReader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.GRAY, 256, 256); assertNotNull(image); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/sampleGribCropLongitude.png"); ImageAssert.assertEquals(reference, image, 0); }
@Test public void testSouthPolar() throws Exception { CoordinateReferenceSystem crs = CRS.decode("EPSG:3031", true); // across the dateline, not including the pole ReferencedEnvelope mapExtent = new ReferencedEnvelope(-6000000, 6000000, -8000000, -1000000, crs); Rectangle screenSize = new Rectangle(400, (int) (mapExtent.getHeight() / mapExtent.getWidth() * 400)); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer( mapExtent.getCoordinateReferenceSystem(), mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = new StyleBuilder().createRasterSymbolizer(); RenderedImage image = renderer.renderImage( worldReader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.RED, 256, 256); assertNotNull(image); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/south_polar.png"); ImageAssert.assertEquals(reference, image, 0); }
/** Test rendering of sampleGrib.tif on its native longitude bounds (302,308). */ @Test // background == nodata assumption public void testSampleGrib() throws Exception { CoordinateReferenceSystem crs = CRS.decode("EPSG:4326", true); ReferencedEnvelope mapExtent = new ReferencedEnvelope(302, 308, 2, 10, crs); Rectangle screenSize = new Rectangle(400, (int) (mapExtent.getHeight() / mapExtent.getWidth() * 400)); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer( mapExtent.getCoordinateReferenceSystem(), mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = new StyleBuilder().createRasterSymbolizer(); RenderedImage image = renderer.renderImage( sampleGribReader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.GRAY, 256, 256); assertNotNull(image); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/sampleGrib.png"); ImageAssert.assertEquals(reference, image, 0); }
@Test public void testNorthPolar() throws Exception { CoordinateReferenceSystem crs = CRS.decode("EPSG:3995", true); // across the dateline, not including the pole ReferencedEnvelope mapExtent = new ReferencedEnvelope(-6000000, 6000000, 8000000, 1000000, crs); Rectangle screenSize = new Rectangle(400, (int) (mapExtent.getHeight() / mapExtent.getWidth() * 400)); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer( mapExtent.getCoordinateReferenceSystem(), mapExtent, screenSize, w2s); RasterSymbolizer rasterSymbolizer = new StyleBuilder().createRasterSymbolizer(); RenderedImage image = renderer.renderImage( worldReader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.RED, 256, 256); assertNotNull(image); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/north_polar.png"); ImageAssert.assertEquals(reference, image, 40); }
@Test public void testNoProjectionHandlerSet() throws Exception { // Request crossing dateline should not contain wrapped data ReferencedEnvelope mapExtent = new ReferencedEnvelope(10, 500, -90, 90, DefaultGeographicCRS.WGS84); Rectangle screenSize = new Rectangle(500, (int) (mapExtent.getHeight() / mapExtent.getWidth() * 500)); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer(DefaultGeographicCRS.WGS84, mapExtent, screenSize, w2s); // Setting No projectionHandler renderer.setAdvancedProjectionHandlingEnabled(false); RasterSymbolizer rasterSymbolizer = new StyleBuilder().createRasterSymbolizer(); RenderedImage image = renderer.renderImage( worldReader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.RED, 256, 256); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/noProjectionHandlerSet.png"); ImageAssert.assertEquals(reference, image, 0); }
new Rectangle( image.getMinX(), image.getMinY(), image.getWidth(), image.getHeight()); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer(