Search in sources :

Example 1 with StreamingRenderer

use of org.geotools.renderer.lite.StreamingRenderer in project polymap4-core by Polymap4.

the class FeatureRenderProcessor2 method getMapRequest.

@Override
public void getMapRequest(GetMapRequest request, ProcessorContext context) throws Exception {
    long start = System.currentTimeMillis();
    // result
    BufferedImage result = new BufferedImage(request.getWidth(), request.getHeight(), TYPE_4BYTE_ABGR);
    result.setAccelerationPriority(1);
    final Graphics2D g = result.createGraphics();
    // log.info( "IMAGE: accelerated=" + result.getCapabilities( g.getDeviceConfiguration() ).isAccelerated() );
    MapContent mapContent = new MapContent();
    try {
        // MapContent
        mapContent.getViewport().setCoordinateReferenceSystem(request.getBoundingBox().getCoordinateReferenceSystem());
        mapContent.addLayer(new FeatureLayer(fs.get(), style.get()));
        StreamingRenderer renderer = new NoThreadStreamingRenderer();
        // error handler
        renderer.addRenderListener(new RenderListener() {

            @Override
            public void featureRenderer(SimpleFeature feature) {
            }

            @Override
            public void errorOccurred(Exception e) {
                if (e.getMessage() == null || e.getMessage().contains("Error transforming bbox") || e.getMessage().contains("too close to a pole")) {
                    log.warn("Renderer: " + e.getMessage());
                } else {
                    log.error("Renderer error: ", e);
                    drawErrorMsg(g, "Unable to render.", e);
                }
            }
        });
        // rendering hints
        RenderingHints hints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        hints.add(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));
        hints.add(new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON));
        hints.add(new RenderingHints(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON));
        // hints.add( new RenderingHints(
        // RenderingHints.KEY_TEXT_ANTIALIASING,
        // RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB ) );
        // geoserver compatibility to support *env* in SLD functions
        double scale = RendererUtilities.calculateOGCScale(request.getBoundingBox(), request.getWidth(), Collections.EMPTY_MAP);
        EnvFunction.setLocalValue("wms_scale_denominator", scale);
        renderer.setJava2DHints(hints);
        g.setRenderingHints(hints);
        // render params
        Map rendererParams = new HashMap();
        rendererParams.put("optimizedDataLoadingEnabled", Boolean.TRUE);
        renderer.setRendererHints(rendererParams);
        renderer.setMapContent(mapContent);
        Rectangle paintArea = new Rectangle(request.getWidth(), request.getHeight());
        renderer.paint(g, paintArea, request.getBoundingBox());
    } catch (Throwable e) {
        log.error("Renderer error: ", e);
        drawErrorMsg(g, "Unable to render.", e);
    } finally {
        mapContent.dispose();
        EnvFunction.clearLocalValues();
        if (g != null) {
            g.dispose();
        }
    }
    log.debug("   ...done: (" + (System.currentTimeMillis() - start) + "ms).");
    context.sendResponse(new ImageResponse(result));
}
Also used : MapContent(org.geotools.map.MapContent) HashMap(java.util.HashMap) Rectangle(java.awt.Rectangle) BufferedImage(java.awt.image.BufferedImage) SimpleFeature(org.opengis.feature.simple.SimpleFeature) IOException(java.io.IOException) RenderingHints(java.awt.RenderingHints) Graphics2D(java.awt.Graphics2D) NoThreadStreamingRenderer(org.geotools.renderer.lite.NoThreadStreamingRenderer) StreamingRenderer(org.geotools.renderer.lite.StreamingRenderer) FeatureLayer(org.geotools.map.FeatureLayer) NoThreadStreamingRenderer(org.geotools.renderer.lite.NoThreadStreamingRenderer) ImageResponse(org.polymap.core.data.image.ImageResponse) RenderListener(org.geotools.renderer.RenderListener) HashMap(java.util.HashMap) Map(java.util.Map)

Example 2 with StreamingRenderer

use of org.geotools.renderer.lite.StreamingRenderer in project spatial-portal by AtlasOfLivingAustralia.

the class AreaUploadShapefileWizardController method executeShapeImageRenderer.

