CQL----sql字符串表达方式
Filter---过滤器表达方式
filter:
1,cqltofilter
Filter filter = CQL.toFilter(FilterCQLSample.LESS_FILTER_SAMPLE);---非中文
2,用FilterFactory filterFactory = CommonFactoryFinder.getFilterFactory(null);创建
tostring:
FilterToCQL toCQL = new FilterToCQL();
String output = filter.accept(toCQL, null).toString();
3,cqllist
List
4,在转化完成后直接用于feature即可
Filter filter = CQL.toFilter(filterStr); // filterStr形式 如 name='武汉大学' or code like 'tt123%'
SimpleFeatureCollection result = featureSource.getFeatures(filter);
Filter filter = CQL.toFilter(text.getText());
Query query = new Query(typeName, filter, new String[] {name});
SimpleFeatureCollection features = source.getFeatures(query);
cql:简单的非地理空间属性过滤
ecql:可以支持复杂的表达式,和空间函数关系
cql字符串解析成filter:
根据一系列初始化方法,在对应编译器中构建出由表达是符号转化的case key 根据对应case key对应的序号,找到对应的构建方法
compiler.compileFilter(); 根据key对应的编码找到具体build方法--CQLCompiler this.SearchCondition() jjtreeCloseNodeScope this.build(n) BooleanPrimary 等一系列初始化方法;
CQLParser --》 RoutineInvocationRelGeoOp ---》 AbstractFilterBuilder buildBbox
构建:
public DistanceBufferOperator buildSpatialDWithinFilter() throws CQLException {
String unit = this.resultStack.popStringValue();
double tolerance = this.resultStack.popDoubleValue();
Expression geom = this.resultStack.popExpression();
Expression property = this.resultStack.popExpression();
FilterFactory2 ff = (FilterFactory2)this.filterFactory;
return ff.dwithin(property, geom, tolerance, unit);
}