Search in sources :

Example 1 with ILayer

use of org.polymap.core.project.ILayer in project polymap4-core by Polymap4.

the class NewLayerOperation method doWithCommit.

@Override
public IStatus doWithCommit(IProgressMonitor monitor, IAdaptable info) throws Exception {
    assert map.get().belongsTo(uow.get());
    monitor.beginTask(getLabel(), 5);
    register(uow.get());
    // create entity
    ILayer newLayer = uow.get().createEntity(ILayer.class, null, (ILayer proto) -> {
        initializer.get().initialize(proto);
        assert proto.label.get() != null;
        assert proto.resourceIdentifier.get() != null;
        proto.parentMap.set(map.get());
        proto.orderKey.set(proto.maxOrderKey() + 1);
        return proto;
    });
    layer.set(newLayer);
    assert map.get().layers.contains(newLayer);
    return Status.OK_STATUS;
}
Also used : ILayer(org.polymap.core.project.ILayer)

Example 2 with ILayer

use of org.polymap.core.project.ILayer in project polymap4-core by Polymap4.

the class PipelineMapOutputFormat method produceMap.

@Override
public final RenderedImageMap produceMap(WMSMapContent mapContent) throws ServiceException {
    // single layer? -> request ENCODED_IMAGE
    if (mapContent.layers().size() == 1) {
        try {
            Layer mapLayer = mapContent.layers().get(0);
            ILayer layer = findLayer(mapLayer);
            Pipeline pipeline = server.getOrCreatePipeline(layer, ImageProducer.class).get();
            ProcessorRequest request = prepareProcessorRequest(mapContent);
            AtomicReference<BufferedImage> result = new AtomicReference<BufferedImage>();
            server.createPipelineExecutor().execute(pipeline, request, (ImageResponse pipeResponse) -> {
                BufferedImage layerImage = (BufferedImage) pipeResponse.getImage();
                result.set(layerImage);
            });
            return buildMap(mapContent, result.get());
        } catch (Exception e) {
            throw new ServiceException(e);
        }
    } else // multiple layers -> render into one image
    {
        List<Job> jobs = new ArrayList();
        final Map<Layer, Image> images = new HashMap();
        // run jobs for all layers
        for (final Layer mapLayer : mapContent.layers()) {
            UIJob job = new UIJob("PipelineMapOutputFormat: " + mapLayer.getTitle()) {

                @Override
                protected void runWithException(IProgressMonitor monitor) throws Exception {
                    try {
                        final ILayer layer = findLayer(mapLayer);
                        Pipeline pipeline = server.getOrCreatePipeline(layer, ImageProducer.class).get();
                        GetMapRequest request = prepareProcessorRequest(mapContent);
                        server.createPipelineExecutor().execute(pipeline, request, (ImageResponse pipeResponse) -> {
                            BufferedImage layerImage = (BufferedImage) pipeResponse.getImage();
                            images.put(mapLayer, layerImage);
                        });
                    } catch (Exception e) {
                        // XXX put a error image in the map
                        log.warn("", e);
                        images.put(mapLayer, null);
                        throw e;
                    }
                }
            };
            job.schedule();
            jobs.add(job);
        }
        // join jobs
        for (Job job : jobs) {
            try {
                job.join();
            } catch (InterruptedException e) {
                log.warn("", e);
            }
        }
        // put images together (MapContext order)
        Graphics2D g = null;
        try {
            // result image
            BufferedImage result = ImageUtils.createImage(mapContent.getMapWidth(), mapContent.getMapHeight(), null, true);
            g = result.createGraphics();
            // 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));
            g.setRenderingHints(hints);
            for (Layer mapLayer : mapContent.layers()) {
                Image layerImage = images.get(mapLayer);
                // load image data
                // new javax.swing.ImageIcon( image ).getImage();
                // ILayer layer = findLayer( mapLayer );
                int rule = AlphaComposite.SRC_OVER;
                // TODO opacity
                // ((float)layer.getOpacity()) / 100;
                float alpha = 1;
                g.setComposite(AlphaComposite.getInstance(rule, alpha));
                g.drawImage(layerImage, 0, 0, null);
            }
            return buildMap(mapContent, result);
        } finally {
            if (g != null) {
                g.dispose();
            }
        }
    }
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Image(java.awt.Image) BufferedImage(java.awt.image.BufferedImage) RenderedImage(java.awt.image.RenderedImage) BufferedImage(java.awt.image.BufferedImage) RenderingHints(java.awt.RenderingHints) ImageProducer(org.polymap.core.data.image.ImageProducer) ProcessorRequest(org.polymap.core.data.pipeline.ProcessorRequest) ImageResponse(org.polymap.core.data.image.ImageResponse) UIJob(org.polymap.core.runtime.UIJob) Job(org.eclipse.core.runtime.jobs.Job) UIJob(org.polymap.core.runtime.UIJob) ILayer(org.polymap.core.project.ILayer) AtomicReference(java.util.concurrent.atomic.AtomicReference) ILayer(org.polymap.core.project.ILayer) Layer(org.geotools.map.Layer) FactoryException(org.opengis.referencing.FactoryException) ServiceException(org.geoserver.platform.ServiceException) Pipeline(org.polymap.core.data.pipeline.Pipeline) Graphics2D(java.awt.Graphics2D) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) ServiceException(org.geoserver.platform.ServiceException) GetMapRequest(org.polymap.core.data.image.GetMapRequest)