private void executeShapeImageRenderer(Filter filter) {
    try {
        LOGGER.debug("Generating image");
        SimpleFeatureCollection features1;
        if (filter == null) {
            features1 = source.getFeatures();
        } else {
            features1 = source.getFeatures(filter);
        }
        // Create a map content and add our shapefile to it
        MapContent map = new MapContent();
        org.geotools.styling.Style style = SLD.createSimpleStyle(source.getSchema());
        Layer layer = new FeatureLayer(features1, style);
        map.addLayer(layer);
        GTRenderer renderer = new StreamingRenderer();
        renderer.setMapContent(map);
        int imageWidth = 800;
        int imageHeight = 300;
        Rectangle imageBounds;
        ReferencedEnvelope mapBounds;
        mapBounds = map.getMaxBounds();
        double heightToWidth = mapBounds.getSpan(1) / mapBounds.getSpan(0);
        if (heightToWidth * imageWidth > imageHeight) {
            imageBounds = new Rectangle(0, 0, (int) Math.round(imageHeight / heightToWidth), imageHeight);
        } else {
            imageBounds = new Rectangle(0, 0, imageWidth, (int) Math.round(imageWidth * heightToWidth));
        }
        BufferedImage image = new BufferedImage(imageBounds.width, imageBounds.height, BufferedImage.TYPE_INT_RGB);
        Graphics2D gr = image.createGraphics();
        gr.setPaint(Color.WHITE);
        gr.fill(imageBounds);
        renderer.paint(gr, imageBounds, mapBounds);
        img.setContent(image);
    } catch (Exception e) {
        LOGGER.debug("Unable to generate image for selected shapefile", e);
    }
}
Also used : MapContent(org.geotools.map.MapContent) FeatureLayer(org.geotools.map.FeatureLayer) Layer(org.geotools.map.Layer) MapLayer(au.org.emii.portal.menu.MapLayer) BufferedImage(java.awt.image.BufferedImage) ParseException(com.vividsolutions.jts.io.ParseException) IOException(java.io.IOException) SimpleFeatureCollection(org.geotools.data.simple.SimpleFeatureCollection) StreamingRenderer(org.geotools.renderer.lite.StreamingRenderer) FeatureLayer(org.geotools.map.FeatureLayer) ReferencedEnvelope(org.geotools.geometry.jts.ReferencedEnvelope) GTRenderer(org.geotools.renderer.GTRenderer)

Example 3 with StreamingRenderer

use of org.geotools.renderer.lite.StreamingRenderer in project sldeditor by robward-scisys.

the class SLDMapPane method doSetRenderer.

/**
 * Do set renderer.
 *
 * @param newRenderer the new renderer
 */
private void doSetRenderer(GTRenderer newRenderer) {
    if (newRenderer != null) {
        Map<Object, Object> hints = newRenderer.getRendererHints();
        if (hints == null) {
            hints = new HashMap<Object, Object>();
        }
        if (newRenderer instanceof StreamingRenderer) {
            if (hints.containsKey(StreamingRenderer.LABEL_CACHE_KEY)) {
                labelCache = (LabelCache) hints.get(StreamingRenderer.LABEL_CACHE_KEY);
            } else {
                labelCache = new LabelCacheImpl();
                hints.put(StreamingRenderer.LABEL_CACHE_KEY, labelCache);
            }
        }
        newRenderer.setRendererHints(hints);
        if (mapContent != null) {
            newRenderer.setMapContent(mapContent);
        }
    }
    renderer = newRenderer;
}
Also used : LabelCacheImpl(org.geotools.renderer.label.LabelCacheImpl) StreamingRenderer(org.geotools.renderer.lite.StreamingRenderer)

Example 4 with StreamingRenderer

use of org.geotools.renderer.lite.StreamingRenderer in project polymap4-core by Polymap4.

the class RasterRenderProcessor method getMapRequest.

@Override
public void getMapRequest(GetMapRequest request, ProcessorContext context) throws Exception {
    // result
    BufferedImage result = new BufferedImage(request.getWidth(), request.getHeight(), TYPE_4BYTE_ABGR);
    final Graphics2D g = result.createGraphics();
    MapContent mapContent = new MapContent();
    try {
        mapContent.getViewport().setCoordinateReferenceSystem(request.getBoundingBox().getCoordinateReferenceSystem());
        mapContent.addLayer(new GridReaderLayer(reader, style.get()));
        // renderer
        StreamingRenderer renderer = new StreamingRenderer();
        // error handler
        renderer.addRenderListener(new RenderListener() {

            public void featureRenderer(SimpleFeature feature) {
            }

            public void errorOccurred(Exception e) {
                log.error("Renderer error: ", e);
                drawErrorMsg(g, "Fehler bei der Darstellung.", e);
            }
        });
        // rendering hints
        RenderingHints hints = new RenderingHints(KEY_RENDERING, VALUE_RENDER_QUALITY);
        hints.add(new RenderingHints(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON));
        hints.add(new RenderingHints(KEY_TEXT_ANTIALIASING, VALUE_TEXT_ANTIALIAS_ON));
        renderer.setJava2DHints(hints);
        // render params
        Map rendererParams = new HashMap();
        rendererParams.put("optimizedDataLoadingEnabled", Boolean.TRUE);
        renderer.setRendererHints(rendererParams);
        renderer.setMapContent(mapContent);
        Rectangle paintArea = new Rectangle(request.getWidth(), request.getHeight());
        renderer.paint(g, paintArea, request.getBoundingBox());
    } catch (Throwable e) {
        log.error("Renderer error: ", e);
        drawErrorMsg(g, null, e);
    } finally {
        mapContent.dispose();
        EnvFunction.clearLocalValues();
        if (g != null) {
            g.dispose();
        }
    }
    context.sendResponse(new ImageResponse(result));
}
Also used : MapContent(org.geotools.map.MapContent) HashMap(java.util.HashMap) Rectangle(java.awt.Rectangle) BufferedImage(java.awt.image.BufferedImage) SimpleFeature(org.opengis.feature.simple.SimpleFeature) RenderingHints(java.awt.RenderingHints) Graphics2D(java.awt.Graphics2D) StreamingRenderer(org.geotools.renderer.lite.StreamingRenderer) GridReaderLayer(org.geotools.map.GridReaderLayer) ImageResponse(org.polymap.core.data.image.ImageResponse) RenderListener(org.geotools.renderer.RenderListener) HashMap(java.util.HashMap) Map(java.util.Map)

