use of org.apache.jena.geosparql.spatial.property_functions.SpatialArguments in project jena by apache.
the class GenericSpatialBoxPropertyFunction method extractObjectArguments.
@Override
protected SpatialArguments extractObjectArguments(Node predicate, PropFuncArg object, SRSInfo indexSRSInfo) {
try {
// Check minimum arguments.
List<Node> objectArgs = object.getArgList();
if (objectArgs.size() < 4) {
throw new ExprEvalException(FmtUtils.stringForNode(predicate) + ": Minimum of 4 arguments.");
} else if (objectArgs.size() > 5) {
throw new ExprEvalException(FmtUtils.stringForNode(predicate) + ": Maximum of 5 arguments.");
}
Node latMin = objectArgs.get(LAT_MIN_POS);
Node lonMin = objectArgs.get(LON_MIN_POS);
Node latMax = objectArgs.get(LAT_MAX_POS);
Node lonMax = objectArgs.get(LON_MAX_POS);
// Check minimum arguments are all bound.
if (latMin.isVariable() || lonMin.isVariable() || latMax.isVariable() || lonMax.isVariable()) {
throw new ExprEvalException("Arguments are not all concrete: " + FmtUtils.stringForNode(latMin) + ", " + FmtUtils.stringForNode(lonMin) + FmtUtils.stringForNode(latMax) + ", " + FmtUtils.stringForNode(lonMax));
}
// 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.getNode()));
}
limit = limitNode.getInteger().intValue();
} else {
limit = DEFAULT_LIMIT;
}
Node geometryNode = ConvertLatLonBox.toNode(latMin, lonMin, latMax, lonMax);
GeometryWrapper geometryWrapper = GeometryWrapper.extract(geometryNode);
SearchEnvelope searchEnvelope = SearchEnvelope.build(geometryWrapper, indexSRSInfo);
return new SpatialArguments(limit, geometryWrapper, searchEnvelope);
} catch (DatatypeFormatException ex) {
throw new ExprEvalException(ex.getMessage(), ex);
}
}
use of org.apache.jena.geosparql.spatial.property_functions.SpatialArguments in project jena by apache.
the class GenericCardinalPropertyFunction method extractObjectArguments.
@Override
protected SpatialArguments extractObjectArguments(Node predicate, PropFuncArg object, SRSInfo indexSRSInfo) {
try {
// Check minimum arguments.
List<Node> objectArgs = object.getArgList();
if (objectArgs.size() < 2) {
throw new ExprEvalException(FmtUtils.stringForNode(predicate) + ": Minimum of 2 arguments.");
} else if (objectArgs.size() > 3) {
throw new ExprEvalException(FmtUtils.stringForNode(predicate) + ": Maximum of 3 arguments.");
}
Node lat = objectArgs.get(LAT_POS);
Node lon = objectArgs.get(LON_POS);
// Check minimum arguments are all bound.
if (lat.isVariable() || lon.isVariable()) {
throw new ExprEvalException("Arguments are not all concrete: " + FmtUtils.stringForNode(lat) + ", " + FmtUtils.stringForNode(lon));
}
// 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.getNode()));
}
limit = limitNode.getInteger().intValue();
} else {
limit = DEFAULT_LIMIT;
}
GeometryWrapper geometryWrapper = ConvertLatLon.toGeometryWrapper(lat, lon);
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.property_functions.SpatialArguments in project jena by apache.
the class NearbyPF method extractObjectArguments.
@Override
protected SpatialArguments extractObjectArguments(Node predicate, PropFuncArg object, SRSInfo indexSRSInfo) {
try {
// Check minimum arguments.
List<Node> objectArgs = object.getArgList();
if (objectArgs.size() < 3) {
throw new ExprEvalException(FmtUtils.stringForNode(predicate) + ": Minimum of 3 arguments.");
} else if (objectArgs.size() > 5) {
throw new ExprEvalException(FmtUtils.stringForNode(predicate) + ": Maximum of 5 arguments.");
}
Node lat = objectArgs.get(LAT_POS);
Node lon = objectArgs.get(LON_POS);
NodeValue radiusNode = NodeValue.makeNode(objectArgs.get(RADIUS_POS));
// Check minimum arguments are all bound.
if (lat.isVariable() || lon.isVariable() || !radiusNode.isDouble()) {
throw new ExprEvalException("Arguments are not all concrete: " + FmtUtils.stringForNode(lat) + ", " + FmtUtils.stringForNode(lon) + ", " + FmtUtils.stringForNode(radiusNode.asNode()));
}
radius = radiusNode.getDouble();
// Find the units.
if (objectArgs.size() > UNITS_POS) {
Node unitsNode = objectArgs.get(UNITS_POS);
if (!unitsNode.isURI()) {
throw new ExprEvalException("Not a URI: " + FmtUtils.stringForNode(unitsNode));
}
unitsURI = unitsNode.getURI();
} else {
unitsURI = DEFAULT_UNITS;
}
// 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.getNode()));
}
limit = limitNode.getInteger().intValue();
} else {
limit = DEFAULT_LIMIT;
}
GeometryWrapper geometryWrapper = ConvertLatLon.toGeometryWrapper(lat, lon);
SearchEnvelope searchEnvelope = SearchEnvelope.build(geometryWrapper, indexSRSInfo, radius, unitsURI);
return new SpatialArguments(limit, geometryWrapper, searchEnvelope);
} catch (DatatypeFormatException ex) {
throw new ExprEvalException(ex.getMessage(), ex);
}
}
use of org.apache.jena.geosparql.spatial.property_functions.SpatialArguments in project jena by apache.
the class NearbyGeomPF method extractObjectArguments.
@Override
protected SpatialArguments extractObjectArguments(Node predicate, PropFuncArg object, SRSInfo indexSRSInfo) {
try {
// Check minimum arguments.
List<Node> objectArgs = object.getArgList();
if (objectArgs.size() < 2) {
throw new ExprEvalException(FmtUtils.stringForNode(predicate) + ": Minimum of 2 arguments.");
} else if (objectArgs.size() > 4) {
throw new ExprEvalException(FmtUtils.stringForNode(predicate) + ": Maximum of 4 arguments.");
}
Node geomLit = object.getArg(GEOM_POS);
NodeValue radiusNode = NodeValue.makeNode(objectArgs.get(RADIUS_POS));
if (!radiusNode.isDouble()) {
throw new ExprEvalException("Not a xsd:double: " + FmtUtils.stringForNode(radiusNode.asNode()));
}
radius = radiusNode.getDouble();
// Find the units.
if (objectArgs.size() > UNITS_POS) {
Node unitsNode = objectArgs.get(UNITS_POS);
if (!unitsNode.isURI()) {
throw new ExprEvalException("Not a URI: " + FmtUtils.stringForNode(unitsNode));
}
unitsURI = unitsNode.getURI();
} else {
unitsURI = NearbyPF.DEFAULT_UNITS;
}
// 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 = SearchEnvelope.build(geometryWrapper, indexSRSInfo, radius, unitsURI);
return new SpatialArguments(limit, geometryWrapper, searchEnvelope);
} catch (DatatypeFormatException ex) {
throw new ExprEvalException(ex.getMessage(), ex);
}
}
use of org.apache.jena.geosparql.spatial.property_functions.SpatialArguments in project jena by apache.
the class NearbyPFTest method testExtractObjectArguments_4args.
/**
* Test of extractObjectArguments method, of class NearbyPF.
*/
@Test
public void testExtractObjectArguments_4args() {
Node predicate = NodeFactory.createURI(SpatialExtension.NEARBY_PROP);
float lat = 0;
float lon = 1;
float radius = 5000;
String unitsURI = Unit_URI.METRE_URL;
int limit = -1;
Literal geometry = ConvertLatLon.toLiteral(lat, lon);
List<Node> objectNodes = Arrays.asList(NodeValue.makeFloat(lat).asNode(), NodeValue.makeFloat(lon).asNode(), NodeValue.makeFloat(radius).asNode(), NodeFactory.createURI(unitsURI));
PropFuncArg object = new PropFuncArg(objectNodes);
GeometryWrapper geometryWrapper = GeometryWrapper.extract(geometry);
SearchEnvelope searchEnvelope = SearchEnvelope.build(geometryWrapper, SpatialIndexTestData.WGS_84_SRS_INFO, radius, unitsURI);
NearbyPF instance = new NearbyPF();
SpatialArguments expResult = new SpatialArguments(limit, geometryWrapper, searchEnvelope);
SpatialArguments result = instance.extractObjectArguments(predicate, object, SpatialIndexTestData.WGS_84_SRS_INFO);
assertEquals(expResult, result);
}
Aggregations