rdf4j-postgis  Version 0.1.0.0
AddInteriorRing Class Reference

Adds an additional interior ring to a given polygon. More...

Inheritance diagram for AddInteriorRing:
Collaboration diagram for AddInteriorRing:

Public Member Functions

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

Protected Member Functions

Geometry relation (Geometry geom, Geometry g2)
 

Detailed Description

Adds an additional interior ring to a given polygon.

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("Argument given is not a geometry literal");
32  }

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

Referenced by AddGeometryTest.testAddGeometry(), AddGeometryTest.testAddGeometryZ(), AddPointTest.testAddPoint(), AddPointTest.testAddPointZ(), AddRingTest.testAddRing(), ClosestPointTest.testClosestPoint(), FurthestCoordinateTest.testFurthestCoordinate(), SetEndPointTest.testSetEndPoint(), and SetStartPointTest.testSetStartPoint().

◆ getURI()

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

References POSTGIS.st_addInteriorRing.

◆ relation()

Geometry relation ( Geometry  geom,
Geometry  g2 
)
protected

Reimplemented from GeometricModifierFunction.

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  rings.add((LinearRing)poly.getInteriorRingN(i));
30  }
31  rings.add((LinearRing)g2);
32  GeometryFactory fac=new GeometryFactory();
33  return fac.createPolygon((LinearRing)poly.getExteriorRing(), rings.toArray(new LinearRing[0]));
34  }
35  return null;
36  }