use of org.apache.jena.geosparql.implementation.GeometryWrapper 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.implementation.GeometryWrapper in project jena by apache.
the class DistanceFF method exec.
@Override
public NodeValue exec(NodeValue v1, NodeValue v2, NodeValue v3) {
try {
GeometryWrapper geometry1 = GeometryWrapper.extract(v1, GeometryLiteralIndex.GeometryIndex.PRIMARY);
GeometryWrapper geometry2 = GeometryWrapper.extract(v2, GeometryLiteralIndex.GeometryIndex.SECONDARY);
if (!(v3.isIRI() || v3.isString())) {
throw new ExprEvalException("Not an IRI or String: " + FmtUtils.stringForNode(v3.asNode()));
}
String unitsURI;
if (v3.isIRI()) {
unitsURI = v3.asNode().getURI();
} else {
unitsURI = v3.asString();
}
double distance = geometry1.distance(geometry2, unitsURI);
return NodeValue.makeDouble(distance);
} catch (DatatypeFormatException | FactoryException | MismatchedDimensionException | TransformException ex) {
throw new ExprEvalException(ex.getMessage(), ex);
}
}
use of org.apache.jena.geosparql.implementation.GeometryWrapper in project jena by apache.
the class TransformFF method exec.
@Override
public NodeValue exec(NodeValue v1, NodeValue v2, NodeValue v3) {
try {
if (!(v2.isIRI() || v2.isString())) {
throw new ExprEvalException("Not a URI: " + FmtUtils.stringForNode(v2.asNode()));
}
if (!(v3.isIRI() || v3.isString())) {
throw new ExprEvalException("Not a URI: " + FmtUtils.stringForNode(v3.asNode()));
}
String datatypeURI;
if (v2.isIRI()) {
datatypeURI = v2.asNode().getURI();
} else {
datatypeURI = v2.asString();
}
String srsURI;
if (v3.isIRI()) {
srsURI = v3.asNode().getURI();
} else {
srsURI = v3.asString();
}
GeometryWrapper geometry = GeometryWrapper.extract(v1, GeometryLiteralIndex.GeometryIndex.PRIMARY);
GeometryWrapper convertedGeom = geometry.transform(srsURI);
Literal convertedGeomLit = convertedGeom.asLiteral(datatypeURI);
return NodeValue.makeNode(convertedGeomLit.getLexicalForm(), convertedGeomLit.getDatatype());
} catch (DatatypeFormatException | TransformException | FactoryException ex) {
throw new ExprEvalException(ex.getMessage(), ex);
}
}
use of org.apache.jena.geosparql.implementation.GeometryWrapper in project jena by apache.
the class DimensionPFTest method testApplyPredicate_0_Dimension.
/**
* Test of applyPredicate method, of class DimensionPF.
*/
@Test
public void testApplyPredicate_0_Dimension() {
GeometryWrapper geometryWrapper = GeometryWrapper.extract("<http://www.opengis.net/def/crs/EPSG/0/27700> POINT(90 60)", WKTDatatype.URI);
DimensionPF instance = new DimensionPF();
NodeValue expResult = NodeValue.makeNodeInteger(0);
NodeValue result = instance.applyPredicate(geometryWrapper);
assertEquals(expResult, result);
}
use of org.apache.jena.geosparql.implementation.GeometryWrapper in project jena by apache.
the class IsSimplePFTest method testApplyPredicate_true.
/**
* Test of applyPredicate method, of class IsSimplePF.
*/
@Test
public void testApplyPredicate_true() {
GeometryWrapper geometryWrapper = GeometryWrapper.extract("<http://www.opengis.net/def/crs/EPSG/0/27700> LINESTRING(90 60, 100 70)", WKTDatatype.URI);
IsSimplePF instance = new IsSimplePF();
NodeValue expResult = NodeValue.makeNodeBoolean(true);
NodeValue result = instance.applyPredicate(geometryWrapper);
assertEquals(expResult, result);
}
Aggregations