Example 5 with StreamingRenderer

use of org.geotools.renderer.lite.StreamingRenderer in project dhis2-core by dhis2.

the class MapUtils method render.

// -------------------------------------------------------------------------
// Map
// -------------------------------------------------------------------------
public static BufferedImage render(InternalMap map, Integer maxWidth, Integer maxHeight) {
    MapContent mapContent = new MapContent();
    for (InternalMapLayer mapLayer : map.getLayers()) {
        for (InternalMapObject mapObject : mapLayer.getMapObjects()) {
            mapContent.addLayer(createFeatureLayerFromMapObject(mapObject));
        }
    }
    // Create a renderer for this map
    GTRenderer renderer = new StreamingRenderer();
    renderer.setMapContent(mapContent);
    // Calculate image height
    ReferencedEnvelope mapBounds = mapContent.getMaxBounds();
    double widthToHeightFactor = mapBounds.getSpan(0) / mapBounds.getSpan(1);
    int[] widthHeight = getWidthHeight(maxWidth, maxHeight, LegendSet.LEGEND_TOTAL_WIDTH, TITLE_HEIGHT, widthToHeightFactor);
    // LegendSet.LEGEND_TOTAL_WIDTH;
    Rectangle imageBounds = new Rectangle(0, 0, widthHeight[0], widthHeight[1]);
    // Create an image and get the graphics context from it
    BufferedImage image = new BufferedImage(imageBounds.width, imageBounds.height, BufferedImage.TYPE_INT_ARGB);
    Graphics2D graphics = (Graphics2D) image.getGraphics();
    graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    renderer.paint(graphics, imageBounds, mapBounds);
    mapContent.dispose();
    return image;
}
Also used : ReferencedEnvelope(org.geotools.geometry.jts.ReferencedEnvelope) MapContent(org.geotools.map.MapContent) Rectangle(java.awt.Rectangle) GTRenderer(org.geotools.renderer.GTRenderer) BufferedImage(java.awt.image.BufferedImage) StreamingRenderer(org.geotools.renderer.lite.StreamingRenderer) Graphics2D(java.awt.Graphics2D)

Aggregations

StreamingRenderer (org.geotools.renderer.lite.StreamingRenderer)5 BufferedImage (java.awt.image.BufferedImage)4 MapContent (org.geotools.map.MapContent)4 Graphics2D (java.awt.Graphics2D)3 Rectangle (java.awt.Rectangle)3 RenderingHints (java.awt.RenderingHints)2 IOException (java.io.IOException)2 HashMap (java.util.HashMap)2 Map (java.util.Map)2 ReferencedEnvelope (org.geotools.geometry.jts.ReferencedEnvelope)2 FeatureLayer (org.geotools.map.FeatureLayer)2 GTRenderer (org.geotools.renderer.GTRenderer)2 RenderListener (org.geotools.renderer.RenderListener)2 SimpleFeature (org.opengis.feature.simple.SimpleFeature)2 ImageResponse (org.polymap.core.data.image.ImageResponse)2 MapLayer (au.org.emii.portal.menu.MapLayer)1 ParseException (com.vividsolutions.jts.io.ParseException)1 SimpleFeatureCollection (org.geotools.data.simple.SimpleFeatureCollection)1 GridReaderLayer (org.geotools.map.GridReaderLayer)1 Layer (org.geotools.map.Layer)1