Search in sources :

Example 1 with NoThreadStreamingRenderer

use of org.geotools.renderer.lite.NoThreadStreamingRenderer 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)

Aggregations

Graphics2D (java.awt.Graphics2D)1 Rectangle (java.awt.Rectangle)1 RenderingHints (java.awt.RenderingHints)1 BufferedImage (java.awt.image.BufferedImage)1 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 FeatureLayer (org.geotools.map.FeatureLayer)1 MapContent (org.geotools.map.MapContent)1 RenderListener (org.geotools.renderer.RenderListener)1 NoThreadStreamingRenderer (org.geotools.renderer.lite.NoThreadStreamingRenderer)1 StreamingRenderer (org.geotools.renderer.lite.StreamingRenderer)1 SimpleFeature (org.opengis.feature.simple.SimpleFeature)1 ImageResponse (org.polymap.core.data.image.ImageResponse)1