rdf4j-postgis  Version 0.1.0.0
SetInteriorRing Class Reference

Sets an interior ring replacing an already existing interior ring of a polygon. More...

Inheritance diagram for SetInteriorRing:
Collaboration diagram for SetInteriorRing:

Public Member Functions

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

Protected Member Functions

Geometry relation (Geometry geom, Geometry geom2, Integer value)
 

Detailed Description

Sets an interior ring replacing an already existing interior ring of a polygon.

Member Function Documentation

◆ evaluate()

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

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

Referenced by SetGeometryTest.testSetGeometry(), SetGeometryTest.testSetGeometryZ(), and SetRingTest.testSetRing().

◆ getURI()

String getURI ( )
19  {
20  return POSTGIS.st_setInteriorRing.toString();
21  }

References POSTGIS.st_setInteriorRing.

◆ relation()

Geometry relation ( Geometry  geom,
Geometry  geom2,
Integer  value 
)
protected

Reimplemented from GeometricModifierGeometryIntegerFunction.

24  {
25  if(geom instanceof Polygon) {
26  Polygon poly=(Polygon) geom;
27  List<LinearRing> rings=new LinkedList<LinearRing>();
28  for(int i=0;i<poly.getNumInteriorRing();i++) {
29  if(i==value) {
30  rings.add((LinearRing)geom2);
31  }
32  }
33  GeometryFactory fac=new GeometryFactory();
34  return fac.createPolygon((LinearRing)poly.getExteriorRing(), rings.toArray(new LinearRing[0]));
35  }
36  return null;
37  }