Search in sources :

Example 1 with IllegalFilterException

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;
}
Also used : GeometryDescriptor(org.opengis.feature.type.GeometryDescriptor) Filter(org.opengis.filter.Filter) BBOX(org.opengis.filter.spatial.BBOX) AttributeDescriptor(org.opengis.feature.type.AttributeDescriptor) IllegalFilterException(org.geotools.filter.IllegalFilterException)

Aggregations

IllegalFilterException (org.geotools.filter.IllegalFilterException)1 AttributeDescriptor (org.opengis.feature.type.AttributeDescriptor)1 GeometryDescriptor (org.opengis.feature.type.GeometryDescriptor)1 Filter (org.opengis.filter.Filter)1 BBOX (org.opengis.filter.spatial.BBOX)1