public static List<LiteFeatureTypeStyle> getFeatureStyles( Layer layer, final Rectangle screenSize, final double mapScale, FeatureType schema) throws IOException { Style style = layer.getStyle(); List<FeatureTypeStyle> featureStyles = style.featureTypeStyles(); List<LiteFeatureTypeStyle> styleList = createLiteFeatureTypeStyles(layer, featureStyles, schema, mapScale, screenSize); return styleList; }
private static ArrayList<LiteFeatureTypeStyle> createLiteFeatureTypeStyles(Layer layer, List<FeatureTypeStyle> featureStyles, FeatureType ftype, double scaleDenominator, Rectangle screenSize) throws IOException { ArrayList<LiteFeatureTypeStyle> result = new ArrayList<LiteFeatureTypeStyle>(); LiteFeatureTypeStyle lfts; for (FeatureTypeStyle fts : featureStyles) { if (isFeatureTypeStyleActive(ftype, fts)) { // DJB: this FTS is compatible with this FT. // get applicable rules at the current scale List<Rule>[] splittedRules = splitRules(fts, scaleDenominator); List<Rule> ruleList = splittedRules[0]; List<Rule> elseRuleList = splittedRules[1]; // if none, skip it if ((ruleList.isEmpty()) && (elseRuleList.isEmpty())) continue; // we can optimize this one and draw directly on the graphics, assuming // there is no composition Graphics2D graphics = null; lfts = new LiteFeatureTypeStyle(layer, graphics, ruleList, elseRuleList, fts.getTransformation()); result.add(lfts); } } return result; }
private static List<Rule>[] splitRules( final FeatureTypeStyle fts, final double scaleDenominator) { List<Rule> ruleList = new ArrayList<Rule>(); List<Rule> elseRuleList = new ArrayList<Rule>(); ruleList = new ArrayList<>(); elseRuleList = new ArrayList<>(); for (Rule r : fts.rules()) { if (isWithInScale(r, scaleDenominator)) { if (r.isElseFilter()) { elseRuleList.add(r); } else { ruleList.add(r); } } } @SuppressWarnings("unchecked") List<Rule>[] ret = new List[] {ruleList, elseRuleList}; return ret; }
final Rectangle screenSize = new Rectangle(mapContent.getMapWidth(), mapContent.getMapHeight()); final double mapScale = getMapScale(mapContent, renderingArea); double[] pixelSize = getPixelSize(renderingArea, screenSize); getFeatureStyles(layer, screenSize, mapScale, schema); final int bufferScreen = getComputedBuffer(requestBufferScreen, styleList); try { styleQuery = VectorMapRenderUtils.getStyleQuery( featureSource, styleList, queryArea, screenSize, geometryDescriptor); } catch (IllegalFilterException | FactoryException e1) {
List<LiteFeatureTypeStyle> styleList = createLiteFeatureTypeStyles(layer, featureStyles, schema, mapScale, screenSize); Query styleQuery; try { styleQuery = VectorMapRenderUtils.getStyleQuery(featureSource, styleList, renderingArea, screenSize, geometryDescriptor); } catch (IllegalFilterException | FactoryException e1) {
@Test public void testNoRulesByScale() throws Exception { // ----------- normal case, there is a rule that draws // this has map scale denominator of about 1:7,700, rule will draw ReferencedEnvelope mapBounds = new ReferencedEnvelope(0, 0.005, 0, 0.005, WGS84); Rectangle renderingArea = new Rectangle(256, 256); WMSMapContent mapContent = createMapContent(mapBounds, renderingArea, 0, scaleDependentPolygonLayer); Query q = getStyleQuery(scaleDependentPolygonLayer, mapContent); assertTrue(q.getFilter() != Filter.EXCLUDE); // ------------------- abnormal case, there are no rules in the sld that will draw // this has map scale denominator of about 1:77k, rule will NOT draw mapBounds = new ReferencedEnvelope(0, 0.05, 0, 0.05, WGS84); renderingArea = new Rectangle(256, 256); mapContent = createMapContent(mapBounds, renderingArea, 0, scaleDependentPolygonLayer); q = getStyleQuery(scaleDependentPolygonLayer, mapContent); assertTrue(q.getFilter() == Filter.EXCLUDE); }
reprojectSpatialFilter( queryArea.getCoordinateReferenceSystem(), schema, processRuleForQuery(styles, query); } catch (Exception e) { throw Throwables.propagate(e);
context.sourceToTargetCrs = buildTransform(sourceCrs, mapCrs); context.targetToScreen = ProjectiveTransform.create(context.worldToScreen); context.sourceToScreen = ConcatenatedTransform.create(context.sourceToTargetCrs,
processRuleForQuery(styles, query); } catch (Exception e) { throw Throwables.propagate(e);
VectorMapRenderUtils.getComputedBuffer( mapContent.getBuffer(), VectorMapRenderUtils.getFeatureStyles( layer, paintArea, VectorMapRenderUtils.getMapScale(mapContent, renderingArea), (FeatureType) featureSource.getSchema())); Pipeline pipeline = getPipeline(mapContent, renderingArea, paintArea, sourceCrs, buffer); Query query = getStyleQuery(layer, mapContent); query.getHints().remove(Hints.SCREENMAP);
.build(); Query query = getStyleQuery(layer, mapContent); query.getHints().remove(Hints.SCREENMAP);
context.sourceToTargetCrs = buildTransform(sourceCrs, mapCrs); context.targetToScreen = ProjectiveTransform.create(context.worldToScreen); context.sourceToScreen =
static ArrayList<LiteFeatureTypeStyle> createLiteFeatureTypeStyles( Layer layer, List<FeatureTypeStyle> featureStyles, FeatureType ftype, double scaleDenominator, Rectangle screenSize) throws IOException { ArrayList<LiteFeatureTypeStyle> result = new ArrayList<LiteFeatureTypeStyle>(); LiteFeatureTypeStyle lfts; for (FeatureTypeStyle fts : featureStyles) { if (isFeatureTypeStyleActive(ftype, fts)) { // DJB: this FTS is compatible with this FT. // get applicable rules at the current scale List<Rule>[] splittedRules = splitRules(fts, scaleDenominator); List<Rule> ruleList = splittedRules[0]; List<Rule> elseRuleList = splittedRules[1]; // if none, skip it if ((ruleList.isEmpty()) && (elseRuleList.isEmpty())) continue; // we can optimize this one and draw directly on the graphics, assuming // there is no composition Graphics2D graphics = null; lfts = new LiteFeatureTypeStyle( layer, graphics, ruleList, elseRuleList, fts.getTransformation()); result.add(lfts); } } return result; }
private static List<Rule>[] splitRules(final FeatureTypeStyle fts, final double scaleDenominator) { List<Rule> ruleList = new ArrayList<Rule>(); List<Rule> elseRuleList = new ArrayList<Rule>(); ruleList = new ArrayList<>(); elseRuleList = new ArrayList<>(); for (Rule r : fts.rules()) { if (isWithInScale(r, scaleDenominator)) { if (r.isElseFilter()) { elseRuleList.add(r); } else { ruleList.add(r); } } } @SuppressWarnings("unchecked") List<Rule>[] ret = new List[] { ruleList, elseRuleList }; return ret; }