use of org.opengis.filter.LogicalOperator in project geotoolkit by Geomatys.
the class IntervalStyleBuilder method isIntervalStyle.
public boolean isIntervalStyle(final FeatureTypeStyle fts) {
if (fts.rules().isEmpty())
return false;
for (Rule r : fts.rules()) {
Filter f = r.getFilter();
if (f == null || r.isElseFilter())
return false;
if (r.symbolizers().size() != 1)
return false;
if (f.getOperatorType() == LogicalOperatorName.AND) {
LogicalOperator<Object> and = (LogicalOperator) f;
if (and.getOperands().size() != 2)
return false;
Filter<Object> op1 = and.getOperands().get(0);
Filter<Object> op2 = and.getOperands().get(1);
if (op2.getOperatorType() == ComparisonOperatorName.PROPERTY_IS_GREATER_THAN_OR_EQUAL_TO) {
// flip order
op1 = op2;
op2 = and.getOperands().get(0);
}
if (op1.getOperatorType() == ComparisonOperatorName.PROPERTY_IS_GREATER_THAN_OR_EQUAL_TO) {
BinaryComparisonOperator under = (BinaryComparisonOperator) op1;
Expression exp1 = under.getOperand1();
Expression exp2 = under.getOperand2();
if (exp1.getFunctionName().tip().toString().equals("Divide")) {
List parameters = exp1.getParameters();
if (!properties.contains(parameters.get(0)))
return false;
if (!properties.contains(parameters.get(1)))
return false;
} else if (exp1 instanceof ValueReference) {
ValueReference name = (ValueReference) exp1;
if (!properties.contains(name))
return false;
} else {
return false;
}
if (!(exp2 instanceof Literal)) {
return false;
}
if (op2.getOperatorType() == ComparisonOperatorName.PROPERTY_IS_LESS_THAN || op2.getOperatorType() == ComparisonOperatorName.PROPERTY_IS_LESS_THAN_OR_EQUAL_TO) {
BinaryComparisonOperator bc = (BinaryComparisonOperator) op2;
Expression ex1 = under.getOperand1();
Expression ex2 = under.getOperand2();
if (exp1.getFunctionName().tip().toString().equals("Divide")) {
List parameters = exp1.getParameters();
if (!properties.contains(parameters.get(0)))
return false;
if (!properties.contains(parameters.get(1)))
return false;
} else if (exp1 instanceof ValueReference) {
ValueReference name = (ValueReference) ex1;
if (!properties.contains(name))
return false;
} else {
return false;
}
if (!(ex2 instanceof Literal)) {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
template = r.symbolizers().get(0);
}
method = METHOD.MANUAL;
nbClasses = fts.rules().size() + 1;
return true;
}
use of org.opengis.filter.LogicalOperator in project geotoolkit by Geomatys.
the class OGC100Test method testFilterLogicalNot.
@Test
public void testFilterLogicalNot() throws JAXBException {
final Unmarshaller UNMARSHALLER = POOL.acquireUnmarshaller();
final Marshaller MARSHALLER = POOL.acquireMarshaller();
// Read test
Object obj = UNMARSHALLER.unmarshal(FILE_FIL_LOG_NOT);
assertNotNull(obj);
JAXBElement<? extends FilterType> jaxfilter = (JAXBElement<? extends FilterType>) obj;
assertNotNull(jaxfilter);
Filter filter = TRANSFORMER_GT.visitFilter(jaxfilter.getValue());
assertNotNull(filter);
LogicalOperator prop = (LogicalOperator) filter;
BinaryComparisonOperator subfilter = (BinaryComparisonOperator) prop.getOperands().get(0);
ValueReference left = (ValueReference) subfilter.getOperand1();
Literal right = (Literal) subfilter.getOperand2();
assertEquals(left.getXPath(), valueStr);
assertEquals(((Number) right.apply(null)).floatValue(), valueF, DELTA);
// write test
FilterType ft = TRANSFORMER_OGC.apply(filter);
assertNotNull(ft.getLogicOps());
LogicOpsType cot = ft.getLogicOps().getValue();
assertEquals(ft.getLogicOps().getName().getLocalPart(), OGCJAXBStatics.FILTER_LOGIC_NOT);
UnaryLogicOpType pibt = (UnaryLogicOpType) cot;
BinaryComparisonOpType leftoptype = (BinaryComparisonOpType) pibt.getComparisonOps().getValue();
PropertyNameType lf = (PropertyNameType) leftoptype.getExpression().get(0).getValue();
LiteralType rg = (LiteralType) leftoptype.getExpression().get(1).getValue();
assertEquals(valueStr, lf.getContent());
numberEquals(valueF, rg.getContent().get(0));
MARSHALLER.marshal(ft.getLogicOps(), TEST_FILE_FIL_LOG_NOT);
POOL.recycle(MARSHALLER);
POOL.recycle(UNMARSHALLER);
}
use of org.opengis.filter.LogicalOperator in project geotoolkit by Geomatys.
the class OGC110Test method testFilterLogicalOr.
@Test
public void testFilterLogicalOr() throws JAXBException, NoSuchAuthorityCodeException, FactoryException {
final Unmarshaller UNMARSHALLER = POOL.acquireUnmarshaller();
final Marshaller MARSHALLER = POOL.acquireMarshaller();
// Read test
Object obj = UNMARSHALLER.unmarshal(FILE_FIL_LOG_OR);
assertNotNull(obj);
JAXBElement<? extends FilterType> jaxfilter = (JAXBElement<? extends FilterType>) obj;
assertNotNull(jaxfilter);
Filter filter = TRANSFORMER_GT.visitFilter(jaxfilter.getValue());
assertNotNull(filter);
LogicalOperator prop = (LogicalOperator) filter;
BinaryComparisonOperator leftop = (BinaryComparisonOperator) prop.getOperands().get(0);
BinaryComparisonOperator rightop = (BinaryComparisonOperator) prop.getOperands().get(1);
ValueReference left = (ValueReference) leftop.getOperand1();
Literal right = (Literal) leftop.getOperand2();
assertEquals(left.getXPath(), valueStr);
assertEquals(((Number) right.apply(null)).floatValue(), 455f, DELTA);
left = (ValueReference) rightop.getOperand1();
right = (Literal) rightop.getOperand2();
assertEquals(left.getXPath(), valueStr);
assertEquals(((Number) right.apply(null)).floatValue(), 457f, DELTA);
// write test
FilterType ft = TRANSFORMER_OGC.apply(filter);
assertNotNull(ft.getLogicOps());
LogicOpsType cot = ft.getLogicOps().getValue();
assertEquals(ft.getLogicOps().getName().getLocalPart(), OGCJAXBStatics.FILTER_LOGIC_OR);
BinaryLogicOpType pibt = (BinaryLogicOpType) cot;
BinaryComparisonOpType leftoptype = (BinaryComparisonOpType) pibt.getComparisonOps().get(0).getValue();
BinaryComparisonOpType rightoptype = (BinaryComparisonOpType) pibt.getComparisonOps().get(1).getValue();
PropertyNameType lf = (PropertyNameType) leftoptype.getExpression().get(0).getValue();
LiteralType rg = (LiteralType) leftoptype.getExpression().get(1).getValue();
assertEquals(valueStr, lf.getContent());
numberEquals(455, rg.getContent().get(0));
lf = (PropertyNameType) rightoptype.getExpression().get(0).getValue();
rg = (LiteralType) rightoptype.getExpression().get(1).getValue();
assertEquals(valueStr, lf.getContent());
numberEquals(457, rg.getContent().get(0));
MARSHALLER.marshal(ft.getLogicOps(), TEST_FILE_FIL_LOG_OR);
POOL.recycle(MARSHALLER);
POOL.recycle(UNMARSHALLER);
}
use of org.opengis.filter.LogicalOperator in project geotoolkit by Geomatys.
the class OGC110Test method testFilterLogicalAnd.
// //////////////////////////////////////////////////////////////////////////
// JAXB TEST MARSHELLING AND UNMARSHELLING FOR LOGIC FILTERS ///////////////
// //////////////////////////////////////////////////////////////////////////
@Test
public void testFilterLogicalAnd() throws JAXBException, NoSuchAuthorityCodeException, FactoryException {
final Unmarshaller UNMARSHALLER = POOL.acquireUnmarshaller();
final Marshaller MARSHALLER = POOL.acquireMarshaller();
// Read test
Object obj = UNMARSHALLER.unmarshal(FILE_FIL_LOG_AND);
assertNotNull(obj);
JAXBElement<? extends FilterType> jaxfilter = (JAXBElement<? extends FilterType>) obj;
assertNotNull(jaxfilter);
Filter filter = TRANSFORMER_GT.visitFilter(jaxfilter.getValue());
assertNotNull(filter);
LogicalOperator prop = (LogicalOperator) filter;
BinaryComparisonOperator leftop = (BinaryComparisonOperator) prop.getOperands().get(0);
BinaryComparisonOperator rightop = (BinaryComparisonOperator) prop.getOperands().get(1);
ValueReference left = (ValueReference) leftop.getOperand1();
Literal right = (Literal) leftop.getOperand2();
assertEquals(left.getXPath(), valueStr);
assertEquals(((Number) right.apply(null)).floatValue(), 455f, DELTA);
left = (ValueReference) rightop.getOperand1();
right = (Literal) rightop.getOperand2();
assertEquals(left.getXPath(), valueStr);
assertEquals(((Number) right.apply(null)).floatValue(), 457f, DELTA);
// write test
FilterType ft = TRANSFORMER_OGC.apply(filter);
assertNotNull(ft.getLogicOps());
LogicOpsType cot = ft.getLogicOps().getValue();
assertEquals(ft.getLogicOps().getName().getLocalPart(), OGCJAXBStatics.FILTER_LOGIC_AND);
BinaryLogicOpType pibt = (BinaryLogicOpType) cot;
BinaryComparisonOpType leftoptype = (BinaryComparisonOpType) pibt.getComparisonOps().get(0).getValue();
BinaryComparisonOpType rightoptype = (BinaryComparisonOpType) pibt.getComparisonOps().get(1).getValue();
PropertyNameType lf = (PropertyNameType) leftoptype.getExpression().get(0).getValue();
LiteralType rg = (LiteralType) leftoptype.getExpression().get(1).getValue();
assertEquals(valueStr, lf.getContent());
numberEquals(455, rg.getContent().get(0));
lf = (PropertyNameType) rightoptype.getExpression().get(0).getValue();
rg = (LiteralType) rightoptype.getExpression().get(1).getValue();
assertEquals(valueStr, lf.getContent());
numberEquals(457, rg.getContent().get(0));
MARSHALLER.marshal(ft.getLogicOps(), TEST_FILE_FIL_LOG_AND);
POOL.recycle(MARSHALLER);
POOL.recycle(UNMARSHALLER);
}
use of org.opengis.filter.LogicalOperator in project geotoolkit by Geomatys.
the class FilterToOGC110Converter method visit.
public JAXBElement<?> visit(final Filter filter) {
if (filter.equals(Filter.include())) {
return null;
}
if (filter.equals(Filter.exclude())) {
return null;
}
final CodeList<?> type = filter.getOperatorType();
if (filter instanceof BetweenComparisonOperator) {
final BetweenComparisonOperator pib = (BetweenComparisonOperator) filter;
final LowerBoundaryType lbt = ogc_factory.createLowerBoundaryType();
lbt.setExpression(extract(pib.getLowerBoundary()));
final UpperBoundaryType ubt = ogc_factory.createUpperBoundaryType();
ubt.setExpression(extract(pib.getUpperBoundary()));
final PropertyIsBetweenType bot = new PropertyIsBetweenType(extract(pib.getExpression()), lbt, ubt);
return ogc_factory.createPropertyIsBetween(bot);
} else if (type == ComparisonOperatorName.PROPERTY_IS_EQUAL_TO) {
final BinaryComparisonOperator pit = (BinaryComparisonOperator) filter;
final PropertyIsEqualToType bot = ogc_factory.createPropertyIsEqualToType();
bot.getExpression().add(extract(pit.getOperand1()));
bot.getExpression().add(extract(pit.getOperand2()));
return ogc_factory.createPropertyIsEqualTo(bot);
} else if (type == ComparisonOperatorName.PROPERTY_IS_GREATER_THAN) {
final BinaryComparisonOperator pit = (BinaryComparisonOperator) filter;
final PropertyIsGreaterThanType bot = ogc_factory.createPropertyIsGreaterThanType();
bot.getExpression().add(extract(pit.getOperand1()));
bot.getExpression().add(extract(pit.getOperand2()));
return ogc_factory.createPropertyIsGreaterThan(bot);
} else if (type == ComparisonOperatorName.PROPERTY_IS_GREATER_THAN_OR_EQUAL_TO) {
final BinaryComparisonOperator pit = (BinaryComparisonOperator) filter;
final PropertyIsGreaterThanOrEqualToType bot = ogc_factory.createPropertyIsGreaterThanOrEqualToType();
bot.getExpression().add(extract(pit.getOperand1()));
bot.getExpression().add(extract(pit.getOperand2()));
return ogc_factory.createPropertyIsGreaterThanOrEqualTo(bot);
} else if (type == ComparisonOperatorName.PROPERTY_IS_LESS_THAN) {
final BinaryComparisonOperator pit = (BinaryComparisonOperator) filter;
final PropertyIsLessThanType bot = ogc_factory.createPropertyIsLessThanType();
bot.getExpression().add(extract(pit.getOperand1()));
bot.getExpression().add(extract(pit.getOperand2()));
return ogc_factory.createPropertyIsLessThan(bot);
} else if (type == ComparisonOperatorName.PROPERTY_IS_LESS_THAN_OR_EQUAL_TO) {
final BinaryComparisonOperator pit = (BinaryComparisonOperator) filter;
final PropertyIsLessThanOrEqualToType bot = ogc_factory.createPropertyIsLessThanOrEqualToType();
bot.getExpression().add(extract(pit.getOperand1()));
bot.getExpression().add(extract(pit.getOperand2()));
return ogc_factory.createPropertyIsLessThanOrEqualTo(bot);
} else if (filter instanceof LikeOperator) {
final LikeOperator pis = (LikeOperator) filter;
final List<Expression> expressions = filter.getExpressions();
final PropertyIsLikeType bot = ogc_factory.createPropertyIsLikeType();
bot.setEscapeChar(String.valueOf(pis.getEscapeChar()));
final LiteralType lt = ogc_factory.createLiteralType();
lt.setContent(((Literal) expressions.get(1)).getValue());
bot.setLiteral(lt.getStringValue());
final Expression expression = expressions.get(0);
if (!(expression instanceof ValueReference)) {
throw new IllegalArgumentException("LikeOperator can support ValueReference only, but was a " + expression);
}
final PropertyNameType pnt = (PropertyNameType) extract(expression).getValue();
bot.setPropertyName(pnt);
bot.setSingleChar(String.valueOf(pis.getSingleChar()));
bot.setWildCard(String.valueOf(pis.getWildCard()));
return ogc_factory.createPropertyIsLike(bot);
} else if (type == ComparisonOperatorName.PROPERTY_IS_NOT_EQUAL_TO) {
final BinaryComparisonOperator pit = (BinaryComparisonOperator) filter;
final PropertyIsNotEqualToType bot = ogc_factory.createPropertyIsNotEqualToType();
bot.getExpression().add(extract(pit.getOperand1()));
bot.getExpression().add(extract(pit.getOperand2()));
return ogc_factory.createPropertyIsNotEqualTo(bot);
} else if (filter instanceof NullOperator) {
final NullOperator pis = (NullOperator) filter;
final PropertyIsNullType bot = ogc_factory.createPropertyIsNullType();
final Object obj = extract((Expression) pis.getExpressions().get(0)).getValue();
bot.setPropertyName((PropertyNameType) obj);
return ogc_factory.createPropertyIsNull(bot);
} else if (type == LogicalOperatorName.AND) {
final LogicalOperator and = (LogicalOperator) filter;
final List<JAXBElement> children = new ArrayList<>();
for (final Filter f : (List<Filter>) and.getOperands()) {
final JAXBElement<? extends LogicOpsType> ele = (JAXBElement<? extends LogicOpsType>) visit(f);
if (ele != null) {
children.add(ele);
}
}
return ogc_factory.createAnd(new AndType(children.toArray()));
} else if (type == LogicalOperatorName.OR) {
final LogicalOperator or = (LogicalOperator) filter;
final List<JAXBElement> children = new ArrayList<>();
for (final Filter f : (List<Filter>) or.getOperands()) {
final JAXBElement<? extends LogicOpsType> ele = (JAXBElement<? extends LogicOpsType>) visit(f);
if (ele != null) {
children.add(ele);
}
}
return ogc_factory.createOr(new OrType(children.toArray()));
} else if (type == LogicalOperatorName.NOT) {
final LogicalOperator not = (LogicalOperator) filter;
JAXBElement<?> sf = visit((Filter) not.getOperands().get(0));
return ogc_factory.createNot(new NotType(sf.getValue()));
} else if (filter instanceof ResourceId) {
throw new IllegalArgumentException("Not parsed yet : " + filter);
} else if (type == SpatialOperatorName.BBOX) {
final BBOX bbox = BBOX.wrap((BinarySpatialOperator) filter);
final Expression left = bbox.getOperand1();
final Expression right = bbox.getOperand2();
final String property;
final double minx;
final double maxx;
final double miny;
final double maxy;
String srs;
if (left instanceof ValueReference) {
property = ((ValueReference) left).getXPath();
final Object objGeom = ((Literal) right).getValue();
if (objGeom instanceof org.opengis.geometry.Envelope) {
final org.opengis.geometry.Envelope env = (org.opengis.geometry.Envelope) objGeom;
minx = env.getMinimum(0);
maxx = env.getMaximum(0);
miny = env.getMinimum(1);
maxy = env.getMaximum(1);
try {
srs = IdentifiedObjects.lookupURN(env.getCoordinateReferenceSystem(), null);
if (srs == null) {
srs = ReferencingUtilities.lookupIdentifier(env.getCoordinateReferenceSystem(), true);
}
} catch (FactoryException ex) {
throw new IllegalArgumentException("invalid bbox element : " + filter + " " + ex.getMessage(), ex);
}
} else if (objGeom instanceof Geometry) {
final Geometry geom = (Geometry) objGeom;
final Envelope env = geom.getEnvelopeInternal();
minx = env.getMinX();
maxx = env.getMaxX();
miny = env.getMinY();
maxy = env.getMaxY();
srs = SRIDGenerator.toSRS(geom.getSRID(), SRIDGenerator.Version.V1);
} else {
throw new IllegalArgumentException("invalide bbox element : " + filter);
}
} else if (right instanceof ValueReference) {
property = ((ValueReference) right).getXPath();
final Object objGeom = ((Literal) left).getValue();
if (objGeom instanceof org.opengis.geometry.Envelope) {
final org.opengis.geometry.Envelope env = (org.opengis.geometry.Envelope) objGeom;
minx = env.getMinimum(0);
maxx = env.getMaximum(0);
miny = env.getMinimum(1);
maxy = env.getMaximum(1);
try {
srs = IdentifiedObjects.lookupURN(env.getCoordinateReferenceSystem(), null);
} catch (FactoryException ex) {
throw new IllegalArgumentException("invalide bbox element : " + filter + " " + ex.getMessage(), ex);
}
} else if (objGeom instanceof Geometry) {
final Geometry geom = (Geometry) objGeom;
final Envelope env = geom.getEnvelopeInternal();
minx = env.getMinX();
maxx = env.getMaxX();
miny = env.getMinY();
maxy = env.getMaxY();
srs = SRIDGenerator.toSRS(geom.getSRID(), SRIDGenerator.Version.V1);
} else {
throw new IllegalArgumentException("invalide bbox element : " + filter);
}
} else {
throw new IllegalArgumentException("invalide bbox element : " + filter);
}
final BBOXType bbtype = new BBOXType(property, minx, miny, maxx, maxy, srs);
return ogc_factory.createBBOX(bbtype);
} else if (filter instanceof ResourceId) {
// todo OGC filter can not handle ID when we are inside another filter type
// so here we make a small tric to change an id filter in a serie of propertyequal filter
// this is not really legal but we dont have the choice here
// we should propose an evolution of ogc filter do consider id filter as a comparison filter
final ValueReference n = FF.property(AttributeConvention.IDENTIFIER);
String ident = ((ResourceId) filter).getIdentifier();
return visit(FF.equal(n, FF.literal(ident)));
} else if (filter instanceof SpatialOperator) {
final BinarySpatialOperator spatialOp = (BinarySpatialOperator) filter;
Expression exp1 = spatialOp.getOperand1();
Expression exp2 = spatialOp.getOperand2();
if (!(exp1 instanceof ValueReference)) {
// flip order
final Expression ex = exp1;
exp1 = exp2;
exp2 = ex;
}
if (!(exp1 instanceof ValueReference)) {
throw new IllegalArgumentException("Filter can not be transformed in wml filter, " + "expression are not of the requiered type ");
}
final JAXBElement<PropertyNameType> pnt = (JAXBElement<PropertyNameType>) extract(exp1);
final JAXBElement<EnvelopeType> jaxEnv;
final JAXBElement<? extends AbstractGeometryType> jaxGeom;
final Object geom = ((Literal) exp2).getValue();
if (geom instanceof Geometry) {
final Geometry jts = (Geometry) geom;
final String srid = SRIDGenerator.toSRS(jts.getSRID(), SRIDGenerator.Version.V1);
CoordinateReferenceSystem crs;
try {
crs = CRS.forCode(srid);
} catch (Exception ex) {
Logger.getLogger("org.geotoolkit.sld.xml").log(Level.WARNING, null, ex);
crs = null;
}
final AbstractGeometryType gt = GMLUtilities.getGMLFromISO(JTSUtils.toISO(jts, crs));
// TODO use gml method to return any JAXBElement
if (gt instanceof PointType) {
jaxGeom = gml_factory.createPoint((PointType) gt);
} else if (gt instanceof CurveType) {
jaxGeom = gml_factory.createCurve((CurveType) gt);
} else if (gt instanceof LineStringType) {
jaxGeom = gml_factory.createLineString((LineStringType) gt);
} else if (gt instanceof PolygonType) {
jaxGeom = gml_factory.createPolygon((PolygonType) gt);
} else if (gt instanceof MultiPolygonType) {
jaxGeom = gml_factory.createMultiPolygon((MultiPolygonType) gt);
} else if (gt instanceof MultiLineStringType) {
jaxGeom = gml_factory.createMultiLineString((MultiLineStringType) gt);
} else if (gt instanceof MultiCurveType) {
jaxGeom = gml_factory.createMultiLineString((MultiLineStringType) gt);
} else if (gt instanceof MultiPointType) {
jaxGeom = gml_factory.createMultiLineString((MultiLineStringType) gt);
} else if (gt instanceof MultiGeometryType) {
jaxGeom = gml_factory.createMultiGeometry((MultiGeometryType) gt);
} else if (gt instanceof PolyhedralSurfaceType) {
jaxGeom = gml_factory.createPolyhedralSurface((PolyhedralSurfaceType) gt);
} else if (gt != null) {
throw new IllegalArgumentException("unexpected Geometry type:" + gt.getClass().getName());
} else {
jaxGeom = null;
}
jaxEnv = null;
} else if (geom instanceof org.opengis.geometry.Geometry) {
final AbstractGeometryType gt = GMLUtilities.getGMLFromISO((org.opengis.geometry.Geometry) geom);
// TODO use gml method to return any JAXBElement
if (gt instanceof PointType) {
jaxGeom = gml_factory.createPoint((PointType) gt);
} else if (gt instanceof CurveType) {
jaxGeom = gml_factory.createCurve((CurveType) gt);
} else if (gt instanceof LineStringType) {
jaxGeom = gml_factory.createLineString((LineStringType) gt);
} else if (gt instanceof PolygonType) {
jaxGeom = gml_factory.createPolygon((PolygonType) gt);
} else if (gt instanceof MultiPolygonType) {
jaxGeom = gml_factory.createMultiPolygon((MultiPolygonType) gt);
} else if (gt instanceof MultiLineStringType) {
jaxGeom = gml_factory.createMultiLineString((MultiLineStringType) gt);
} else if (gt instanceof MultiCurveType) {
jaxGeom = gml_factory.createMultiLineString((MultiLineStringType) gt);
} else if (gt instanceof MultiPointType) {
jaxGeom = gml_factory.createMultiLineString((MultiLineStringType) gt);
} else if (gt instanceof MultiGeometryType) {
jaxGeom = gml_factory.createMultiGeometry((MultiGeometryType) gt);
} else if (gt instanceof PolyhedralSurfaceType) {
jaxGeom = gml_factory.createPolyhedralSurface((PolyhedralSurfaceType) gt);
} else if (gt != null) {
throw new IllegalArgumentException("unexpected Geometry type:" + gt.getClass().getName());
} else {
jaxGeom = null;
}
jaxEnv = null;
} else if (geom instanceof org.opengis.geometry.Envelope) {
final org.opengis.geometry.Envelope genv = (org.opengis.geometry.Envelope) geom;
EnvelopeType ee = gml_factory.createEnvelopeType();
try {
ee.setSrsName(IdentifiedObjects.lookupURN(genv.getCoordinateReferenceSystem(), null));
} catch (FactoryException ex) {
Logger.getLogger("org.geotoolkit.sld.xml").log(Level.WARNING, null, ex);
}
ee.setLowerCorner(new DirectPositionType(genv.getLowerCorner()));
ee.setUpperCorner(new DirectPositionType(genv.getUpperCorner()));
jaxGeom = null;
jaxEnv = gml_factory.createEnvelope(ee);
} else {
throw new IllegalArgumentException("Type is not geometric or envelope.");
}
if (type == DistanceOperatorName.BEYOND) {
final BeyondType jaxelement = ogc_factory.createBeyondType();
jaxelement.setAbstractGeometry(jaxGeom);
jaxelement.setPropertyName(pnt.getValue());
return ogc_factory.createBeyond(jaxelement);
} else if (type == SpatialOperatorName.CONTAINS) {
final ContainsType jaxelement = ogc_factory.createContainsType();
jaxelement.setAbstractGeometry(jaxGeom);
jaxelement.setEnvelope(jaxEnv);
jaxelement.setPropertyName(pnt);
return ogc_factory.createContains(jaxelement);
} else if (type == SpatialOperatorName.CROSSES) {
final CrossesType jaxelement = ogc_factory.createCrossesType();
jaxelement.setAbstractGeometry(jaxGeom);
jaxelement.setEnvelope(jaxEnv);
jaxelement.setPropertyName(pnt);
return ogc_factory.createCrosses(jaxelement);
} else if (type == DistanceOperatorName.WITHIN) {
final DWithinType jaxelement = ogc_factory.createDWithinType();
jaxelement.setAbstractGeometry(jaxGeom);
jaxelement.setPropertyName(pnt.getValue());
return ogc_factory.createDWithin(jaxelement);
} else if (type == SpatialOperatorName.DISJOINT) {
final DisjointType jaxelement = ogc_factory.createDisjointType();
jaxelement.setAbstractGeometry(jaxGeom);
jaxelement.setEnvelope(jaxEnv);
jaxelement.setPropertyName(pnt);
return ogc_factory.createDisjoint(jaxelement);
} else if (type == SpatialOperatorName.EQUALS) {
final EqualsType jaxelement = ogc_factory.createEqualsType();
jaxelement.setAbstractGeometry(jaxGeom);
jaxelement.setEnvelope(jaxEnv);
jaxelement.setPropertyName(pnt);
return ogc_factory.createEquals(jaxelement);
} else if (type == SpatialOperatorName.INTERSECTS) {
final IntersectsType jaxelement = ogc_factory.createIntersectsType();
jaxelement.setAbstractGeometry(jaxGeom);
jaxelement.setEnvelope(jaxEnv);
jaxelement.setPropertyName(pnt);
return ogc_factory.createIntersects(jaxelement);
} else if (type == SpatialOperatorName.OVERLAPS) {
final OverlapsType jaxelement = new OverlapsType();
jaxelement.setAbstractGeometry(jaxGeom);
jaxelement.setEnvelope(jaxEnv);
jaxelement.setPropertyName(pnt);
return ogc_factory.createOverlaps(jaxelement);
} else if (type == SpatialOperatorName.TOUCHES) {
final TouchesType jaxelement = ogc_factory.createTouchesType();
jaxelement.setAbstractGeometry(jaxGeom);
jaxelement.setEnvelope(jaxEnv);
jaxelement.setPropertyName(pnt);
return ogc_factory.createTouches(jaxelement);
} else if (type == SpatialOperatorName.WITHIN) {
final WithinType jaxelement = ogc_factory.createWithinType();
jaxelement.setAbstractGeometry(jaxGeom);
jaxelement.setEnvelope(jaxEnv);
jaxelement.setPropertyName(pnt);
return ogc_factory.createWithin(jaxelement);
} else {
throw new IllegalArgumentException("Unknowed filter element : " + filter + " class :" + filter.getClass());
}
} else {
throw new IllegalArgumentException("Unknowed filter element : " + filter + " class :" + filter.getClass());
}
}
Aggregations