zoukankan      html  css  js  c++  java
  • geotools解析SLD中的elsefilter为什么里面的filter无效

    原因是在org.geotools.renderer.lite.StreamingRenderer中的process函数:

    /**
    * @param rf
    * @param feature
    * @param fts
    * @param layerId
    */
    private void process(RenderableFeature rf, LiteFeatureTypeStyle fts,
    NumberRange scaleRange, AffineTransform at,
    CoordinateReferenceSystem destinationCrs, String layerId)
    throws Exception {
    boolean doElse = true;
    Rule[] elseRuleList = fts.elseRules;
    Rule[] ruleList = fts.ruleList;
    Rule r;
    Filter filter;
    Graphics2D graphics = fts.graphics;
    // applicable rules
    final int length = ruleList.length;
    for (int t = 0; t < length; t++) {
    r = ruleList[t];
    filter = r.getFilter();

    if (filter == null || filter.evaluate(rf.content)) {
    doElse = false;
    processSymbolizers(graphics, rf, r.symbolizers(), scaleRange, at, destinationCrs, layerId);
    }
    }

    if (doElse) {
    final int elseLength = elseRuleList.length;
    for (int tt = 0; tt < elseLength; tt++) {
    r = elseRuleList[tt];

    //这里应该像上面一样再通过filter过滤一下:filter = r.getFilter();  if (filter == null || filter.evaluate(rf.content)) {}

    processSymbolizers(graphics, rf, r.symbolizers(), scaleRange,
    at, destinationCrs, layerId);

    }
    }
    }

  • 相关阅读:
    杭电2081
    杭电2083
    杭电2084
    3/5/2014 cfb 小心
    116
    uva10003
    10815
    127
    674
    uva 13598
  • 原文地址:https://www.cnblogs.com/yoyogis/p/4155227.html
Copyright © 2011-2022 走看看