private Style createPointStyle() { StyleBuilder sb = new StyleBuilder(); return sb.createStyle(sb.createPointSymbolizer()); }
@Test public void testSpatialDefaulterForceEPSG() throws Exception { // a spatial filter in the same SRS as the geometry... but with a different axis order // interpretation, if we assume lat/lon we should pick point.4 StyleBuilder sb = new StyleBuilder(); Symbolizer ps = sb.createPointSymbolizer(); Style style = sb.createStyle(ps); Rule rule = style.featureTypeStyles().get(0).rules().get(0); rule.setFilter(ff.bbox("geom", 5, 1, 7, 3, null)); // force EPSG axis order interpretation renderer.setRendererHints( Collections.singletonMap(StreamingRenderer.FORCE_EPSG_AXIS_ORDER_KEY, true)); content.addLayer(new FeatureLayer(pointFS, style)); RendererBaseTest.showRender("Spatial in EPSG order", renderer, TIME, bounds); assertEquals(1, renderedIds.size()); assertEquals("point.4", renderedIds.iterator().next()); }
@Test public void testUnreachableExternalGraphic() throws Exception { File file = new File(TestData.getResource(this, "draw.png").toURI()); URL resource = new File(file.getParent(), "draw-not-there.png").toURI().toURL(); PointSymbolizer ps = sb.createPointSymbolizer( sb.createGraphic( null, null, sb.createExternalGraphic(resource, "image/png"))); ps.getGraphic().setSize(sb.literalExpression(null)); Style style = sb.createStyle(ps); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(style); assertEquals(0, rbe.getBuffer()); assertFalse(rbe.isEstimateAccurate()); }
@Test public void testReprojectedPolygon() throws Exception { // a spatial filter in a different SRS CoordinateReferenceSystem utm31n = CRS.decode("EPSG:32631"); CoordinateReferenceSystem wgs84 = CRS.decode("EPSG:4326"); ReferencedEnvelope envWgs84 = new ReferencedEnvelope(1, 3, 5, 7, wgs84); ReferencedEnvelope envUTM31N = envWgs84.transform(utm31n, true); StyleBuilder sb = new StyleBuilder(); Symbolizer ps = sb.createPointSymbolizer(); Style style = sb.createStyle(ps); Rule rule = style.featureTypeStyles().get(0).rules().get(0); Polygon polygon = JTS.toGeometry(envUTM31N); polygon.setUserData(utm31n); rule.setFilter(ff.intersects(ff.property("geom"), ff.literal(polygon))); content.addLayer(new FeatureLayer(pointFS, style)); RendererBaseTest.showRender("Reprojected polygon", renderer, TIME, bounds); assertEquals(1, renderedIds.size()); assertEquals("point.4", renderedIds.iterator().next()); }
public void testPointSymbolizer() throws Exception { URL urlExternal = getClass().getResource("/data/sld/blob.gif"); ExternalGraphic extg = sb.createExternalGraphic(urlExternal, "image/svg+xml"); Graphic graphic = sb.createGraphic(extg, null, null); PointSymbolizer pointSymb = sb.createPointSymbolizer(graphic); pointSymb.accept(visitor); PointSymbolizer clone = (PointSymbolizer) visitor.getCopy(); assertCopy(pointSymb, clone); assertEqualsContract(pointSymb, clone); PointSymbolizer notEq = sf.getDefaultPointSymbolizer(); notEq.setGeometryPropertyName("something_else"); assertEqualsContract(clone, notEq, pointSymb); }
@Test public void testResizeExternalGraphic() throws IOException { File imageFile = new File("./src/test/resources/org/geotools/renderer/lite/test-data/draw.png") .getCanonicalFile(); assertTrue(imageFile.exists()); String fileUrl = URLs.fileToUrl(imageFile).toExternalForm(); PointSymbolizer ps = sb.createPointSymbolizer( sb.createGraphic( null, null, sb.createExternalGraphic(fileUrl, "image/png"))); GraphicsAwareDpiRescaleStyleVisitor visitor = new GraphicsAwareDpiRescaleStyleVisitor(2); ps.accept(visitor); PointSymbolizer resized = (PointSymbolizer) visitor.getCopy(); Expression size = resized.getGraphic().getSize(); assertTrue(size instanceof Literal); // original image height was 22 assertEquals(44, size.evaluate(null, Integer.class).intValue()); }
public void testPointSymbolizerWithGeomFunction() throws Exception { URL urlExternal = getClass().getResource("/data/sld/blob.gif"); ExternalGraphic extg = sb.createExternalGraphic(urlExternal, "image/svg+xml"); Graphic graphic = sb.createGraphic(extg, null, null); PointSymbolizer pointSymb = sb.createPointSymbolizer(graphic); // Set a function as geometry Function geomFunc = ff.function("centroid", ff.property("thr_geom")); pointSymb.setGeometry(geomFunc); pointSymb.accept(visitor); PointSymbolizer copy = (PointSymbolizer) visitor.getCopy(); assertEquals( "Any Expression set as Geometry must be correctly replicated", geomFunc, copy.getGeometry()); }
@Test public void testReprojectedBBOX() throws Exception { // a spatial filter in a different SRS CoordinateReferenceSystem utm31n = CRS.decode("EPSG:32631"); CoordinateReferenceSystem wgs84 = CRS.decode("EPSG:4326"); ReferencedEnvelope envWgs84 = new ReferencedEnvelope(1, 3, 5, 7, wgs84); ReferencedEnvelope envUTM31N = envWgs84.transform(utm31n, true); StyleBuilder sb = new StyleBuilder(); Symbolizer ps = sb.createPointSymbolizer(); Style style = sb.createStyle(ps); Rule rule = style.featureTypeStyles().get(0).rules().get(0); rule.setFilter( ff.bbox( "geom", envUTM31N.getMinX(), envUTM31N.getMinY(), envUTM31N.getMaxX(), envUTM31N.getMaxY(), "EPSG:32631")); // force EPSG axis order interpretation renderer.setRendererHints( Collections.singletonMap(StreamingRenderer.FORCE_EPSG_AXIS_ORDER_KEY, true)); content.addLayer(new FeatureLayer(pointFS, style)); RendererBaseTest.showRender("Spatial in EPSG order", renderer, TIME, bounds); assertEquals(1, renderedIds.size()); assertEquals("point.4", renderedIds.iterator().next()); }
@Test public void testReprojectedPolygonFromDefinitionQuery() throws Exception { // a spatial filter in a different SRS CoordinateReferenceSystem utm31n = CRS.decode("EPSG:32631"); CoordinateReferenceSystem wgs84 = CRS.decode("EPSG:4326"); ReferencedEnvelope envWgs84 = new ReferencedEnvelope(1, 3, 5, 7, wgs84); ReferencedEnvelope envUTM31N = envWgs84.transform(utm31n, true); // build the style StyleBuilder sb = new StyleBuilder(); Symbolizer ps = sb.createPointSymbolizer(); Style style = sb.createStyle(ps); // build a filter for the layer own definition query FeatureLayer layer = new FeatureLayer(pointFS, style); Polygon polygon = JTS.toGeometry((Envelope) envUTM31N); polygon.setUserData(utm31n); layer.setQuery( new DefaultQuery(null, ff.intersects(ff.property("geom"), ff.literal(polygon)))); content.addLayer(layer); RendererBaseTest.showRender( "Reprojected polygon as a definition query", renderer, TIME, bounds); assertEquals(1, renderedIds.size()); assertEquals("point.4", renderedIds.iterator().next()); } }
@Test public void testPlainFilter() { Filter f = ff.greater(ff.property("attribute"), ff.literal(10)); Rule r = sb.createRule(sb.createPointSymbolizer()); r.setFilter(f); StyleAttributeExtractor extractor = new StyleAttributeExtractor(); r.accept(extractor); Set<String> atts = extractor.getAttributeNameSet(); assertTrue(atts.contains("attribute")); assertEquals(1, atts.size()); assertTrue(extractor.getDefaultGeometryUsed()); }
@Test public void testGeometryTransformation() { PointSymbolizer ps = sb.createPointSymbolizer(); ps.setGeometry( ff.function( "offset", ff.property("the_geom"), ff.property("offx"), ff.property("offy"))); Rule r = sb.createRule(ps); StyleAttributeExtractor extractor = new StyleAttributeExtractor(); r.accept(extractor); Set<String> atts = extractor.getAttributeNameSet(); assertEquals(3, atts.size()); assertTrue(atts.contains("the_geom")); assertTrue(atts.contains("offx")); assertTrue(atts.contains("offy")); assertFalse(extractor.getDefaultGeometryUsed()); }
@Test public void testResizeMark() { PointSymbolizer ps = sb.createPointSymbolizer(sb.createGraphic(null, sb.createMark("square"), null)); GraphicsAwareDpiRescaleStyleVisitor visitor = new GraphicsAwareDpiRescaleStyleVisitor(2); ps.accept(visitor); PointSymbolizer resized = (PointSymbolizer) visitor.getCopy(); Expression size = resized.getGraphic().getSize(); assertTrue(size instanceof Literal); assertEquals(32, size.evaluate(null, Integer.class).intValue()); }
protected void visitPointSymbolizerTest(double scaleMetersToPixel, Unit<Length> uom) { try { UomRescaleStyleVisitor visitor = null; double size = 100; double expectedRescaledSize = computeExpectedRescaleSize(size, scaleMetersToPixel, uom); StyleBuilder styleBuilder = new StyleBuilder(); PointSymbolizerImpl pointSymb = (PointSymbolizerImpl) styleBuilder.createPointSymbolizer(); pointSymb.setUnitOfMeasure(uom); FilterFactory2 filterFactory = new FilterFactoryImpl(); pointSymb.getGraphic().setSize(filterFactory.literal(size)); visitor = new UomRescaleStyleVisitor(scaleMetersToPixel); pointSymb.accept(visitor); PointSymbolizer rescaledPointSymb = (PointSymbolizer) visitor.getCopy(); double rescaledSize = rescaledPointSymb.getGraphic().getSize().evaluate(null, Double.class); assertEquals(Math.round(expectedRescaledSize), Math.round(rescaledSize)); assertNotSame(rescaledPointSymb, pointSymb); } catch (Exception e2) { java.util.logging.Logger.getGlobal().log(java.util.logging.Level.INFO, "", e2); fail(e2.getClass().getSimpleName() + " should not be thrown."); } }
@Test public void testSimpleGraphic() { PointSymbolizer ps = sb.createPointSymbolizer( sb.createGraphic(null, sb.createMark(sb.MARK_CIRCLE), null)); ps.getGraphic().setSize(sb.literalExpression(15)); Style style = sb.createStyle(ps); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(style); assertEquals(16, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); }
@Test public void testMarkNoSizeNoStroke() throws Exception { StyleBuilder sb = new StyleBuilder(); Mark mark = sb.createMark("square"); mark.setStroke(null); Graphic graphic = sb.createGraphic(null, mark, null); graphic.setSize(NilExpression.NIL); PointSymbolizer ps = sb.createPointSymbolizer(graphic); Style style = sb.createStyle(ps); MetaBufferEstimator estimator = new MetaBufferEstimator(); style.accept(estimator); assertTrue(estimator.isEstimateAccurate()); assertEquals(16, estimator.getBuffer()); }
@Test public void testReachableExternalGraphic() { URL resource = TestData.getResource(this, "draw.png"); PointSymbolizer ps = sb.createPointSymbolizer( sb.createGraphic( null, null, sb.createExternalGraphic(resource, "image/png"))); ps.getGraphic().setSize(sb.literalExpression(null)); Style style = sb.createStyle(ps); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(style); assertEquals(24, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); }
/** * Tests size calculation of dynamically sized feature, using real-world units combined with * DPI-based resizing. */ @Test public void testCombinedResizingDpiUom() { // given: Point with dynamic size in real-world units int sizeNum = 10; double scaleDpi = 2; double scaleUom = 3; PointSymbolizer symbolizer = sb.createPointSymbolizer(); Graphic graphic = sb.createGraphic(); graphic.setSize(ff.function("strConcat", ff.property("size"), ff.literal("m"))); symbolizer.setGraphic(graphic); // when: DPI based resizing is applied RescaleStyleVisitor dpiVisitor = new GraphicsAwareDpiRescaleStyleVisitor(scaleDpi); symbolizer.accept(dpiVisitor); symbolizer = (PointSymbolizer) dpiVisitor.getCopy(); // and: UOM resizing is applied UomRescaleStyleVisitor uomVisitor = new UomRescaleStyleVisitor(scaleUom); uomVisitor.visit(symbolizer); symbolizer = (PointSymbolizer) uomVisitor.getCopy(); SimpleFeature feature = createFeatureSized(sizeNum); // then: only the UOM resizing must have an effect Double size = symbolizer.getGraphic().getSize().evaluate(feature, Double.class); assertEquals(sizeNum * scaleUom, size.doubleValue(), 0d); }
@Test public void testMarkStroke() throws Exception { StyleBuilder sb = new StyleBuilder(); Mark mark = sb.createMark("square"); mark.getStroke().setWidth(sb.getFilterFactory().literal(10)); Graphic graphic = sb.createGraphic(null, mark, null); graphic.setSize(NilExpression.NIL); PointSymbolizer ps = sb.createPointSymbolizer(graphic); Style style = sb.createStyle(ps); MetaBufferEstimator estimator = new MetaBufferEstimator(); style.accept(estimator); assertTrue(estimator.isEstimateAccurate()); assertEquals(26, estimator.getBuffer()); }
@Test public void testRescaleGraphicPointSymbolizer() { // create a graphic that needs rescaling StyleBuilder sb = new StyleBuilder(); // create a circle Mark circle = sb.createMark("circle", null, sb.createStroke(500)); Graphic g = sb.createGraphic(null, circle, null); // a point symbolizer with the specified circle PointSymbolizer ps = sb.createPointSymbolizer(g); // first see it in feet ps.setUnitOfMeasure(USCustomary.FOOT); // rescale it UomRescaleStyleVisitor visitor = new UomRescaleStyleVisitor(10); ps.accept(visitor); PointSymbolizer rps = (PointSymbolizer) visitor.getCopy(); Mark rm = (Mark) rps.getGraphic().graphicalSymbols().get(0); assertEquals(1524.0, rm.getStroke().getWidth().evaluate(null, Double.class), 0d); // now let's see the same in meters ps.setUnitOfMeasure(SI.METRE); // rescale it visitor = new UomRescaleStyleVisitor(10); ps.accept(visitor); rps = (PointSymbolizer) visitor.getCopy(); rm = (Mark) rps.getGraphic().graphicalSymbols().get(0); assertEquals(5000.0, rm.getStroke().getWidth().evaluate(null, Double.class), 0d); }
@Test public void testGraphicSizeFunction() throws Exception { StyleBuilder sb = new StyleBuilder(); Mark mark = sb.createMark("square"); mark.setStroke(null); Graphic graphic = sb.createGraphic(null, mark, null); FilterFactory2 ff = sb.getFilterFactory(); graphic.setSize(ff.function("env", ff.literal("test"))); PointSymbolizer ps = sb.createPointSymbolizer(graphic); Style style = sb.createStyle(ps); try { EnvFunction.setGlobalValue("test", 10); MetaBufferEstimator estimator = new MetaBufferEstimator(); style.accept(estimator); assertTrue(estimator.isEstimateAccurate()); assertEquals(10, estimator.getBuffer()); } finally { EnvFunction.clearGlobalValues(); } }