Search in sources :

Example 6 with GeometryWrapper

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);
    }
}
Also used : NodeValue(org.apache.jena.sparql.expr.NodeValue) SpatialArguments(org.apache.jena.geosparql.spatial.property_functions.SpatialArguments) DatatypeFormatException(org.apache.jena.datatypes.DatatypeFormatException) Node(org.apache.jena.graph.Node) GeometryWrapper(org.apache.jena.geosparql.implementation.GeometryWrapper) SearchEnvelope(org.apache.jena.geosparql.spatial.SearchEnvelope) ExprEvalException(org.apache.jena.sparql.expr.ExprEvalException)

Example 7 with GeometryWrapper

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);
    }
}
Also used : DatatypeFormatException(org.apache.jena.datatypes.DatatypeFormatException) FactoryException(org.opengis.util.FactoryException) GeometryWrapper(org.apache.jena.geosparql.implementation.GeometryWrapper) TransformException(org.opengis.referencing.operation.TransformException) ExprEvalException(org.apache.jena.sparql.expr.ExprEvalException) MismatchedDimensionException(org.opengis.geometry.MismatchedDimensionException)

Example 8 with GeometryWrapper

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);
    }
}
Also used : DatatypeFormatException(org.apache.jena.datatypes.DatatypeFormatException) FactoryException(org.opengis.util.FactoryException) Literal(org.apache.jena.rdf.model.Literal) GeometryWrapper(org.apache.jena.geosparql.implementation.GeometryWrapper) TransformException(org.opengis.referencing.operation.TransformException) ExprEvalException(org.apache.jena.sparql.expr.ExprEvalException)

Example 9 with GeometryWrapper

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);
}
Also used : NodeValue(org.apache.jena.sparql.expr.NodeValue) GeometryWrapper(org.apache.jena.geosparql.implementation.GeometryWrapper) Test(org.junit.Test)

Example 10 with GeometryWrapper

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);
}
Also used : NodeValue(org.apache.jena.sparql.expr.NodeValue) GeometryWrapper(org.apache.jena.geosparql.implementation.GeometryWrapper) Test(org.junit.Test)

Aggregations

GeometryWrapper (org.apache.jena.geosparql.implementation.GeometryWrapper)356 Test (org.junit.Test)297 DimensionInfo (org.apache.jena.geosparql.implementation.DimensionInfo)70 Node (org.apache.jena.graph.Node)64 SearchEnvelope (org.apache.jena.geosparql.spatial.SearchEnvelope)63 Literal (org.apache.jena.rdf.model.Literal)59 PropFuncArg (org.apache.jena.sparql.pfunction.PropFuncArg)53 LineString (org.locationtech.jts.geom.LineString)52 SpatialArguments (org.apache.jena.geosparql.spatial.property_functions.SpatialArguments)51 Geometry (org.locationtech.jts.geom.Geometry)48 CustomCoordinateSequence (org.apache.jena.geosparql.implementation.jts.CustomCoordinateSequence)39 ExprEvalException (org.apache.jena.sparql.expr.ExprEvalException)36 DatatypeFormatException (org.apache.jena.datatypes.DatatypeFormatException)32 NodeValue (org.apache.jena.sparql.expr.NodeValue)24 TransformException (org.opengis.referencing.operation.TransformException)21 FactoryException (org.opengis.util.FactoryException)21 Envelope (org.locationtech.jts.geom.Envelope)19 MismatchedDimensionException (org.opengis.geometry.MismatchedDimensionException)19 Coordinate (org.locationtech.jts.geom.Coordinate)15 Resource (org.apache.jena.rdf.model.Resource)13