/** * Set the area of interest. This triggers a MapBoundsEvent to be published. * * @param areaOfInterest the new area of interest * @param coordinateReferenceSystem the CRS for the new area of interest * @throws IllegalArgumentException if either argument is {@code null} */ public void setAreaOfInterest(Envelope areaOfInterest, CoordinateReferenceSystem crs) throws IllegalArgumentException { getViewport().setBounds(new ReferencedEnvelope(areaOfInterest, crs)); }
/** * Set the area of interest. This triggers a MapBoundsEvent to be published. * * @param bounds the new area of interest * @throws IllegalArgumentException if the provided areaOfInterest is {@code null} or does not * have a coordinate reference system */ public void setAreaOfInterest(ReferencedEnvelope bounds) throws IllegalArgumentException { if (bounds == null) { throw new NullPointerException("bounds must not be null"); } getViewport().setBounds(bounds); }
/** * Called when a new map layer has been added. Sets the layer as selected (for queries) and, if * the layer table is being used, adds the new layer to the table. */ @Override public void layerAdded(MapLayerListEvent event) { paramsLock.writeLock().lock(); try { Layer layer = event.getElement(); if (layer instanceof ComponentListener) { addComponentListener((ComponentListener) layer); } setFullExtent(); MapViewport viewport = mapContent.getViewport(); if (viewport.getBounds().isEmpty()) { viewport.setBounds(fullExtent); } } finally { paramsLock.writeLock().unlock(); } drawLayers(false); repaint(); }
@Override public synchronized MapViewport getViewport() { if (viewport == null) { viewport = new MapViewport(); try { ReferencedEnvelope layerBounds = getLayerBounds(); if (layerBounds != null) { viewport.setBounds(layerBounds); viewport.setCoordinateReferenceSystem( layerBounds.getCoordinateReferenceSystem()); } } catch (IOException e) { } } return viewport; } }
@Test public void noArgCtorThenSetBoundsGivesNullWorldToScreen() { MapViewport vp = new MapViewport(); vp.setBounds(WORLD_1_1); assertNull(vp.getWorldToScreen()); }
@Test public void noArgCtorThenSetBoundsGivesNullScreenToWorld() { MapViewport vp = new MapViewport(); vp.setBounds(WORLD_1_1); assertNull(vp.getWorldToScreen()); }
@Test public void callSetBoundsWhenNonEditable() throws Exception { MapViewport vp = new MapViewport(); vp.setBounds(WORLD_1_1); vp.setEditable(false); grabLogger(); vp.setBounds(BIG_WORLD_1_1); String s = getLogOutput(); assertTrue(s.contains("Ignored call to setBounds")); assertTrue(WORLD_1_1.boundsEquals2D(vp.getBounds(), TOL)); releaseLogger(); }
public MapContent(MapContext context) { this(); for (MapLayer mapLayer : context.getLayers()) { layerList.add(mapLayer.toLayer()); } if (context.getTitle() != null) { setTitle(context.getTitle()); } if (context.getAbstract() != null) { getUserData().put("abstract", context.getAbstract()); } if (context.getContactInformation() != null) { getUserData().put("contact", context.getContactInformation()); } if (context.getKeywords() != null) { getUserData().put("keywords", context.getKeywords()); } if (context.getAreaOfInterest() != null) { getViewport().setBounds(context.getAreaOfInterest()); } }
private static BufferedImage renderImage( SimpleFeatureSource featureSource, int width, int height, Rectangle2D mapArea, Style style, Map renderingHints) { BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = (Graphics2D) image.getGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); MapContent mapContent = new MapContent(); MapViewport viewport = mapContent.getViewport(); viewport.setBounds(new ReferencedEnvelope(mapArea, DefaultGeographicCRS.WGS84)); viewport.setScreenArea(new Rectangle(width, height)); mapContent.addLayer(new FeatureLayer(featureSource, style)); StreamingRenderer renderer = new StreamingRenderer(); renderer.setRendererHints(renderingHints); renderer.setMapContent(mapContent); renderer.paint(g, viewport.getScreenArea(), viewport.getBounds()); return image; }
@Test public void setBoundsNoAspectCorrection() { MapViewport vp = new MapViewport(); vp.setScreenArea(SCREEN_2_1); vp.setBounds(WORLD_1_1); assertTrue(WORLD_1_1.boundsEquals2D(vp.getBounds(), TOL)); }
@Test public void testHighOversample() throws Exception { // tiny bbox request MapContent content = new MapContent(); content.getViewport() .setBounds( new ReferencedEnvelope(0, -0.0020, 0.0040, 0, DefaultGeographicCRS.WGS84)); RasterSymbolizer rs = buildRainColorMap(); final Style style = new StyleBuilder().createStyle(rs); content.addLayer(new GridReaderLayer(rainReader, style)); final StreamingRenderer renderer = new StreamingRenderer(); renderer.setMapContent(content); Map<Object, Object> rendererParams = new HashMap<Object, Object>(); rendererParams.put(StreamingRenderer.ADVANCED_PROJECTION_HANDLING_KEY, true); rendererParams.put(StreamingRenderer.CONTINUOUS_MAP_WRAPPING, true); renderer.setRendererHints(rendererParams); BufferedImage image = RendererBaseTest.showRender( "highOversample", renderer, 1000, content.getViewport().getBounds()); ImageAssert.assertEquals( new File("src/test/resources/org/geotools/renderer/lite/rainHighOversample.png"), image, 1000); }
private void checkRepeatedLabels(String styleName) throws Exception { Style style = RendererBaseTest.loadStyle(this, styleName + ".sld"); MapContent mc = new MapContent(); mc.addLayer(new FeatureLayer(fs_line, style)); mc.getViewport().setBounds(bounds); StreamingRenderer renderer = new StreamingRenderer(); renderer.setMapContent(mc); renderer.setJava2DHints(new RenderingHints(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON)); renderer.setMapContent(mc); BufferedImage image = RendererBaseTest.renderImage(renderer, bounds, null, 500, 500); File expected = new File( "src/test/resources/org/geotools/renderer/lite/test-data/" + styleName + ".png"); int tolerance = 2000; ImageAssert.assertEquals(expected, image, tolerance); }
@Test public void setNewViewportAndCheckBounds() { mapContent.addLayer(new MockLayer(WORLD)); MapViewport newViewport = new MapViewport(); newViewport.setBounds(SMALL_WORLD); mapContent.setViewport(newViewport); ReferencedEnvelope bounds = mapContent.getBounds(); assertTrue(SMALL_WORLD.boundsEquals2D(bounds, TOL)); }
@Test public void boundsChangeWithScreenArea() { MapViewport vp = new MapViewport(true); vp.setScreenArea(SCREEN_1_1); vp.setBounds(WORLD_1_1); vp.setScreenArea(SCREEN_2_1); ReferencedEnvelope expectedBounds = new ReferencedEnvelope( WORLD_1_1.getMinX(), WORLD_1_1.getMaxX() + WORLD_1_1.getWidth(), WORLD_1_1.getMinY(), WORLD_1_1.getMaxY(), WORLD_1_1.getCoordinateReferenceSystem()); assertTrue(expectedBounds.boundsEquals2D(vp.getBounds(), TOL)); }
@Test public void settingBoundsSetsTheViewportCRS() { MapViewport vp = new MapViewport(); assertFalse( CRS.equalsIgnoreMetadata( WORLD_1_1.getCoordinateReferenceSystem(), vp.getCoordinateReferenceSystem())); vp.setBounds(WORLD_1_1); assertTrue( CRS.equalsIgnoreMetadata( WORLD_1_1.getCoordinateReferenceSystem(), vp.getCoordinateReferenceSystem())); }
@Test public void testLineDoubleDash() throws Exception { StreamingRenderer renderer = setupLineMap("lineDoubleDash.sld"); MapViewport viewport = renderer.getMapContent().getViewport(); ReferencedEnvelope re = viewport.getBounds(); ReferencedEnvelope shifted = new ReferencedEnvelope( re.getMinX() + 2, re.getMaxX() - 3, re.getMinY() + 2, re.getMaxY() - 3, re.getCoordinateReferenceSystem()); viewport.setBounds(shifted); BufferedImage image = RendererBaseTest.showRender( "Lines with double dash array (2 fts)", renderer, TIME, shifted); ImageAssert.assertEquals(file("doubleDash"), image, 10); }
@Test public void coordinateTransform_MatchingAspectRatioDisabled() throws Exception { MapViewport vp = new MapViewport(false); // world and screen bounds with different aspect ratios final ReferencedEnvelope world = WORLD_1_1; final Rectangle screen = SCREEN_2_1; vp.setBounds(world); vp.setScreenArea(screen); double[] screenXY = { screen.getMinX(), screen.getMinY(), screen.getMaxX(), screen.getMaxY() }; double[] worldXY = new double[screenXY.length]; vp.getScreenToWorld().transform(screenXY, 0, worldXY, 0, screenXY.length / 2); assertEquals(world.getMinX(), worldXY[0], TOL); assertEquals(world.getMaxY(), worldXY[1], TOL); assertEquals(world.getMaxX(), worldXY[2], TOL); assertEquals(world.getMinY(), worldXY[3], TOL); }
@Test public void coordinateTransform_MatchingAspectRatioEnabled() throws Exception { MapViewport vp = new MapViewport(true); // world and screen bounds with different aspect ratios final Rectangle screen = SCREEN_2_1; vp.setBounds(WORLD_1_1); vp.setScreenArea(screen); ReferencedEnvelope actualWorld = vp.getBounds(); double[] screenXY = { screen.getMinX(), screen.getMinY(), screen.getMaxX(), screen.getMaxY() }; double[] worldXY = new double[screenXY.length]; vp.getScreenToWorld().transform(screenXY, 0, worldXY, 0, screenXY.length / 2); assertEquals(actualWorld.getMinX(), worldXY[0], TOL); assertEquals(actualWorld.getMaxY(), worldXY[1], TOL); assertEquals(actualWorld.getMaxX(), worldXY[2], TOL); assertEquals(actualWorld.getMinY(), worldXY[3], TOL); }