use of org.apache.jena.geosparql.spatial.SearchEnvelope in project jena by apache.
the class GenericCardinalGeomPropertyFunction method checkSecondFilter.
@Override
protected boolean checkSecondFilter(SpatialArguments spatialArguments, GeometryWrapper targetGeometryWrapper) {
// Test Geometry against the Geometry from Object to see if it is a success.
// Used when checking against bound Subjects.
// Cardinal functions only check against the search envelope.
SearchEnvelope searchEnvelope = spatialArguments.getSearchEnvelope();
try {
GeometryWrapper srs = targetGeometryWrapper.convertSRS(searchEnvelope.getSrsURI());
Envelope targetEnvelope = srs.getEnvelope();
boolean result = searchEnvelope.check(targetEnvelope);
return result;
} catch (FactoryException | MismatchedDimensionException | TransformException ex) {
throw new ExprEvalException(ex.getMessage() + ": " + targetGeometryWrapper.asLiteral(), ex);
}
}
use of org.apache.jena.geosparql.spatial.SearchEnvelope in project jena by apache.
the class GenericCardinalGeomPropertyFunction method buildSearchEnvelope.
@Override
protected SearchEnvelope buildSearchEnvelope(GeometryWrapper geometryWrapper, SRSInfo indexSRSInfo) {
CardinalDirection direction = getCardinalDirection();
SearchEnvelope searchEnvelope = SearchEnvelope.build(geometryWrapper, indexSRSInfo, direction);
return searchEnvelope;
}
use of org.apache.jena.geosparql.spatial.SearchEnvelope in project jena by apache.
the class GenericSpatialGeomPropertyFunction method extractObjectArguments.
@Override
protected SpatialArguments extractObjectArguments(Node predicate, PropFuncArg object, SRSInfo indexSRSInfo) {
try {
// Check minimum arguments.
List<Node> objectArgs = object.getArgList();
if (objectArgs.size() < 1) {
throw new ExprEvalException(FmtUtils.stringForNode(predicate) + ": Minimum of 1 arguments.");
} else if (objectArgs.size() > 2) {
throw new ExprEvalException(FmtUtils.stringForNode(predicate) + ": Maximum of 2 arguments.");
}
Node geomLit = object.getArg(GEOM_POS);
// Find the limit.
int limit;
if (objectArgs.size() > LIMIT_POS) {
NodeValue limitNode = NodeValue.makeNode(objectArgs.get(LIMIT_POS));
if (!limitNode.isInteger()) {
throw new ExprEvalException("Not an integer: " + FmtUtils.stringForNode(limitNode.asNode()));
}
limit = limitNode.getInteger().intValue();
} else {
limit = DEFAULT_LIMIT;
}
GeometryWrapper geometryWrapper = GeometryWrapper.extract(geomLit);
SearchEnvelope searchEnvelope = buildSearchEnvelope(geometryWrapper, indexSRSInfo);
return new SpatialArguments(limit, geometryWrapper, searchEnvelope);
} catch (DatatypeFormatException ex) {
throw new ExprEvalException(ex.getMessage(), ex);
}
}
use of org.apache.jena.geosparql.spatial.SearchEnvelope in project jena by apache.
the class EastGeomPFTest method testBuildSearchEnvelope.
/**
* Test of buildSearchEnvelope method, of class EastGeomPF.
*/
@Test
public void testBuildSearchEnvelope() {
GeometryWrapper geometryWrapper = SpatialIndexTestData.PARIS_GEOMETRY_WRAPPER;
EastGeomPF instance = new EastGeomPF();
SearchEnvelope expResult = SearchEnvelope.build(geometryWrapper, SpatialIndexTestData.WGS_84_SRS_INFO, CardinalDirection.EAST);
SearchEnvelope result = instance.buildSearchEnvelope(geometryWrapper, SpatialIndexTestData.WGS_84_SRS_INFO);
assertEquals(expResult, result);
}
use of org.apache.jena.geosparql.spatial.SearchEnvelope in project jena by apache.
the class EastGeomPFTest method testCheckSearchEnvelope_no_wrap.
/**
* Test of checkSearchEnvelope method, of class EastGeomPF.
*/
@Test
public void testCheckSearchEnvelope_no_wrap() {
SpatialIndex spatialIndex = SpatialIndexTestData.createTestIndex();
// Search Envelope
GeometryWrapper geometryWrapper = SpatialIndexTestData.HONOLULU_GEOMETRY_WRAPPER;
EastGeomPF instance = new EastGeomPF();
// Needed to initialise the search.
SearchEnvelope searchEnvelope = instance.buildSearchEnvelope(geometryWrapper, SpatialIndexTestData.WGS_84_SRS_INFO);
HashSet<Resource> expResult = new HashSet<>(Arrays.asList(SpatialIndexTestData.LONDON_FEATURE, SpatialIndexTestData.HONOLULU_FEATURE, SpatialIndexTestData.NEW_YORK_FEATURE));
HashSet<Resource> result = searchEnvelope.check(spatialIndex);
assertEquals(expResult, result);
}
Aggregations