use of org.apache.sis.portrayal.MapLayers in project geotoolkit by Geomatys.
the class PortrayalServiceTest method testPropertyPreservation.
@Test
public void testPropertyPreservation() throws Exception {
final Point location = GO2Utilities.JTS_FACTORY.createPoint(new Coordinate(2, 3));
final FeatureTypeBuilder builder = new FeatureTypeBuilder().setName("Donaldville");
builder.addAttribute(Point.class).setName("geometry");
builder.addAttribute(String.class).setName("firstName");
builder.addAttribute(String.class).setName("lastName");
final FeatureType duckType = builder.build();
final Feature duck = duckType.newInstance();
duck.setPropertyValue("firstName", "Donald");
duck.setPropertyValue("lastName", "Duck");
duck.setPropertyValue("geometry", location);
final MapLayer layer = MapBuilder.createLayer(new InMemoryFeatureSet(duckType, Collections.singleton(duck)));
final CanvasDef canvas = new CanvasDef(new Dimension(16, 16), new Envelope2D(CommonCRS.defaultGeographic(), 0, 0, 16, 16));
final MapLayers ctx = MapBuilder.createContext();
ctx.getComponents().add(layer);
final SceneDef scene = new SceneDef(ctx);
scene.getHints().put(GO2Hints.KEY_PRESERVE_PROPERTIES, true);
final List<Presentation> result = DefaultPortrayalService.present(canvas, scene).collect(Collectors.toList());
assertEquals(1, result.size());
final Presentation presentation = result.get(0);
final Feature picked = (Feature) presentation.getCandidate();
assertNotNull(picked);
Map<String, Object> expectedProperties = new HashMap<>();
expectedProperties.put("firstName", "Donald");
expectedProperties.put("lastName", "Duck");
expectedProperties.put("geometry", location);
final Map<String, Object> properties = picked.getType().getProperties(true).stream().filter(p -> p instanceof AttributeType).map(attr -> attr.getName().tip().toString()).collect(Collectors.toMap(Function.identity(), name -> picked.getPropertyValue(name)));
assertEquals(String.format("Returned values do not match.%nExpected: %s%nActual: %s%n", expectedProperties.entrySet().stream().map(entry -> String.format("%s -> %s", entry.getKey(), entry.getValue())).collect(Collectors.joining(", ")), properties.entrySet().stream().map(entry -> String.format("%s -> %s", entry.getKey(), entry.getValue())).collect(Collectors.joining(", "))), expectedProperties, properties);
// By default, don't load un-necessary properties
scene.getHints().remove(GO2Hints.KEY_PRESERVE_PROPERTIES);
final List<Object> geometries = DefaultPortrayalService.present(canvas, scene).map(p -> (Feature) p.getCandidate()).peek(Assert::assertNotNull).peek(f -> assertEquals(1, f.getType().getProperties(true).stream().filter(p -> p instanceof AttributeType).count())).map(f -> f.getPropertyValue("geometry")).collect(Collectors.toList());
assertEquals(1, geometries.size());
assertEquals(geometries.get(0), location);
}
use of org.apache.sis.portrayal.MapLayers in project geotoolkit by Geomatys.
the class PortrayalServiceTest method testCoveragePropertyRendering.
/**
* Test rendering of a coverage inside a feature property.
*/
@Test
public void testCoveragePropertyRendering() throws Exception {
final FeatureTypeBuilder ftb = new FeatureTypeBuilder();
ftb.setName("test");
ftb.addAttribute(GridCoverage.class).setName("coverage");
final FeatureType ft = ftb.build();
final BufferedImage img = new BufferedImage(90, 90, BufferedImage.TYPE_INT_ARGB);
final Graphics2D g = img.createGraphics();
g.setColor(Color.GREEN);
g.fillRect(0, 0, 90, 90);
g.dispose();
final GridCoverageBuilder gcb = new GridCoverageBuilder();
gcb.setDomain(new GridGeometry(null, PixelInCell.CELL_CENTER, new AffineTransform2D(1, 0, 0, 1, 0.5, 0.5), CommonCRS.WGS84.normalizedGeographic()));
gcb.setValues(img);
final Feature f = ft.newInstance();
f.setPropertyValue("coverage", gcb.build());
final FeatureSet collection = new InMemoryFeatureSet(ft, Arrays.asList(f));
final String name = "mySymbol";
final Description desc = DEFAULT_DESCRIPTION;
final String geometry = "coverage";
final Unit unit = Units.POINT;
final Expression opacity = LITERAL_ONE_FLOAT;
final ChannelSelection channels = null;
final OverlapBehavior overlap = null;
final ColorMap colormap = null;
final ContrastEnhancement enhance = null;
final ShadedRelief relief = null;
final Symbolizer outline = null;
final RasterSymbolizer symbol = SF.rasterSymbolizer(name, geometry, desc, unit, opacity, channels, overlap, colormap, enhance, relief, outline);
final MutableStyle style = SF.style(symbol);
final MapLayer layer = MapBuilder.createLayer(collection);
layer.setStyle(style);
final MapLayers context = MapBuilder.createContext();
context.getComponents().add(layer);
final SceneDef sdef = new SceneDef(context);
final GeneralEnvelope env = new GeneralEnvelope(CommonCRS.WGS84.normalizedGeographic());
env.setRange(0, -180, +180);
env.setRange(1, -90, +90);
final CanvasDef cdef = new CanvasDef(new Dimension(360, 180), env);
final BufferedImage result = DefaultPortrayalService.portray(cdef, sdef);
final Raster raster = result.getData();
final int[] pixel = new int[4];
final int[] trans = new int[] { 0, 0, 0, 0 };
final int[] green = new int[] { 0, 255, 0, 255 };
assertNotNull(result);
raster.getPixel(0, 0, pixel);
assertArrayEquals(trans, pixel);
raster.getPixel(179, 45, pixel);
assertArrayEquals(trans, pixel);
raster.getPixel(181, 45, pixel);
assertArrayEquals(green, pixel);
}
use of org.apache.sis.portrayal.MapLayers in project geotoolkit by Geomatys.
the class PortrayalServiceTest method testPortrayalCoverageResource.
/**
* Test the CoverageReader view of a scene.
*/
@Test
public void testPortrayalCoverageResource() throws DataStoreException {
// create a test coverage
final BufferedImage img = new BufferedImage(360, 180, BufferedImage.TYPE_INT_ARGB);
final Graphics2D g2d = img.createGraphics();
g2d.setColor(Color.GREEN);
g2d.fillRect(0, 0, 360, 180);
final GeneralEnvelope env = new GeneralEnvelope(CommonCRS.WGS84.normalizedGeographic());
env.setRange(0, -180, 180);
env.setRange(1, -90, 90);
final GridCoverageBuilder gcb = new GridCoverageBuilder();
gcb.setDomain(env);
gcb.setValues(img);
final GridCoverage coverage = gcb.build();
// display it
final MapLayers context = MapBuilder.createContext();
final MapLayer cl = MapBuilder.createCoverageLayer(coverage, SF.style(StyleConstants.DEFAULT_RASTER_SYMBOLIZER), "coverage");
context.getComponents().add(cl);
final SceneDef sceneDef = new SceneDef(context);
final GridCoverageResource resource = DefaultPortrayalService.asResource(sceneDef);
final GridGeometry gridGeom = resource.getGridGeometry();
assertNotNull(gridGeom);
final GridCoverage result = resource.read(null);
final RenderedImage image = result.render(null);
assertEquals(1000, image.getWidth());
}
use of org.apache.sis.portrayal.MapLayers in project geotoolkit by Geomatys.
the class PortrayalServiceTest method testCoverageVisit0_360.
/**
* Test picking on a coverage in range 0-360.
* @throws PortrayalException
*/
@Test
public void testCoverageVisit0_360() throws PortrayalException {
// Create 0-360 coverage
final BufferedImage img = new BufferedImage(350, 180, BufferedImage.TYPE_INT_ARGB);
CoordinateReferenceSystem crs = CommonCRS.WGS84.normalizedGeographic();
crs = AbstractCRS.castOrCopy(crs).forConvention(AxesConvention.POSITIVE_RANGE);
final AffineTransform2D gridToCrs = new AffineTransform2D(1, 0, 0, -1, 0, 90);
final GridExtent extent = new GridExtent(350, 180);
final GridGeometry gg = new GridGeometry(extent, PixelInCell.CELL_CORNER, gridToCrs, crs);
final GridCoverageBuilder gcb = new GridCoverageBuilder();
gcb.setValues(img);
gcb.setDomain(gg);
final GridCoverage coverage = gcb.build();
final GridCoverageResource gcr = new InMemoryGridCoverageResource(coverage);
final MapLayer layer = MapBuilder.createCoverageLayer(gcr);
final MapLayers context = MapBuilder.createContext();
context.getComponents().add(layer);
final GeneralEnvelope viewEnv = new GeneralEnvelope(CommonCRS.WGS84.normalizedGeographic());
viewEnv.setRange(0, -180, +180);
viewEnv.setRange(1, -90, +90);
final AtomicInteger count = new AtomicInteger();
GraphicVisitor gv = new GraphicVisitor() {
@Override
public void startVisit() {
}
@Override
public void endVisit() {
}
@Override
public void visit(Presentation graphic, RenderingContext context, SearchArea area) {
count.incrementAndGet();
}
@Override
public boolean isStopRequested() {
return false;
}
};
final SceneDef scene = new SceneDef(context);
final CanvasDef canvas = new CanvasDef(new Dimension(360, 180), viewEnv);
final VisitDef visit = new VisitDef(new Rectangle(10, 80, 2, 2), gv);
DefaultPortrayalService.visit(canvas, scene, visit);
assertEquals(1, count.get());
}
use of org.apache.sis.portrayal.MapLayers in project geotoolkit by Geomatys.
the class PortrayalServiceTest method testRendering.
private void testRendering(final MapLayer layer) throws Exception {
final StopOnErrorMonitor monitor = new StopOnErrorMonitor();
final MapLayers context = MapBuilder.createContext(CommonCRS.WGS84.normalizedGeographic());
context.getComponents().add(layer);
assertEquals(1, context.getComponents().size());
for (final Envelope env : envelopes) {
for (double[] drange : timestamps) {
for (double[] erange : elevations) {
final GeneralEnvelope cenv = new GeneralEnvelope(CRS.compound(env.getCoordinateReferenceSystem(), CommonCRS.Vertical.ELLIPSOIDAL.crs(), CommonCRS.Temporal.JAVA.crs()));
cenv.subEnvelope(0, 2).setEnvelope(env);
cenv.setRange(2, erange[0], erange[1]);
cenv.setRange(3, drange[0], drange[1]);
final CanvasDef cdef = new CanvasDef(new Dimension(800, 600), cenv);
cdef.setAzimuth(0);
cdef.setMonitor(monitor);
final BufferedImage img = DefaultPortrayalService.portray(cdef, new SceneDef(context));
assertNull(monitor.getLastException());
assertNotNull(img);
}
}
}
}
Aggregations