use of org.geotools.filter.spatial.DWithinImpl in project ddf by codice.
the class OpenSearchQueryTest method testSpatialDistanceFilter.
@Test
public void testSpatialDistanceFilter() throws Exception {
String lon = "10";
String lat = "20";
String radius = "5000";
OpenSearchQuery query = new OpenSearchQuery(null, 0, 10, "relevance", "desc", 30000, FILTER_BUILDER);
query.addSpatialDistanceFilter(lon, lat, radius);
Filter filter = query.getFilter();
// String filterXml = getFilterAsXml( filter );
VerificationVisitor verificationVisitor = new VerificationVisitor();
filter.accept(verificationVisitor, null);
HashMap<String, FilterStatus> map = (HashMap<String, FilterStatus>) verificationVisitor.getMap();
List<Filter> filters = getFilters(map, DWithinImpl.class.getName());
assertEquals(1, filters.size());
DWithinImpl dwithinFilter = (DWithinImpl) filters.get(0);
// The geometric point is wrapped in a <Literal> element, so have to
// get geometry expression as literal and then evaluate it to get the
// geometry.
// Example:
// <ogc:Literal>org.geotools.geometry.jts.spatialschema.geometry.primitive.PointImpl@dc33f184</ogc:Literal>
Literal literalWrapper = (Literal) dwithinFilter.getExpression2();
// Luckily we know what type the geometry expression should be, so we can cast it
PointImpl point = (PointImpl) literalWrapper.evaluate(null);
double[] coords = point.getCentroid().getCoordinate();
LOGGER.debug("coords[0] = {}, coords[1] = {}", coords[0], coords[1]);
assertEquals(Double.parseDouble(lon), coords[0], DOUBLE_DELTA);
assertEquals(Double.parseDouble(lat), coords[1], DOUBLE_DELTA);
LOGGER.debug("dwithinFilter.getDistance() = {}", dwithinFilter.getDistance());
assertEquals(Double.parseDouble(radius), dwithinFilter.getDistance(), DOUBLE_DELTA);
}
Aggregations