use of org.geotools.filter.IllegalFilterException in project polymap4-core by Polymap4.
the class FilterUtils method createBBoxFilters.
/**
* Creates the bounding box filters (one for each geometric attribute)
* needed to query a <code>MapLayer</code>'s feature source to return just
* the features for the target rendering extent
*
* @param schema the layer's feature source schema
* @param attributes set of needed attributes or null.
* @param bbox the expression holding the target rendering bounding box
* @return an or'ed list of bbox filters, one for each geometric attribute
* in <code>attributes</code>. If there are just one geometric
* attribute, just returns its corresponding
* <code>GeometryFilter</code>.
* @throws IllegalFilterException if something goes wrong creating the
* filter
*/
public static Filter createBBoxFilters(SimpleFeatureType schema, String[] attributes, Envelope bbox) throws IllegalFilterException {
if (attributes == null) {
List<AttributeDescriptor> ats = schema.getAttributeDescriptors();
int length = ats.size();
attributes = new String[length];
for (int t = 0; t < length; t++) {
attributes[t] = ats.get(t).getLocalName();
}
}
Filter filter = Filter.INCLUDE;
for (int j = 0; j < attributes.length; j++) {
AttributeDescriptor attType = schema.getDescriptor(attributes[j]);
if (attType == null) {
throw new IllegalFilterException(new StringBuffer("Could not find '").append(attributes[j] + "' in the FeatureType (").append(schema.getTypeName()).append(")").toString());
}
if (attType instanceof GeometryDescriptor) {
BBOX gfilter = filterFactory.bbox(attType.getLocalName(), bbox.getMinX(), bbox.getMinY(), bbox.getMaxX(), bbox.getMaxY(), null);
if (filter == Filter.INCLUDE) {
filter = gfilter;
} else {
filter = filterFactory.or(filter, gfilter);
}
}
}
return filter;
}
Aggregations