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;
}
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();
}
}
}
}
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;
}
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);
}
Aggregations