Example 3 with ILayer

use of org.polymap.core.project.ILayer in project polymap4-core by Polymap4.

the class PipelineMapOutputFormat method findLayer.

protected ILayer findLayer(Layer mapLayer) {
    ILayer layer = null;
    String layerName = StringUtils.substringAfterLast(mapLayer.getTitle(), ":");
    for (ILayer l : server.map.layers) {
        if (l.label.get().equals(layerName)) {
            layer = l;
            break;
        }
    }
    if (layer == null) {
        throw new RuntimeException("No such layer for title: " + mapLayer.getTitle());
    }
    return layer;
}
Also used : ILayer(org.polymap.core.project.ILayer)

Example 4 with ILayer

use of org.polymap.core.project.ILayer in project polymap4-core by Polymap4.

the class GeoServerLoader method loadCatalog.

protected void loadCatalog(Catalog catalog, GeoServerServlet service) throws Exception {
    log.info("Loading catalog...");
    IMap map = service.map;
    // workspace
    WorkspaceInfoImpl wsInfo = new WorkspaceInfoImpl();
    wsInfo.setId(simpleName(map.id()) + "-ws");
    wsInfo.setDefault(true);
    // simpleName( GeoServerPlugin.instance().baseName.orElse( map.label.get() ) ) );
    wsInfo.setName("the-one-and-only");
    // catalog.add( MapInfo );
    log.info("Workspace: " + wsInfo);
    catalog.add(GeoServerUtils.defaultNsInfo.get());
    log.info("Namespace: " + GeoServerUtils.defaultNsInfo.get());
    for (ILayer layer : map.layers) {
        try {
            // Features
            P4DataStoreInfo dsInfo = P4DataStoreInfo.canHandle(catalog, layer);
            if (dsInfo != null) {
                dsInfo.setWorkspace(wsInfo);
                if (dsInfo.getFeatureSource().getSchema().getGeometryDescriptor() != null) {
                    P4FeatureTypeInfo ftInfo = new P4FeatureTypeInfo(catalog, dsInfo);
                    catalog.add(ftInfo);
                    P4LayerInfo layerInfo = new P4LayerInfo(catalog, layer, ftInfo, PublishedType.VECTOR);
                    layerInfo.createFeatureStyleInfo(service.createSLD(layer), resourceLoader);
                    catalog.add(layerInfo);
                }
                continue;
            }
            // WMS
            P4ImageStoreInfo imInfo = P4ImageStoreInfo.canHandle(catalog, layer);
            if (imInfo != null) {
                imInfo.setWorkspace(wsInfo);
                P4ImageResourceInfo resInfo = new P4ImageResourceInfo(catalog, imInfo);
                catalog.add(resInfo);
                P4LayerInfo layerInfo = new P4LayerInfo(catalog, layer, resInfo, PublishedType.WMS);
                layerInfo.createFeatureStyleInfo(service.createSLD(layer), resourceLoader);
                catalog.add(layerInfo);
                continue;
            }
        // XXX GridCoverage is not handled yet
        } catch (Exception e) {
            // don't break entire GeoServer if upstream WMS/WFS or else fails
            log.warn("Error loading layer: " + layer, e);
        }
    }
    catalog.add(wsInfo);
}
Also used : IMap(org.polymap.core.project.IMap) WorkspaceInfoImpl(org.geoserver.catalog.impl.WorkspaceInfoImpl) ILayer(org.polymap.core.project.ILayer) BeansException(org.springframework.beans.BeansException)

Aggregations

ILayer (org.polymap.core.project.ILayer)4 Graphics2D (java.awt.Graphics2D)1 Image (java.awt.Image)1 RenderingHints (java.awt.RenderingHints)1 BufferedImage (java.awt.image.BufferedImage)1 RenderedImage (java.awt.image.RenderedImage)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 AtomicReference (java.util.concurrent.atomic.AtomicReference)1 IProgressMonitor (org.eclipse.core.runtime.IProgressMonitor)1 Job (org.eclipse.core.runtime.jobs.Job)1 WorkspaceInfoImpl (org.geoserver.catalog.impl.WorkspaceInfoImpl)1 ServiceException (org.geoserver.platform.ServiceException)1 Layer (org.geotools.map.Layer)1 FactoryException (org.opengis.referencing.FactoryException)1 GetMapRequest (org.polymap.core.data.image.GetMapRequest)1 ImageProducer (org.polymap.core.data.image.ImageProducer)1 ImageResponse (org.polymap.core.data.image.ImageResponse)1 Pipeline (org.polymap.core.data.pipeline.Pipeline)1 ProcessorRequest (org.polymap.core.data.pipeline.ProcessorRequest)1