public WMSMapContent(WMSMapContent other, boolean copyLayers) { this.mapWidth = other.mapWidth; this.mapHeight = other.mapHeight; this.bgColor = other.bgColor; this.transparent = other.transparent; this.tileSize = other.tileSize; this.angle = other.angle; this.callbacks = new ArrayList<>(other.callbacks); this.buffer = other.buffer; this.icm = other.icm; this.request = other.request; if (copyLayers) { this.layers().addAll(other.layers()); } this.getViewport().setBounds(other.getViewport().getBounds()); }
/** * Returns the transformation going from the map area space to the screen space taking into * account map rotation */ public AffineTransform getRenderingTransform() { Rectangle paintArea = new Rectangle(0, 0, getMapWidth(), getMapHeight()); ReferencedEnvelope dataArea = getViewport().getBounds(); AffineTransform tx; if (getAngle() != 0.0) { tx = new AffineTransform(); tx.translate(paintArea.width / 2, paintArea.height / 2); tx.rotate(Math.toRadians(getAngle())); tx.translate(-paintArea.width / 2, -paintArea.height / 2); tx.concatenate(RendererUtilities.worldToScreenTransform(dataArea, paintArea)); } else { tx = RendererUtilities.worldToScreenTransform(dataArea, paintArea); } return tx; }
/** * Returns the actual area that should be drawn taking into account the map rotation account map * rotation */ public ReferencedEnvelope getRenderingArea() { ReferencedEnvelope dataArea = getViewport().getBounds(); if (getAngle() == 0) return dataArea; AffineTransform tx = new AffineTransform(); double offsetX = dataArea.getMinX() + dataArea.getWidth() / 2; double offsetY = dataArea.getMinY() + dataArea.getHeight() / 2; tx.translate(offsetX, offsetY); tx.rotate(Math.toRadians(getAngle())); tx.translate(-offsetX, -offsetY); Rectangle2D dataAreaShape = new Rectangle2D.Double( dataArea.getMinX(), dataArea.getMinY(), dataArea.getWidth(), dataArea.getHeight()); Rectangle2D transformedBounds = tx.createTransformedShape(dataAreaShape).getBounds2D(); return new ReferencedEnvelope(transformedBounds, dataArea.getCoordinateReferenceSystem()); }
private double getScaleDenominator(GetMapRequest request) { final Envelope envelope = request.getBbox(); final CoordinateReferenceSystem mapcrs = request.getCrs(); WMSMapContent mapContent = new WMSMapContent(request); if (mapcrs != null) { mapContent.getViewport().setBounds(new ReferencedEnvelope(envelope, mapcrs)); } else { mapContent .getViewport() .setBounds(new ReferencedEnvelope(envelope, DefaultGeographicCRS.WGS84)); } mapContent.setMapWidth(request.getWidth()); mapContent.setMapHeight(request.getHeight()); mapContent.setAngle(request.getAngle()); return mapContent.getScaleDenominator(true); }
getViewport().getBounds(), getMapWidth(), getMapHeight(), hints); } catch (Exception e) { throw new ServiceException("Failed to compute accurate scale denominator", e); } else { return RendererUtilities.calculateOGCScale( getViewport().getBounds(), getMapWidth(), hints);
private Rectangle produceMap(double minX, double maxX, double minY, double maxY) { this.map .getViewport() .setBounds( new ReferencedEnvelope(minX, maxX, minY, maxY, DefaultGeographicCRS.WGS84)); RenderedImageMapOutputFormat rasterMapProducer = new RenderedImageMapOutputFormat(getWMS()); RenderedImageMap imageMap = rasterMapProducer.produceMap(this.map); this.op = (RenderedOp) imageMap.getImage(); this.image = this.op.getAsBufferedImage(); imageMap.dispose(); return new Rectangle(0, 0, this.image.getWidth(), this.image.getHeight()); } }
/** * Force the output to be in WGS84 * @param mc * @return */ private WMSMapContent fixViewport(WMSMapContent mc) { MapViewport viewport = mc.getViewport(); if(!CRS.equalsIgnoreMetadata(viewport.getCoordinateReferenceSystem(), DefaultGeographicCRS.WGS84)) { viewport.setCoordinateReferenceSystem(DefaultGeographicCRS.WGS84); GetMapRequest req = mc.getRequest(); req.setSRS("EPSG:4326"); req.setBbox(viewport.getBounds()); } return mc; }
private WMSMapContent createWMSMap(Envelope bounds) throws Exception { WMSMapContent map = new WMSMapContent(); int w = 400; int h = (int) Math.round((bounds.getHeight() * w) / bounds.getWidth()); map.setMapWidth(w); map.setMapHeight(h); map.setBgColor(BG_COLOR); map.setTransparent(true); addRasterToMap(map, MockData.TASMANIA_DEM); map.getViewport().setBounds(new ReferencedEnvelope(bounds, DefaultGeographicCRS.WGS84)); return map; }
private WMSMapContent createMapContent( ReferencedEnvelope mapBounds, Rectangle renderingArea, Integer buffer, Layer... layers) throws Exception { GetMapRequest mapRequest = createGetMapRequest(mapBounds, renderingArea, buffer); WMSMapContent map = new WMSMapContent(mapRequest); map.getViewport().setBounds(mapBounds); if (layers != null) { for (Layer l : layers) { map.addLayer(l); } } map.setMapWidth(renderingArea.width); map.setMapHeight(renderingArea.height); if (Objects.nonNull(buffer)) { map.setBuffer(buffer); } mapContents.add(map); return map; }
.getViewport() .setBounds(new ReferencedEnvelope(-180, 0, -90, 90, DefaultGeographicCRS.WGS84)); mapContent.setMapHeight(256);
double width = mapContent.getMapWidth(); double height = mapContent.getMapHeight(); ReferencedEnvelope bbox = mapContent.getViewport().getBounds(); double bbox_width = bbox.getWidth(); double bbox_height = bbox.getHeight();
@Test public void testExternalImageSize() throws Exception { GetMapRequest req = createGetMapRequest(MockData.STREAMS); req.setWidth(256); req.setHeight(256); WMSMapContent mapContent = new WMSMapContent(req); mapContent.addLayer(createMapLayer(MockData.STREAMS, "big-local-image")); mapContent .getViewport() .setBounds(new ReferencedEnvelope(-180, 0, -90, 90, DefaultGeographicCRS.WGS84)); mapContent.setMapHeight(256); mapContent.setMapWidth(256); KMLMapOutputFormat of = new KMLMapOutputFormat(getWMS()); KMLMap map = of.produceMap(mapContent); ByteArrayOutputStream bout = new ByteArrayOutputStream(); new KMLEncoder().encode(map.getKml(), bout, null); Document document = dom(new ByteArrayInputStream(bout.toByteArray())); assertEquals("kml", document.getDocumentElement().getNodeName()); assertEquals(1, document.getElementsByTagName("Style").getLength()); XMLAssert.assertXpathExists("//kml:IconStyle/kml:scale", document); XPath xPath = XPathFactory.newInstance().newXPath(); initXPath(xPath); Double scale = (Double) xPath.evaluate( "//kml:IconStyle/kml:scale", document.getDocumentElement(), XPathConstants.NUMBER); assertEquals(42d / 16d, scale, 0.01); }
private WMSMapContent createMapContent(ReferencedEnvelope mapBounds, Rectangle renderingArea, Layer... layers) throws Exception { GetMapRequest mapRequest = createGetMapRequest(mapBounds, renderingArea); WMSMapContent map = new WMSMapContent(mapRequest); map.getViewport().setBounds(mapBounds); if (layers != null) { for (Layer l : layers) { map.addLayer(l); } } map.setMapWidth(renderingArea.width); map.setMapHeight(renderingArea.height); return map; }
protected WMSMapContent createMapContent(double dpi) { GetMapRequest request = new GetMapRequest(); request.setWidth(1000); request.setHeight(1000); request.setRawKvp(new HashMap<String, String>()); if (dpi > 0) { request.getFormatOptions().put("dpi", dpi); } WMSMapContent map = new WMSMapContent(request); map.setMapWidth(request.getWidth()); map.setMapHeight(request.getHeight()); map.getViewport() .setBounds( new ReferencedEnvelope( new Envelope(0, 0.01, 0, 0.01), DefaultGeographicCRS.WGS84)); return map; }
WMSMapContent createMapContext(QName layer, String style) throws Exception { // create a map context WMSMapContent mapContent = new WMSMapContent(); mapContent.addLayer(createMapLayer(layer, style)); mapContent.setMapHeight(256); mapContent.setMapWidth(256); GetMapRequest getMapRequest = createGetMapRequest(new QName[] {layer}); getMapRequest.setWidth(256); getMapRequest.setHeight(256); mapContent.setRequest(getMapRequest); mapContent .getViewport() .setBounds(new ReferencedEnvelope(-180, 180, -90, 90, DefaultGeographicCRS.WGS84)); return mapContent; }
map.setBgColor(BG_COLOR); map.setTransparent(true); map.getViewport().setBounds(bbox); addRasterToMap(map, TAZ_BYTE); map.getViewport().setBounds(bbox);
@Test public void testGetMapOnByteNodataGrayScale() throws Exception { GetMapRequest request = new GetMapRequest(); CoordinateReferenceSystem crs = DefaultGeographicCRS.WGS84; ReferencedEnvelope bbox = new ReferencedEnvelope(new Envelope(145, 146, -43, -41), crs); request.setBbox(bbox); request.setHeight(768); request.setWidth(384); request.setSRS("urn:x-ogc:def:crs:EPSG:4326"); request.setFormat("image/png"); request.setTransparent(true); final WMSMapContent map = new WMSMapContent(request); map.setMapHeight(768); map.setMapWidth(384); map.setBgColor(BG_COLOR); map.setTransparent(true); map.getViewport().setBounds(bbox); addRasterToMap(map, TAZ_BYTE); map.getViewport().setBounds(bbox); RenderedImageMap imageMap = this.rasterMapProducer.produceMap(map); RenderedOp op = (RenderedOp) imageMap.getImage(); BufferedImage image = op.getAsBufferedImage(); imageMap.dispose(); // check that a pixel in nodata area is transparent assertEquals(0, image.getRaster().getSample(40, 400, 0)); assertEquals(0, image.getRaster().getSample(40, 400, 1)); }
@Test public void testSimpleGetMapQuery() throws Exception { Catalog catalog = getCatalog(); final FeatureSource fs = catalog.getFeatureTypeByName( MockData.BASIC_POLYGONS.getPrefix(), MockData.BASIC_POLYGONS.getLocalPart()) .getFeatureSource(null, null); final Envelope env = fs.getBounds(); LOGGER.info("about to create map ctx for BasicPolygons with bounds " + env); GetMapRequest request = new GetMapRequest(); final WMSMapContent map = new WMSMapContent(); map.getViewport().setBounds(new ReferencedEnvelope(env, DefaultGeographicCRS.WGS84)); map.setMapWidth(300); map.setMapHeight(300); map.setBgColor(Color.red); map.setTransparent(false); map.setRequest(request); StyleInfo styleByName = catalog.getStyleByName("Default"); Style basicStyle = styleByName.getStyle(); map.addLayer(new FeatureLayer(fs, basicStyle)); request.setFormat(getMapFormat()); RenderedImageMap imageMap = this.rasterMapProducer.produceMap(map); BufferedImage image = (BufferedImage) imageMap.getImage(); imageMap.dispose(); assertNotBlank("testSimpleGetMapQuery", image); }
map.setRequest(request); map.addLayer(new FeatureLayer(fSource, style)); map.getViewport().setBounds(new ReferencedEnvelope(env, DefaultGeographicCRS.WGS84)); map.setMapWidth(w); map.setMapHeight(h);
addToMap(map, MockData.MAP_NEATLINE); map.getViewport().setBounds(new ReferencedEnvelope(env, DefaultGeographicCRS.WGS84));