rdf4j-postgis  Version 0.1.0.0
SharedPaths Class Reference

Calculates shared paths of two geometries. More...

Inheritance diagram for SharedPaths:
Collaboration diagram for SharedPaths:

Public Member Functions

String getURI ()
 
Value evaluate (ValueFactory valueFactory, Value... args) throws ValueExprEvaluationException
 

Protected Member Functions

Geometry relation (Geometry geom1, Geometry geom2)
 

Detailed Description

Calculates shared paths of two geometries.

Member Function Documentation

◆ evaluate()

Value evaluate ( ValueFactory  valueFactory,
Value...  args 
) throws ValueExprEvaluationException
inherited
17  {
18  if (args.length != 2) {
19  throw new ValueExprEvaluationException(getURI() + " requires exactly 2 arguments, got " + args.length);
20  }
21 
22  LiteralType l=LiteralRegistry.getLiteral(((Literal)args[0]).getDatatype().toString());
23  LiteralType l2=LiteralRegistry.getLiteral(((Literal)args[1]).getDatatype().toString());
24  if(l instanceof VectorLiteral) {
25  Geometry geom=((VectorLiteral)l).read(args[0].stringValue());
26  Geometry geom2=((VectorLiteral)l2).read(args[1].stringValue());
27  Geometry transformed=LiteralUtils.transform(geom2, geom);
28  Geometry result = relation(geom,transformed);
29  return valueFactory.createLiteral(((VectorLiteral) l).unparse(result),((Literal)args[0]).getDatatype());
30  }
31  throw new ValueExprEvaluationException("Arguments given are not geometry literals");
32  }

References LiteralRegistry.getLiteral(), GeometricRelationModifierFunction.relation(), and LiteralUtils.transform().

Referenced by LongestLineTest.testLongestLine(), ShortestLineTest.testShortestLine(), and ShortestLine3DTest.testShortestLine3D().

◆ getURI()

String getURI ( )
17  {
18  return POSTGIS.st_sharedPaths.stringValue();
19  }

References POSTGIS.st_sharedPaths.

◆ relation()

Geometry relation ( Geometry  geom1,
Geometry  geom2 
)
protected

Reimplemented from GeometricRelationModifierFunction.

22  {
23  List<Geometry> intersections=new LinkedList<>();
24  Geometry transformed=LiteralUtils.transform(geom2, geom1);
25  if((geom1.getGeometryType().equals("MultiLineString") || geom1.getGeometryType().equals("LineString"))
26  && (transformed.getGeometryType().equals("MultiLineString") || transformed.getGeometryType().equals("LineString"))) {
27  for(int i=0;i<geom1.getNumGeometries();i++) {
28  for(int j=0;j<transformed.getNumGeometries();j++) {
29  if(geom1.intersects(transformed.getGeometryN(j))){
30  intersections.add(geom1.getGeometryN(i).intersection(transformed.getGeometryN(j)));
31  }
32  }
33  }
34  return LiteralUtils.createGeometryCollection(intersections, "GEOMETRYCOLLECTION", geom1.getSRID());
35  }
36  return null;
37  }

References LiteralUtils.createGeometryCollection(), and LiteralUtils.transform().